Compare commits

...

1176 Commits

Author SHA1 Message Date
vorotamoroz 1e7c1db1c4 fix generated type path 2026-06-11 09:37:20 +01:00
vorotamoroz 8df9a1b53b fix paths 2026-06-11 07:57:04 +01:00
vorotamoroz 32c9f76c93 add type defs for community automatic review 2026-06-11 06:14:58 +01:00
vorotamoroz 7e65e5dc68 fix imports 2026-06-11 06:12:39 +01:00
vorotamoroz c03fa5213f fix imports 2026-06-11 04:28:07 +01:00
vorotamoroz 3b538a143a fix tool 2026-06-11 04:20:26 +01:00
vorotamoroz 3c6ec75c00 fix imports 2026-06-11 04:09:43 +01:00
vorotamoroz 27e9b68510 (chore): Resolving circular references 2026-06-10 11:45:41 +01:00
vorotamoroz e4b36602ec (chore): split utils 2026-06-10 11:22:34 +01:00
vorotamoroz 36827d4799 update submodule 2026-06-10 10:38:59 +01:00
vorotamoroz f596e7dd68 (chore): fix import paths 2026-06-10 10:33:41 +01:00
vorotamoroz b0ac01e52f append exclude 2026-06-10 10:31:40 +01:00
vorotamoroz b4077bd1f5 (chore): add utility for refactoring 2026-06-10 10:29:56 +01:00
vorotamoroz 675de883e9 (chore): fix import paths 2026-06-10 09:40:55 +01:00
vorotamoroz 4b8de7c915 Add importAlias 2026-06-10 09:40:43 +01:00
vorotamoroz 4f8a74107c remove unnecessary package 2026-06-09 08:11:05 +01:00
vorotamoroz 42ed0d8795 update dir notation 2026-06-09 07:25:41 +01:00
vorotamoroz 54c2b1c6db reduce no-explicit-any 2026-06-09 05:59:02 +01:00
vorotamoroz 0856693aac Add instruction 2026-06-09 02:26:07 +01:00
vorotamoroz 39d78a04ac Enhance remote database management and add --vault option
Added new commands for remote database management and introduced --vault option for daemon and mirror commands.
2026-06-08 21:12:42 +09:00
vorotamoroz 0b8d73ccd8 Merge pull request #948 from vrtmrz/adjust_overwrite_prevention
Adjust overwrite prevention
2026-06-08 19:57:20 +09:00
vorotamoroz 5921a71227 Add CI 2026-06-08 10:52:00 +00:00
vorotamoroz a40929c9e4 fixed: enhance conflict handling by adding settings check for document writes 2026-06-08 10:47:34 +00:00
vorotamoroz 2d8a285201 Port new tests 2026-06-08 10:38:54 +00:00
vorotamoroz d9903bfe9e Merge pull request #947 from vrtmrz/0_25_74
Release: 0.25.74
2026-06-08 19:29:33 +09:00
vorotamoroz a6e7dddf7f Merge branch '0_25_74' into cli_test_deno 2026-06-08 11:29:06 +01:00
vorotamoroz 9a51c78011 tweak specificity 2026-06-08 11:18:35 +01:00
vorotamoroz 7b9c0b011f bump 2026-06-08 11:15:13 +01:00
vorotamoroz 26a050e6f6 Merge pull request #946 from vrtmrz/cli_vaultpath
feat:  decouple the database and vault directories
2026-06-08 19:12:11 +09:00
vorotamoroz 34162f747c fix corrupted test, update submodule 2026-06-08 11:10:37 +01:00
vorotamoroz 9e87ee4da1 Merge branch 'main' into cli_vaultpath 2026-06-08 19:07:02 +09:00
vorotamoroz ba5d4c434b Merge pull request #945 from vrtmrz/fix_941
fixed: ignore hidden files completely if hidden file sync disabled
2026-06-08 18:57:09 +09:00
vorotamoroz 8f44f4c61d Merge remote-tracking branch 'origin/main' into fix_941 2026-06-08 10:55:47 +01:00
vorotamoroz 23d8a1ecc3 update submodule 2026-06-08 10:51:08 +01:00
vorotamoroz a46abcad52 Merge branch 'main' into fix_941 2026-06-08 10:50:34 +01:00
vorotamoroz 347e1fcee5 Merge pull request #944 from vrtmrz/fix_911
fixed: fix automatic merging behaviour
2026-06-08 18:47:29 +09:00
vorotamoroz d85d8bc5e4 Merge branch 'main' into fix_911 2026-06-08 18:45:35 +09:00
vorotamoroz c493fb6f66 Merge pull request #942 from vrtmrz/feat_cli_database_commands
feat: Added new remote management commands
2026-06-08 18:44:32 +09:00
vorotamoroz cf173caf88 feat: decouple the database and vault directories 2026-06-08 10:43:10 +01:00
vorotamoroz a41c7b2f70 Merge pull request #928 from starskyzheng/feat/cli-daemon-vault-option
feat(cli): add --vault option for daemon and mirror commands
2026-06-08 18:03:25 +09:00
vorotamoroz 3acaa7f269 update readme 2026-06-08 09:26:43 +01:00
vorotamoroz 85787eddb3 fixed: ignore hidden files completely if hidden file sync disabled 2026-06-08 09:24:59 +01:00
vorotamoroz 8cbb233df7 fixed: fix automatic merging behaviour 2026-06-08 09:04:12 +01:00
vorotamoroz 5922186a0e feat: Added new remote management commands 2026-06-08 04:23:22 +00:00
vorotamoroz 60f21eb9d2 detect loopback and coturn option 2026-06-05 09:44:17 +01:00
vorotamoroz 6b7816d334 add coturn for test 2026-06-05 09:39:39 +01:00
vorotamoroz 369e62ee8d Improved: we can set empty for turnServer explicitly. 2026-06-05 09:27:19 +01:00
vorotamoroz 37593bbee6 Update CI to use deno 2026-06-05 09:07:38 +01:00
vorotamoroz baa51a66a7 Merge branch 'main' into cli_test_deno 2026-06-05 08:34:31 +01:00
郑泽宇 be979a3bf1 fix(cli): respect mirror positional arg before --vault flag
Per vrtmrz's review feedback, restore the mirror [vault-path] positional
argument support with correct priority order:
  mirror positional arg > --vault flag > databasePath

Also update --vault help text and CLI README with the new option.
2026-06-05 11:50:23 +08:00
vorotamoroz 31050c9cb8 update docs 2026-06-05 03:05:13 +09:00
vorotamoroz 1b44ab9f2b docs: update documentation 2026-06-05 01:57:03 +09:00
vorotamoroz 3a78c70539 (chore) update terms 2026-06-05 01:24:46 +09:00
vorotamoroz 0f08ad435f (chore): improve English 2026-06-05 01:08:54 +09:00
vorotamoroz 96abd930b3 Merge pull request #938 from vrtmrz/0_25_73
Release 0.25.73
2026-06-04 18:50:11 +09:00
vorotamoroz 4581db45c4 bump 2026-06-04 10:44:56 +01:00
vorotamoroz 05cab8ec66 Merge pull request #937 from vrtmrz/fix_926
fix: adjust CouchDB's database name checking to its specification
2026-06-04 18:39:38 +09:00
vorotamoroz b005625ef3 Merge branch 'main' into fix_926 2026-06-04 18:38:26 +09:00
vorotamoroz e5408b4dd7 Merge pull request #936 from vrtmrz/fix_path_handling_on_windows_cli
Fix: No longer path corruption on windows environment
2026-06-04 18:37:47 +09:00
vorotamoroz 95a9b1b41c Merge pull request #935 from vrtmrz/fix_first_fetch2
fixed: `Reset Syncronisation on This Device` for minio and P2P
2026-06-04 18:37:23 +09:00
vorotamoroz 2aa8bc1165 fix: adjust CouchDB's database name checking to its specification (#926). 2026-06-04 10:35:15 +01:00
vorotamoroz f8998d5441 (fixed): No longer path corruption on windows environment (at least, pass the check) on CLI 2026-06-04 10:17:34 +01:00
vorotamoroz 26f5f54f24 fixed: Reset Syncronisation on This Device for minio and P2P is now working properly. 2026-06-04 09:40:27 +01:00
vorotamoroz 99f3aca024 Merge pull request #933 from vrtmrz/0_25_71
0 25 72
2026-06-03 20:22:29 +09:00
vorotamoroz 194397dd94 bump again 2026-06-03 12:12:21 +01:00
vorotamoroz afa79d78dc bump 2026-06-03 11:18:25 +01:00
vorotamoroz 9a9440a768 Merge branch 'improve_first_fetch' into 0_25_71 2026-06-03 11:03:46 +01:00
vorotamoroz e375860af8 fix importing issue and unit test issue 2026-06-03 06:58:19 +01:00
vorotamoroz b57f34c15b Revise devs note 2026-06-03 01:13:50 +00:00
vorotamoroz b82fd9f04b Revise redflag.md option descriptions
Updated descriptions for redflag options in troubleshooting documentation.
2026-06-02 21:14:42 +09:00
vorotamoroz bb77426b7b update dependencies and bump 2026-06-02 12:50:46 +01:00
vorotamoroz 1bef5fbef3 Merge branch 'fix_warns' into improve_first_fetch 2026-06-02 12:36:32 +01:00
vorotamoroz 7d2ba1b0b9 ### Improved
- Database fetching (a.k.a. Reset Synchronisation on This Device) on the initialisation now supports streaming and is faster (CouchDB only)
- The database fetching process has been streamlined, and database operations are now suspended until it has been completed
- The initial synchronisation process has been simplified, making it easier to synchronise files with the remote server
- We can select the remote database to fetch from during the initialisation, when there are multiple remote databases configured (e.g. multiple CouchDBs or S3 remotes)
2026-06-02 12:34:46 +01:00
vorotamoroz ac6b9a4dad fix bad English 2026-06-01 12:13:01 +01:00
vorotamoroz 225e2c5096 bump 2026-06-01 12:10:56 +01:00
vorotamoroz 674d68b7d9 Fixed:
-  No longer the status element breaks other plugins' interaction (#930).
2026-06-01 12:05:31 +01:00
vorotamoroz 0e6dd300ef Merge branch 'fix_warns' into improve_first_fetch 2026-06-01 11:22:01 +01:00
vorotamoroz 8171db353a bump 2026-06-01 11:19:42 +01:00
vorotamoroz 6ab1556880 prettify 2026-06-01 11:19:32 +01:00
vorotamoroz cd2bff5fc7 Refactor types in svelte components. 2026-06-01 11:18:23 +01:00
vorotamoroz 5a280c7919 (feat): Bulk database fetching is now work in progress. This feature is expected to speed up rebuilds and setups. (WIP) 2026-06-01 10:41:48 +01:00
vorotamoroz c6697327d5 Fixed typings
Fixed wrong typing for serviceHub, svelte dialog
2026-06-01 06:20:33 +01:00
vorotamoroz 7c203a522a Aligned to eslint rules and fixed following things:
This commit may contains behavioural changes.

- Fix for the issue with corrupted log displays
- Wrap the activeDocument
- Reduced potential type errors and strengthened certain checks
- Made error handling more robust (by rewriting the error class)
2026-06-01 05:28:03 +01:00
vorotamoroz c80c294d93 satisfies
Address following rules
-
- @typescript-eslint/unbound-method
- obsidianmd/prefer-active-doc
- obsidianmd/prefer-window-timer

Improve typing
2026-06-01 04:20:47 +01:00
vorotamoroz 3e65ae932d Address following rules
- @typescript-eslint/no-redundant-type-constituents
2026-06-01 03:50:51 +01:00
vorotamoroz f710f03380 Address following rules
- @typescript-eslint/no-redundant-type-constituents
- @typescript-eslint/no-unnecessary-type-assertion
2026-06-01 03:37:55 +01:00
vorotamoroz b887269fc1 change eslint for more progressive 2026-06-01 02:37:07 +01:00
vorotamoroz 56a234e6d7 chore: wrap timer functions 2026-05-31 19:03:43 +09:00
vorotamoroz 39014b2294 use coreEnvVars for some vars 2026-05-30 23:59:36 +09:00
vorotamoroz 24e6c110a3 Remove unused imports 2026-05-30 23:53:19 +09:00
vorotamoroz f24d110552 Change type assertion 2026-05-30 23:49:32 +09:00
vorotamoroz 7189c1c05a Update dependency
set no-deprecated to warn
2026-05-30 23:42:32 +09:00
vorotamoroz 547afe9a86 remove unused eslint comment
use _fetch instead of fetch
add ignore list
2026-05-30 23:32:46 +09:00
vorotamoroz 7b5876037d Add ignores 2026-05-30 23:22:17 +09:00
vorotamoroz b714c00644 (chore): Improve type assertion, remove unused imports 2026-05-29 04:19:58 +01:00
郑泽宇 fff6df535f feat(cli): add --vault option for daemon and mirror commands
Allow specifying a separate vault directory for .md files, decoupled from
the database directory (where PouchDB data lives).

- Add --vault/-V flag to CLI options parser
- Use vaultPath (or fallback to databasePath) for file system operations
- Works with both daemon and mirror commands
- Log vault path alongside database path at startup
2026-05-28 16:44:34 +08:00
vorotamoroz e14e771bfb (chore): tidied tsconfig and eslint, and some incorrect imports 2026-05-28 04:42:03 +01:00
vorotamoroz 1130bbcee8 remove unmaintained tests 2026-05-26 11:33:14 +01:00
vorotamoroz 8841ef4619 fix css duplicated props 2026-05-26 11:27:31 +01:00
vorotamoroz 45fe0b3682 chore: lint: enable cache and concurrency 2026-05-26 11:24:41 +01:00
vorotamoroz 8d3825abc9 Merge pull request #925 from vrtmrz/v0_25_70
Releasing v0.25.70
2026-05-25 18:38:04 +09:00
vorotamoroz c5f9841b85 chore: fix grammatical error 2026-05-25 10:14:18 +01:00
vorotamoroz d36d176d99 bump 2026-05-25 10:10:46 +01:00
vorotamoroz 38b2cf73ed Update lib (forgot to include #942) 2026-05-25 09:55:11 +01:00
vorotamoroz 40b15a6950 Merge pull request #924 from vrtmrz/p2p_add_fix_and_diag
Improvements: More diagnostic information for P2P connections
2026-05-25 17:52:37 +09:00
vorotamoroz e312bb7640 Merge pull request #891 from SeleiXi/feat/conflict-diff-jump
feat: add diff navigation to conflict resolver
2026-05-25 17:51:49 +09:00
Ching Wing Kwok 852c0e6c13 Merge branch 'main' into feat/conflict-diff-jump 2026-05-25 15:38:21 +08:00
vorotamoroz 7c1bcf9e9b Merge pull request #889 from SeleiXi/diff-only-button
feat: add diff-only view button to document history
2026-05-25 14:00:11 +09:00
vorotamoroz 2b79bed085 Merge branch 'main' into pr/SeleiXi/889 2026-05-25 05:43:36 +01:00
vorotamoroz 6b1e0c4aa8 Merge pull request #890 from SeleiXi/feat/history-search
feat: Add document history search
2026-05-25 12:55:29 +09:00
vorotamoroz 3c3645eba4 Improved: More diagnostic information for P2P connections is now shown, including why a connection failure occurred and the current connection status. 2026-05-25 04:31:22 +01:00
SeleiXi 009cc3c87a Merge remote-tracking branch 'origin/main' into feat/conflict-diff-jump
# Conflicts:
#	src/modules/features/InteractiveConflictResolving/ConflictResolveModal.ts
2026-05-23 02:06:52 +08:00
SeleiXi fc5fd4be94 Merge remote-tracking branch 'origin/main' into feat/history-search
# Conflicts:
#	src/lib
#	src/modules/features/DocumentHistory/DocumentHistoryModal.ts
2026-05-23 02:05:33 +08:00
SeleiXi 8ed1acf79d Merge remote-tracking branch 'origin/main' into diff-only-button
# Conflicts:
#	src/modules/features/DocumentHistory/DocumentHistoryModal.ts
2026-05-23 02:04:48 +08:00
vorotamoroz c518223d21 Merge pull request #923 from vrtmrz/p2p_add_fix_and_diag
0.25.69: Fix P2P, add diag feature
2026-05-23 00:47:36 +09:00
vorotamoroz caaff618e9 fix grammar 2026-05-22 16:40:40 +01:00
vorotamoroz 148aa8505e bump 2026-05-22 16:38:44 +01:00
vorotamoroz f9a626a858 ### Fixed
- No longer the P2P passphrase mismatch causes a server shutdown.
- Settings related to P2P synchronisation are now correctly applied on start-up and no longer reverted.

### New features
- Diagnostic P2P connection stats are now available.
  - These stats indicate the number of connection trials, successes, and, failures.
2026-05-22 16:37:05 +01:00
vorotamoroz 2f10121d6c Merge remote-tracking branch 'origin/main' into cli_test_deno 2026-05-22 10:19:30 +00:00
vorotamoroz 1b8747115c Merge pull request #922 from vrtmrz/update_trystero
Releasing v0.25.68 (dependency and P2P update)
2026-05-22 19:17:22 +09:00
vorotamoroz e739302fb9 bump 2026-05-22 11:11:18 +01:00
vorotamoroz 8f20d53f55 Update trystero, typed well. fixed some potentially problems
Weaken terser for libraries
2026-05-22 11:01:51 +01:00
vorotamoroz 3ab80190d6 test fix ci (Redundant test) 2026-05-22 03:48:41 +00:00
vorotamoroz 8948bf2803 test cli:p2p use nonce for peername 2026-05-22 03:48:02 +00:00
vorotamoroz 486fd15c60 fix resouce handling 2026-05-22 03:46:56 +00:00
vorotamoroz 5fd85c71ca test: chore: prettify 2026-05-22 03:20:28 +00:00
vorotamoroz c1f41910c4 test: add actions / caching 2026-05-22 03:20:11 +00:00
vorotamoroz 3693d6a6b6 test: add port ready, container cleanup 2026-05-22 03:19:48 +00:00
vorotamoroz cc3c992b1d cli: add large-file-test and benchmark between couchdb and p2p 2026-05-22 03:05:44 +00:00
vorotamoroz df390ac456 test: fix deno test helpers 2026-05-22 03:02:11 +00:00
vorotamoroz fd84b0377b Update actions 2026-05-21 10:02:46 +01:00
vorotamoroz 340d416b76 Merge pull request #920 from vrtmrz/v0_25_66
Release v0.25.67
2026-05-20 19:44:41 +09:00
vorotamoroz 3034af8d69 bump again 2026-05-20 11:37:51 +01:00
vorotamoroz da3020bd45 fixed: fix auto-correction mismatch 2026-05-20 11:34:28 +01:00
vorotamoroz ce232c1002 bump 2026-05-20 11:14:41 +01:00
vorotamoroz 0e13926400 fixed: update lib
I should do this with #919
2026-05-20 11:10:43 +01:00
vorotamoroz fab7ec996a Merge pull request #919 from vrtmrz:feat_cli_remote_select
feat: add CLI commands to handle multiple remote configuration
2026-05-20 19:05:49 +09:00
vorotamoroz 88e22f99c5 Merge pull request #917 from vrtmrz:feat_tweak_auto_adjust
feat: implement auto-accept compatible tweak
2026-05-20 19:02:58 +09:00
vorotamoroz 83cbabf06f Merge branch 'main' into feat_tweak_auto_adjust 2026-05-20 11:01:51 +01:00
vorotamoroz 5e8d3b8f02 Update lib 2026-05-20 11:00:38 +01:00
vorotamoroz 1167b41340 feat: add CLI commands to handle multiple remote configuration 2026-05-20 05:10:42 +01:00
vorotamoroz 67da3964e5 Merge pull request #918 from vrtmrz/v0_25_65
V0.25.65
2026-05-19 20:27:34 +09:00
vorotamoroz 45ebc7eb6b Update the doc and issue report, and bump 2026-05-19 12:17:26 +01:00
vorotamoroz cc5ead68bc minor layout fix 2026-05-19 11:59:54 +01:00
vorotamoroz 9b9e4f22f3 Merge pull request #916 from vrtmrz:fix_866
fixed: Now Chunk Splitter: `V3: Fine Deduplication`
2026-05-19 19:46:08 +09:00
vorotamoroz 7823f46053 Merge branch 'main' into fix_866 2026-05-19 11:45:41 +01:00
vorotamoroz d6d8e548b3 Merge pull request #915 from vrtmrz/improve_log_feature
Improve log features
2026-05-19 19:40:28 +09:00
vorotamoroz 44b1ed7610 Merge branch 'main' into improve_log_feature 2026-05-19 11:40:14 +01:00
vorotamoroz 5786da5534 merged 2026-05-19 11:38:05 +01:00
vorotamoroz 042a80dd44 Merge pull request #914 from vrtmrz/fix_ios_resume
fix: Fix an issue about resuming from background on iOS (#888).
2026-05-19 19:34:49 +09:00
vorotamoroz ee30f6cd6d fixed: Now Chunk Splitter: V3: Fine Deduplication is working fine again (#866). 2026-05-19 11:26:35 +01:00
vorotamoroz 977a300808 fix grammatical error 2026-05-19 04:10:39 +01:00
vorotamoroz a392ccab6a - Improved an error verbosity on concurrent processing on start-up process.
- Now the `report` includes recent logs (of verbosity `verbose` even settings is not set to `verbose`).
- Updating logs is now debounced to avoid excessive updates during rapid log generation.
- Added a `Generate full report for opening the issue with debug info` command to the command palette, which generates a report without opening the settings dialogue.
2026-05-19 04:09:04 +01:00
vorotamoroz dfdfa5383b grammatical fix 2026-05-19 01:55:10 +01:00
vorotamoroz a08294ab16 fix: Fix an issue about resuming from background on iOS (#888). 2026-05-18 12:30:03 +01:00
vorotamoroz e8c33a0d6a feat: implement auto-accept compatible tweak setting and enhance mismatch resolution logic 2026-05-18 11:21:53 +01:00
vorotamoroz d6bf453a6d Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2026-05-18 11:07:43 +01:00
vorotamoroz e80cdc2dae remove unused files 2026-05-18 08:47:03 +01:00
vorotamoroz 60780678fd Merge pull request #903 from Joysimple/cli-docker
bugfix: Add package-lock.json into docker build
2026-05-18 12:38:12 +09:00
vorotamoroz 273e7a2b63 Merge pull request #909 from vrtmrz/p2p_config_selectable
P2p config selectable (a.k.a. v0.25.64)
2026-05-17 13:24:40 +09:00
vorotamoroz 2572c54744 Track main 2026-05-17 13:17:09 +09:00
vorotamoroz 6a7c987985 bump 2026-05-17 13:13:21 +09:00
vorotamoroz 6ef866a77c P2P: Enhance status pane and card with active remote selection and replication features
- Added active P2P remote selector and creation option in the status pane.
- Introduced immediate replication action for accepted peers.
- Updated status control icons for clarity.
- Display stable Room ID suffix above Peer ID in the status card.
- Implemented dedicated active remote configuration for P2P features.
- Added migration support for P2P active remote selection.
- Improved unit test coverage for P2P settings.
2026-05-17 13:08:51 +09:00
vorotamoroz eea26dee74 Update about P2P 2026-05-17 02:35:20 +09:00
vorotamoroz ee24fe8c24 Merge pull request #904 from vrtmrz/enhance_fix_p2p
Fixed: fixed P2P bugs and and implement new UI
2026-05-17 02:32:50 +09:00
vorotamoroz 9d9364af36 Fix updates.md 2026-05-17 02:24:58 +09:00
vorotamoroz 83228e2077 Fix P2P replicator creation and enhance error handling in synchronization functions 2026-05-17 02:23:58 +09:00
vorotamoroz a379b5bd78 bump 2026-05-17 01:40:50 +09:00
vorotamoroz 4ed1749652 Enhance P2P synchronization features and UI improvements 2026-05-17 01:36:09 +09:00
vorotamoroz 9a90256a8a Enhance P2P synchronization features and UI improvements 2026-05-16 23:50:08 +09:00
vorotamoroz f0628a0d2c Improve UI 2026-05-16 23:09:11 +09:00
vorotamoroz d5e2f57781 Fixed: fixed P2P bugs and and implement new UI 2026-05-15 10:18:53 +01:00
Nikolay Sokolov 02673a1631 bugfix: Add package-lock.json into docker build 2026-05-14 23:17:37 -07:00
vorotamoroz 91c9746886 Merge pull request #900 from vrtmrz/v0_25_62
Releasing v0.25.62
2026-05-14 20:15:02 +09:00
vorotamoroz 75b44b1636 bump 2026-05-14 09:40:12 +00:00
vorotamoroz f1fe48c1ee add version-bump 2026-05-14 09:35:53 +00:00
vorotamoroz 437e7c0d9c Fixed an issue where a connection could not be established when attempting to connect to a brand-new remote database without going through the set-up wizard or configuration checking 2026-05-14 09:32:34 +00:00
vorotamoroz 5ffa7ec7ee Merge pull request #897 from vrtmrz/v0_25_61
Releaseing v0.25.61
2026-05-13 23:06:57 +09:00
vorotamoroz a1859f5d2e bump 2026-05-13 14:44:38 +01:00
vorotamoroz 785af8cb8f Merge pull request #896 from vrtmrz/address_community_review
Address community review
2026-05-13 22:29:37 +09:00
vorotamoroz 06e1f4aa4a Update subrepo pointer 2026-05-13 14:25:49 +01:00
vorotamoroz 767f22ce9c Merge branch 'address_community_review' of https://github.com/vrtmrz/obsidian-livesync into address_community_review 2026-05-13 14:16:51 +01:00
vorotamoroz 6a9bba702c chore: ran prettier 2026-05-13 14:10:56 +01:00
vorotamoroz de2397dc3f Adding a rough DI 2026-05-13 14:10:55 +01:00
vorotamoroz daaad9212e Fix package-lock 2026-05-13 14:10:54 +01:00
vorotamoroz a6891374a1 chore: Package modernise, update linter 2026-05-13 14:10:01 +01:00
vorotamoroz b1cadf0549 prettify 2026-05-13 14:07:58 +01:00
vorotamoroz 95f40cc954 (chore): removing DOM Operation 2026-05-13 14:07:58 +01:00
vorotamoroz 8deaf123d6 Update eslint config to ignore file,
fix some type error on LiveSyncBaseCore
2026-05-13 14:06:51 +01:00
vorotamoroz 053813bffb Update for review once 2026-05-13 14:06:51 +01:00
vorotamoroz cc7af03618 chore: Package modernise, update linter 2026-05-13 14:06:51 +01:00
vorotamoroz a130e3700e prettify 2026-05-13 14:06:50 +01:00
vorotamoroz 0549e901b2 (chore): removing DOM Operation 2026-05-13 14:06:49 +01:00
vorotamoroz e9afe06968 Merge pull request #895 from vrtmrz/update_lib
Update lib to fix P2P problems and merging contributions
2026-05-13 22:01:17 +09:00
vorotamoroz c45aca4794 fixed: fixed subrepo pointer
I thought I’d rebased it, but it turns out everything had been merged.
2026-05-13 13:45:09 +01:00
vorotamoroz e2c54aaf43 Update lib to fix P2P problems 2026-05-13 13:31:11 +01:00
vorotamoroz 37715d4c9f chore: ran prettier 2026-05-13 11:12:40 +00:00
vorotamoroz 106367fa41 Adding a rough DI 2026-05-13 11:09:04 +00:00
vorotamoroz 538130aa91 Fix package-lock 2026-05-13 11:36:01 +01:00
vorotamoroz c9d0357fec Merge branch 'address_community_review' of https://github.com/vrtmrz/obsidian-livesync into address_community_review 2026-05-13 11:35:01 +01:00
vorotamoroz d05c76da36 Update eslint config to ignore file,
fix some type error on LiveSyncBaseCore
2026-05-13 11:33:46 +01:00
vorotamoroz d2eb6ecbaf Update for review once 2026-05-13 11:33:46 +01:00
vorotamoroz 25a6fde212 chore: Package modernise, update linter 2026-05-13 11:33:45 +01:00
vorotamoroz e8f8b680ef prettify 2026-05-13 11:33:03 +01:00
vorotamoroz 6c30f2b863 (chore): removing DOM Operation 2026-05-13 11:33:03 +01:00
vorotamoroz 8dda24a689 Merge pull request #882 from vrtmrz/p2p-rpc
feat: use new p2p-rpc wrapper
2026-05-13 19:24:26 +09:00
vorotamoroz fbbb63906a Merge branch 'main' into p2p-rpc 2026-05-13 19:22:03 +09:00
vorotamoroz 1e66a7f144 Merge pull request #894 from vrtmrz/fix_unexpected_error_on_startup
fixed: fixed unexpected error during startup
2026-05-13 19:16:18 +09:00
vorotamoroz df79d81475 fixed: fixed unexpected error during startup 2026-05-13 10:14:47 +00:00
vorotamoroz ad71355859 Merge pull request #893 from brian-spackman/fix-fractional-mtime-on-linux
fix: truncate sub-millisecond CLI mtimes to prevent mobile crash
2026-05-13 19:12:56 +09:00
vorotamoroz 95dc079fad Merge pull request #843 from andrewleech/daemon-sync
cli: implement continuous sync daemon mode
2026-05-13 18:53:59 +09:00
vorotamoroz 770d4af4a0 Update eslint config to ignore file,
fix some type error on LiveSyncBaseCore
2026-05-13 10:15:45 +01:00
vorotamoroz 3b311248cb Update for review once 2026-05-13 08:02:50 +01:00
Andrew Leech 67996f6d0a cli: fix stale stat.size in NodeVaultAdapter causing corrupted file errors
chokidar stats are captured at poll time and may not reflect the file's
final byte length by the time vault.read() is called. The downstream
integrity check compares stat.size to content length; a mismatch causes
other LiveSync clients to reject the file as corrupted.

Fix by updating file.stat.size from the actual content in read() and
readBinary().

Co-authored-by: Joysimple <Joysimple@users.noreply.github.com>
2026-05-13 16:56:08 +10:00
vorotamoroz 5772811a45 chore: Package modernise, update linter 2026-05-13 04:40:32 +01:00
vorotamoroz 55529cd71e prettify 2026-05-13 03:58:08 +01:00
vorotamoroz 2e9b8b7b62 (chore): removing DOM Operation 2026-05-13 03:55:11 +01:00
Andrew Leech 4ab2e41d18 cli daemon: set disableCheckingConfigMismatch for headless operation
The config mismatch dialog's defaultAction is "Dismiss" which blocks
replication. Since the daemon cannot resolve mismatches interactively,
skip the check entirely and accept the remote configuration as-is.
2026-05-13 11:21:06 +10:00
Andrew Leech c0ad8ee15a cli: add configurable ignore rules and deployment artifacts
IgnoreRules (src/apps/cli/serviceModules/IgnoreRules.ts):
- Reads .livesync/ignore for user-defined glob patterns
- Applies gitignore matchBase semantics: patterns without / get **/ prefix,
  patterns ending with / get ** appended for directory contents
- Supports `import: .gitignore` directive to merge gitignore patterns
- Rejects negation patterns with a warning (not fully supportable)
- Integrated into both daemon and mirror commands via isTargetFile handler

Wiring:
- IgnoreRules loaded before LiveSyncBaseCore construction so beginWatch()
  receives rules when it fires during onLoad/onFirstInitialise
- Passed through initialiseServiceModulesCLI -> StorageEventManagerCLI ->
  CLIStorageEventManagerAdapter -> CLIWatchAdapter

Deployment:
- src/apps/cli/deploy/livesync-cli.service - systemd unit template
- src/apps/cli/deploy/install.sh - user/system install script

Testing:
- src/apps/cli/test/test-daemon-linux.sh - e2e tests for ignore rules
- src/apps/cli/serviceModules/IgnoreRules.unit.spec.ts - 15 unit tests
- src/apps/cli/commands/daemonCommand.unit.spec.ts - 7 unit tests
2026-05-13 11:21:06 +10:00
Andrew Leech e6ae516493 cli: implement local→CouchDB file watching via chokidar
- Add chokidar ^4.0.0 as dependency (root package.json, runtime-package.json)
- Mark chokidar as external in vite.config.ts (not bundled, loaded at runtime)
- Implement CLIWatchAdapter.beginWatch() with chokidar:
  - ignoreInitial: true (startup files handled by mirror scan)
  - awaitWriteFinish to prevent partial-write events
  - Excludes dotfiles and .livesync/ directory at watcher level
  - Maps add/change/unlink/addDir/unlinkDir to IStorageEventWatchHandlers
  - Fatal error handler: logs clearly and releases watcher resources
- Add close() to CLIWatchAdapter, StorageEventManagerCLI for clean shutdown
- Register onUnload hook in CLIServiceModules to close watcher on shutdown
2026-05-13 11:21:06 +10:00
Andrew Leech a4d5ef4620 cli: implement daemon startup sequence and CouchDB→local sync
- Add daemon command to help text and --interval/-i flag for polling mode
- Capture original sync settings before suspendAllSync() clobbers them
- Implement daemon startup: mirror scan → restore settings → applySettings()
  which triggers the full suspend/resume lifecycle and starts the _changes feed
- Guard processSynchroniseResult no-op to non-daemon commands so default
  handler writes incoming CouchDB changes to the local filesystem
- Polling mode: restore settings + clearInterval-safe try/catch error handling
- Warn when both liveSync and syncOnStart are false after restore (no-op config)
- Fix: only block indefinitely if daemon startup succeeded
2026-05-13 11:21:06 +10:00
Brian Spackman 3f7bb047ac fix: floor sub-millisecond CLI mtimes to prevent mobile crash
On Linux, fs.Stats.mtimeMs and ctimeMs return floats with sub-millisecond
precision derived from the kernel's nanosecond filesystem mtime. Stored
raw, this produces document timestamps like 1778511180024.462 in CouchDB
rather than integer milliseconds.

Mobile clients running LiveSync 0.25.60 have been observed to crash when
processing change-feed updates carrying non-integer millisecond timestamps
from CLI-written documents. Desktop and mobile GUI plugins write integer
milliseconds, so the crash only manifests when the headless CLI on Linux
is the source. Whether the issue was introduced in 0.25.60 or had been
latent in earlier versions hasn't been investigated; 0.25.60 is the
version where the crash was confirmed and the fix verified.

Floor the values at every stat-read site (six across three adapters and
one command) so CLI-written documents carry integer-millisecond
timestamps consistent with the rest of the mesh.
2026-05-12 18:00:25 -06:00
SeleiXi 5454e1106f feat: add diff navigation to conflict resolver 2026-05-13 00:19:56 +08:00
SeleiXi 0d9397c8b9 fix: resolve UI alignment issue for diff navigation buttons 2026-05-12 00:52:20 +08:00
SeleiXi 429a3ff1fd feat: add diff-only view button to document history 2026-05-11 23:53:07 +08:00
SeleiXi bfff6ea7b8 feat: add document history search support 2026-05-11 22:45:42 +08:00
vorotamoroz b6b153c0de Merge pull request #887 from vrtmrz/add_ignore_to_eslint
chore: Change eslint config to ignore _tools
2026-05-11 21:01:47 +09:00
vorotamoroz eca6a6e0ba chore: Change eslint config to ignore _tools 2026-05-11 13:00:32 +01:00
vorotamoroz ca43d96c46 Merge pull request #886 from vrtmrz/fix_prettier
Fix prettier config
2026-05-11 20:34:22 +09:00
vorotamoroz 112e3c8b1d Fix prettier config 2026-05-11 12:33:32 +01:00
vorotamoroz d1eb105801 Merge pull request #872 from OriBoharon/make-cli-onboarding-easier
added documentaion and a hook build script to make onbaording easier when trying to build the cli app
2026-05-11 18:43:00 +09:00
vorotamoroz d5b93e89cd Change the default issue report label from 'bug' to 'uncategorised' 2026-05-11 17:55:31 +09:00
vorotamoroz e96fe7cde1 Merge pull request #885 from vrtmrz/tidy_file
(chore) remove obsoleted file
2026-05-11 17:52:22 +09:00
vorotamoroz 68e0610f1d (chore) remove obsoleted file 2026-05-11 09:49:32 +01:00
vorotamoroz a6be20695a feat: use new p2p-rpc wrapper 2026-05-11 03:49:35 +01:00
vorotamoroz 772b6ecf26 Merge pull request #871 from SeleiXi/feat/diff-navigation-buttons
feat: Add diff navigation buttons for Document History
2026-05-09 22:51:04 +09:00
SeleiXi 81dc7f604b feat: auto navigation to diff 2026-05-09 14:07:08 +08:00
vorotamoroz a9c87fa52e - Add default test environment
- Fixed to use environment by APIs
- Make test parallel
2026-05-08 03:04:14 +00:00
vorotamoroz e81f023943 Add default test env 2026-05-08 03:01:22 +00:00
vorotamoroz 2afe12ad2d fix pattern 2026-05-07 11:28:01 +01:00
vorotamoroz 4a9d6c1349 Add ci 2026-05-07 11:23:51 +01:00
vorotamoroz 279fc8876e feat(tests): enhance push/pull test with Docker integration and improved environment variable handling
style(test): format comment
2026-05-07 11:22:56 +01:00
vorotamoroz cc3d30dbcf feat(tests): add Deno-based tests for checking CLI functionality in the same-codebase between platforms. 2026-05-07 11:06:12 +01:00
vorotamoroz 39e82cc8a1 Fixed: Fix timing issue during test 2026-05-06 21:56:13 +09:00
bori 7a4b76a550 added documentaion and a hook build script to make onbaording easier 2026-05-02 18:51:07 +03:00
SeleiXi f9294446ba feat: add diff block navigation to Document History modal
Add prev/next buttons to jump between diff blocks in the
Document History view. Includes position indicator and
auto-scroll with visual focus highlighting.
2026-05-02 22:18:43 +08:00
vorotamoroz fa7ef62302 Fix: adjusting help
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 18:42:54 +09:00
vorotamoroz 81d8224330 bump
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 18:39:48 +09:00
vorotamoroz cc466a4b3c ### Fixed
- Now larger settings can be exported and imported via QR code without issues. (#595)

- Fixed some errors during serialisation and deserialisation of the settings, which caused issues in some cases when importing/exporting settings via QR code.

Co-authored-by: Copilot <copilot@github.com>
2026-04-29 18:37:44 +09:00
vorotamoroz ceebca7de9 Merge pull request #862 from fabiomanz/main
chore: remove obsolete `version` attribute from docker-compose.yml
2026-04-29 17:30:35 +09:00
Fabio c2f696d0a4 chore: attribute version is obsolete 2026-04-29 07:07:45 +00:00
vorotamoroz 1aa7c45794 Fix the readme
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 12:55:34 +09:00
vorotamoroz faefa80cbd Fix again 2026-04-29 12:40:40 +09:00
vorotamoroz 3737eacffd Fix readme
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 12:39:42 +09:00
vorotamoroz 4c0af0b608 Fixed(cli):
- `ls` and `mirror` commands now provide informative feedback when no documents are found or filters skip all files, resolving the issue where they would exit silently (#860).
- The command-line argument `vault` has been renamed to a more appropriate name, `databaseDir`.
- The `mirror` command now accepts a `vault` directory, which specifies the location where the actual files are stored. For compatibility reasons, the previous behaviour is still supported.

Co-authored-by: Copilot <copilot@github.com>
2026-04-29 12:22:00 +09:00
vorotamoroz bb69eb13e7 bump 2026-04-27 11:15:07 +09:00
vorotamoroz 7c9db6376f Fixed:
- No longer Setup-wizard drops username and password silently. (#865)
- Setup URI is now correctly imported (#859).
- now French translation is added.
2026-04-27 11:14:06 +09:00
vorotamoroz 4c04e4e676 Merge pull request #863 from koteitan/fix/859-strip-trailing-slash-from-uri
fix: strip trailing slash from couchDB_URI to avoid double-slash 401
2026-04-27 11:08:11 +09:00
koteitan 14ec35b257 fix: strip trailing slash from couchDB_URI to avoid double-slash 401
When couchDB_URI ends with a trailing slash (e.g. https://host/), the
database name concatenation produces a double-slash path
(https://host//obsidiannotes), which causes CouchDB to reject requests
with 401 "Name or password is incorrect".

Strip trailing slashes from couchDB_URI / baseUri at the path
concatenation sites in:
- src/common/utils.ts (_requestToCouchDBFetch, _requestToCouchDB)
- src/features/LocalDatabaseMainte/CmdLocalDatabaseMainte.ts

The companion fix for the replication path is in the livesync-commonlib
submodule.

Ref: #859
2026-04-27 00:12:57 +09:00
vorotamoroz b609e4973c Merge remote-tracking branch 'refs/remotes/origin/main' 2026-04-25 20:37:08 +09:00
vorotamoroz 354f0be9a3 bump
Co-authored-by: Copilot <copilot@github.com>
2026-04-25 20:16:50 +09:00
vorotamoroz 16804ed34c Merge pull request #842 from kdavh/patch-1
Update README.md, fix webpeer link
2026-04-25 19:07:56 +09:00
vorotamoroz 31bd270869 Fixed: Hidden file JSON conflicts no longer keep re-opening and dismissing the merge dialogue before we can act, which fixes persistent unresolvable data.json conflicts in plug-in settings sync (related: #850).
Co-authored-by: Copilot <copilot@github.com>
2026-04-25 17:22:25 +09:00
vorotamoroz b5d054f259 Fixed: Issue report generation now redacts remoteConfigurations connection strings and keeps only the scheme (e.g. sls+https://), so credentials are not exposed in reports.
Co-authored-by: Copilot <copilot@github.com>
2026-04-25 17:09:43 +09:00
vorotamoroz 1ef2955d00 - Fixed a worker-side recursion issue that could raise Maximum call stack size exceeded during chunk splitting (related: #855).
- Improved background worker crash cleanup so pending split/encryption tasks are released cleanly instead of being left in a waiting state (related: #855).
- On start-up, the selected remote configuration is now applied to runtime connection fields as well, reducing intermittent authentication failures caused by stale runtime settings (related: #855).

Co-authored-by: Copilot <copilot@github.com>
2026-04-25 16:51:37 +09:00
vorotamoroz 6ef56063b3 Fixed: No longer credentials are broken during object storage configuration (related: #852).
Co-authored-by: Copilot <copilot@github.com>
2026-04-25 15:03:38 +09:00
vorotamoroz a912585800 Improve issue template
Co-authored-by: Copilot <copilot@github.com>
2026-04-25 14:01:18 +09:00
vorotamoroz 7a863625bc bump 2026-04-09 04:32:34 +01:00
vorotamoroz 99b4037820 Fixed
- Packing a batch during the journal sync now continues even if the batch contains no items to upload.
2026-04-06 12:51:09 +01:00
vorotamoroz d59b5dc2f9 Fixed
- Remote configuration URIs are now correctly encrypted when saved after editing in the settings dialogue.
- Fixed an issue where devices could no longer upload after another device performed 'Fresh Start Wipe' and 'Overwrite remote' in Object Storage mode (#848).
2026-04-06 11:47:19 +01:00
vorotamoroz 4d0203e4ca Update: beta tagging 2026-04-06 11:46:51 +01:00
vorotamoroz 3e4db571cd Fixed
- Remote configuration URIs are now correctly encrypted when saved after editing in the settings dialogue.
- Fixed an issue where devices could no longer upload after another device performed 'Fresh Start Wipe' and 'Overwrite remote' in Object Storage mode (#848).
2026-04-06 11:45:26 +01:00
vorotamoroz b0a9bd84d6 bump 2026-04-05 18:21:38 +09:00
vorotamoroz 8c4e62e7c1 ### Fixed
- Now surely remote configurations are editable in the settings dialogue.
- We can fetch remote settings from the remote and apply them to the local settings for each remote configuration entry.
- No longer layout breaking occurs when the description of a remote configuration entry is too long.
2026-04-05 18:20:56 +09:00
vorotamoroz 3e03d1dbd5 bump 2026-04-05 17:48:00 +09:00
vorotamoroz 0dbf4cface bump 2026-04-05 17:47:45 +09:00
vorotamoroz bc22d61a3a Fixed: Now error messages are kept hidden if the show status inside the editor is disabled. 2026-04-05 17:43:29 +09:00
vorotamoroz d709bcc1d0 Add encryption for connection management 2026-04-05 16:24:34 +09:00
vorotamoroz d7088be8af Improved: remote management 2026-04-05 16:00:57 +09:00
vorotamoroz f17f1ecd93 ### Fixed
- No unexpected error (about a replicator) during early stage of initialisation.

### New features

- Now we can configure multiple Remote Databases of the same type, e.g, multiple CouchDBs or S3 remotes.
- We can switch between multiple Remote Databases in the settings dialogue.
2026-04-03 13:47:56 +01:00
vorotamoroz bf556bd9f4 Merge pull request #838 from chinhkrb113/contribai/docs/undocumented-test-environment-variables
📝 Docs: Undocumented test environment variables
2026-04-03 13:05:05 +09:00
vorotamoroz 8b40969fa3 Add ru locale 2026-04-02 10:28:58 +00:00
vorotamoroz 6cce931a88 Add test for CLI 2026-04-02 09:58:25 +00:00
vorotamoroz 216861f2c3 Prettified 2026-04-02 10:33:36 +01:00
vorotamoroz 6ce724afb4 Add dockerfiles to webapp and webpeer 2026-04-02 10:33:13 +01:00
vorotamoroz 2e3e106fb2 Fix dockerfile 2026-04-02 10:31:17 +01:00
vorotamoroz 00f2606a2f Added a bit for development on Windows. 2026-04-02 10:31:03 +01:00
vorotamoroz 3c94a44285 Fixed: Replication progress is now correctly saved and restored in the CLI. 2026-04-02 10:30:14 +01:00
vorotamoroz 4c0908acde Add CI Build for cli-docker image 2026-04-02 07:47:10 +01:00
vorotamoroz cda27fb7f8 - Update trystero to v0.23.0
- Add dockerfile for CLI
- Change relay image for testing on arm64
2026-03-31 07:17:51 +00:00
vorotamoroz 837a828cec Fix: fix update note... 2026-03-30 09:20:01 +01:00
vorotamoroz 4c8e13ccb9 bump 2026-03-30 09:14:49 +01:00
vorotamoroz 1ae4eaab02 Merge pull request #805 from L4z3x/patch-1
[docs] added changing docker compose data and etc folder ownership to user 5984.
2026-03-30 17:04:12 +09:00
chinhkrb113 b1efbf74c7 docs: clarify P2P_TEST_RELAY as Nostr relay 2026-03-30 02:18:25 +07:00
kdavh 12f04f6cf7 Update README.md, fix webpeer link 2026-03-28 12:47:28 -04:00
vorotamoroz a937feed3f Merge pull request #833 from rewse/fix/cli-sync-locked-error-message
fix(cli): show actionable error when sync fails due to locked remote DB
2026-03-28 23:58:34 +09:00
ChinhLee 2de9899a99 docs: undocumented test environment variables
The P2P test suite relies on several specific environment variables (e.g., `P2P_TEST_ROOM_ID`, `P2P_TEST_PASSPHRASE`, `P2P_TEST_RELAY`) loaded from `.env` or `.test.env`. Because these are not documented anywhere in the repository, new contributors will be unable to configure their local environment to run the P2P tests successfully.

Affected files: vitest.config.p2p.ts

Signed-off-by: ChinhLee <76194645+chinhkrb113@users.noreply.github.com>
2026-03-27 22:26:00 +07:00
vorotamoroz a0af6201a5 - No longer Peer-to-Peer Sync is not enabled. We cannot open a new connection. error occurs when we have not enabled P2P sync and are not expected to use it (#830). 2026-03-26 13:13:27 +01:00
vorotamoroz 9c7c6c8859 Merge pull request #831 from rewse/fix/cli-entrypoint-polyfill-default
fix(cli): handle incomplete localStorage in Node.js v25+
2026-03-26 20:36:46 +09:00
vorotamoroz 38d7cae1bc update some dependencies and ran npm-update. 2026-03-26 12:15:38 +01:00
vorotamoroz fee34f0dcb Update dependency: deduplicate 2026-03-26 11:55:06 +01:00
Shibata, Tats e01f7f4d92 test(cli): add TODO comment and locked-remote-DB test script
- Add inline TODO comment in runCommand.ts about standardising
  replication failure cause identification logic.
- Add test-sync-locked-remote-linux.sh that verifies:
  1. sync succeeds when the remote milestone is not locked.
  2. sync fails with an actionable error when the remote milestone
     has locked=true and accepted_nodes is empty.
2026-03-26 00:58:51 +09:00
Shibata, Tats 985004bc0e fix(cli): show actionable error when sync fails due to locked remote DB
When the remote database is locked and the CLI device is not in the
accepted_nodes list, openReplication returns false with no CLI-specific
guidance. The existing log message ('Fetch rebuilt DB, explicit
unlocking or chunk clean-up is required') is aimed at the Obsidian
plugin UI.

Check the replicator's remoteLockedAndDeviceNotAccepted flag after
sync failure and print a clear message directing the user to unlock
from the Obsidian plugin.

Ref: #832
2026-03-22 12:37:17 +09:00
Shibata, Tats 967a78d657 fix(cli): handle incomplete localStorage in Node.js v25+
Node.js v25 provides a built-in localStorage on globalThis, but without
`--localstorage-file` it is an empty object lacking getItem/setItem.
The existing check `!("localStorage" in globalThis)` passes, so the
polyfill is skipped and the CLI crashes with:

  TypeError: localStorage.getItem is not a function

Check for getItem as well so the polyfill is applied when the native
implementation is incomplete.
2026-03-22 11:57:47 +09:00
vorotamoroz 2ff60dd5ac Add missed files 2026-03-18 12:20:52 +01:00
vorotamoroz c3341da242 Fix english 2026-03-18 12:05:15 +01:00
vorotamoroz c2bfaeb5a9 Fixed: wrong import 2026-03-18 12:03:51 +01:00
vorotamoroz c454616e1c bump 2026-03-18 12:01:57 +01:00
vorotamoroz c88e73b7d3 Add note 2026-03-18 11:55:50 +01:00
vorotamoroz 3a29818612 - Delete items which are no longer used that might cause potential problems
- Fix Some Imports
- Fix floating promises on tests
2026-03-18 11:54:22 +01:00
vorotamoroz ee69085830 Fixed: Some buttons on the setting dialogue now respond correctly again (#827). 2026-03-18 11:51:52 +01:00
vorotamoroz 3963f7c971 Refactored: P2P replicator has been refactored to be a little roust and easier to understand. 2026-03-18 11:49:41 +01:00
vorotamoroz 602fcef949 - Fixed the issue where the detail level was not being applied in the log pane.
- Pop-ups are now shown.
- Add coverage for test.
- Pop-ups are now shown in the web app as well.
2026-03-18 11:48:31 +01:00
vorotamoroz 075d260fdd Fixed:
- Fixed the corrupted display of the help message.
- Remove some unnecessary codes.
2026-03-18 11:46:52 +01:00
vorotamoroz 0717093d81 update for npm ci 2026-03-17 20:09:28 +09:00
vorotamoroz 1f87a9fd3d port setupManager, setupProtocol to serviceFeature
remove styles on webapp UI, and add stylesheet
2026-03-17 19:58:12 +09:00
vorotamoroz fdd3a3aecb Add: vaultSelector (webapp) 2026-03-17 19:51:04 +09:00
vorotamoroz d8281390c4 bump 2026-03-17 10:34:29 +01:00
vorotamoroz 08b1712f39 bump 2026-03-16 00:49:54 +09:00
vorotamoroz 6c69547cef ### Fixed
- Fixed flaky timing issues in P2P synchronisation.
- Fixed more binary file handling issues in CLI.

### Tests

- Rewrite P2P end-to-end tests to use the CLI as host.
2026-03-16 00:48:22 +09:00
vorotamoroz 89bf0488c3 Refactor: More refactor P2P Replicator 2026-03-15 04:07:47 +09:00
vorotamoroz 653cf8dfbe Refactor: Refactor P2P Replicator 2026-03-15 03:33:03 +09:00
vorotamoroz 33338506cf bump 2026-03-14 17:02:16 +09:00
vorotamoroz 9dd479e597 Fix for an issue where conflicts cannot be resolved in Journal Sync
Remove unnecessary test calling in CLI
2026-03-14 16:51:30 +09:00
vorotamoroz 8cad4cdf80 Add workaround for my mac 2026-03-14 16:50:43 +09:00
vorotamoroz beced219c7 Fix: exit code 2026-03-14 16:13:14 +09:00
vorotamoroz dfe13b1abd Fixed:
- No longer unexpected `Unhandled Rejections` during P2P operations (waiting acceptance).
CLI new features
- P2P sync has been implemented.
2026-03-14 15:08:31 +09:00
vorotamoroz bf93bddbdd Fix: prevent transfer twice. 2026-03-13 23:34:38 +09:00
vorotamoroz 44890a34e8 remove conflicting option. 2026-03-13 23:08:05 +09:00
vorotamoroz a14aa201a8 Merge branch 'beta' of https://github.com/vrtmrz/obsidian-livesync into beta 2026-03-13 18:13:12 +09:00
vorotamoroz 338a9ba9fa Add: mirror command
Tidy: test
2026-03-13 18:01:38 +09:00
vorotamoroz 0c65b5add9 Add: mirror command 2026-03-13 12:55:46 +09:00
vorotamoroz 29ce9a5df4 remove todo 2026-03-12 12:45:39 +01:00
vorotamoroz 10f5cb8b42 add paths 2026-03-12 12:31:53 +01:00
vorotamoroz 8aad3716d4 fix grammatical errors 2026-03-12 12:29:43 +01:00
vorotamoroz d45f41500a Fix: no longer duplicated addLog setHandler 2026-03-12 12:27:47 +01:00
vorotamoroz 4cc0a11d86 Add ci cli-e2e 2026-03-12 12:23:13 +01:00
vorotamoroz ad0a6b458f bump 2026-03-12 12:16:00 +01:00
vorotamoroz 6ae1d5d6a5 update readme 2026-03-12 12:07:05 +01:00
vorotamoroz 84110aee97 update readme 2026-03-12 19:46:52 +09:00
vorotamoroz 4646577f35 Update 2026-03-12 19:42:10 +09:00
vorotamoroz 822d957976 Refactor: separate entrypoint and main,
Fix: readlng binary file
2026-03-12 19:41:10 +09:00
vorotamoroz d4aedf59f3 A- Add more tests.
- Object Storage support has also been confirmed (and fixed) in CLI.
2026-03-12 18:20:55 +09:00
vorotamoroz 5d80258a77 Add e2e-test (not passed yet)
Refine readme
2026-03-12 12:20:39 +09:00
vorotamoroz fa14531599 Add note 2026-03-12 03:03:03 +09:00
vorotamoroz 7992b3c2b9 Wrote the test (but untested) 2026-03-12 03:01:46 +09:00
vorotamoroz 5872cad1e5 Implement commands 2026-03-12 02:56:30 +09:00
vorotamoroz 16c0dfef4c Remove the grandiloquence from the note written in work in progress. 2026-03-11 23:51:35 +09:00
vorotamoroz 70c7624c7a Add note 2026-03-11 14:58:06 +01:00
vorotamoroz 4a0d5e99d0 Fix import path and add readme 2026-03-11 14:57:36 +01:00
vorotamoroz 0742773e1e Add self-hosted-livesync-cli to src/apps/cli as a headless, and a dedicated version. 2026-03-11 14:51:01 +01:00
vorotamoroz 2f8bc4fef2 - Now useOfflineScanner, useCheckRemoteSize, and useRedFlagFeatures are set from main.ts, instead of LiveSyncBaseCore. 2026-03-11 14:44:37 +01:00
vorotamoroz 0dfd42259d 11th March, 2026
Now, Self-hosted LiveSync has finally begun to be split into the Self-hosted LiveSync plugin for Obsidian, and a properly abstracted version of it.
This may not offer much benefit to Obsidian plugin users, or might even cause a slight inconvenience, but I believe it will certainly help improve testability and make the ecosystem better.
However, I do not see the point in putting something with little benefit into beta, so I am handling this on the alpha branch. I would actually preferred to create an R&D branch, but I was not keen on the ampersand, and I feel it will eventually become a proper beta anyway.

### Refactored

- Separated `ObsidianLiveSyncPlugin` into `ObsidianLiveSyncPlugin` and `LiveSyncBaseCore`.
- Now `LiveSyncCore` indicates the type specified version of `LiveSyncBaseCore`.
- Referencing `plugin.xxx` has been rewritten to referencing the corresponding service or `core.xxx`.

### Internal API changes

- Storage Access APIs are now yielding Promises. This is to allow more limited storage platforms to be supported.

### R&D

- Browser-version of Self-hosted LiveSync is now in development. This is not intended for public use now, but I will eventually make it available for testing.
- We can see the code in `src/apps/webapp` for the browser version.
2026-03-11 05:47:00 +01:00
vorotamoroz 9cf630320c Merge remote-tracking branch 'refs/remotes/origin/main' 2026-03-09 10:38:17 +09:00
vorotamoroz 584adc9296 bump 2026-03-09 10:25:19 +09:00
vorotamoroz f7dba6854f ### Fixed
- No longer unexpected deletion-propagation occurs when the parent directory is not empty (#813).

### Revert reversions
- Reverted the reversion of ModuleCheckRemoteSize. Now it is back to the service feature.
2026-03-09 10:24:49 +09:00
vorotamoroz 1d83e0ee31 manifest.json を更新 2026-03-08 17:24:54 +09:00
vorotamoroz d0244bd6d0 bump 2026-03-07 18:36:54 +09:00
vorotamoroz 79bb5e1c77 ### Reverted
- Reverted to ModuleRedFlag and ModuleInitializerFile to the previous version because of some unexpected issues. (#813)
2026-03-07 18:36:10 +09:00
vorotamoroz 3403712e24 Downgrade version from 0.25.50 to 0.25.48 for #813 2026-03-07 13:13:37 +09:00
vorotamoroz 8faa19629b bump 2026-03-03 13:39:13 +00:00
vorotamoroz 7ff9c666ce Fix: No more credentials logged 2026-03-03 13:34:18 +00:00
vorotamoroz d8bc2806e0 bump 2026-03-03 13:27:23 +00:00
vorotamoroz 62f78b4028 Modify unit-ci to upload coverage 2026-03-03 13:22:17 +00:00
vorotamoroz cf9d2720ce ### Fixed
- No longer deleted files are not clickable in the Global History pane.
- Diff view now uses more specific classes (#803).
- A message of configuration mismatching slightly added for better understanding.
    - Now it says `When replication is initiated manually via the command palette or ribbon, a dialogue box will open to address this.` to make it clear that the user can fix the issue by themselves.

### Refactored

- `ModuleRedFlag` has been refactored to `serviceFeatures/redFlag` and also tested.
- `ModuleInitializerFile` has been refactored to `lib/serviceFeatures/offlineScanner` and also tested.
2026-03-03 13:19:22 +00:00
vorotamoroz 09115dfe15 Fixed: Styles on the diff-dialogue has been qualified. 2026-03-02 10:52:14 +00:00
vorotamoroz 4cbb833e9d bump 2026-03-02 09:36:43 +00:00
vorotamoroz 7419d0d2a1 Add unit-ci hook to push 2026-03-02 09:15:29 +00:00
vorotamoroz f3e83d4045 Refactored: changed the implementation from using overrides to injecting an adapter. 2026-03-02 09:06:23 +00:00
vorotamoroz 28e06a21e4 bump 2026-02-27 11:15:23 +00:00
vorotamoroz e08fbbd223 ### Fixed and refactored
- Fixed the inexplicable behaviour when retrieving chunks from the network.
    - Chunk manager has been layered to responsible its own areas and duties. e.g., `DatabaseWriteLayer`, `DatabaseReadLayer`, `NetworkLayer`, `CacheLayer`,and `ArrivalWaitLayer`.
        - All layers have test now!
        - `LayeredChunkManager` has been implemented to manage these layers. Also tested.
    - `EntryManager` has been mostly rewritten, and also tested.

- Now we can configure `Never warn` for remote storage size notification, again.
2026-02-27 11:00:30 +00:00
vorotamoroz a1e331d452 bump 2026-02-26 11:34:14 +00:00
vorotamoroz 646f8af680 ### Fixed
- Unexpected errors no longer occurred when the plug-in was unloaded.
- Hidden File Sync now respects selectors.
- Registering protocol-handlers now works safely without causing unexpected errors.

### Refactored
- LiveSyncManagers has now explicit dependencies.
- LiveSyncLocalDB is now responsible for LiveSyncManagers, not accepting the managers as dependencies.
    - This is to avoid circular dependencies and clarify the ownership of the managers.
- ChangeManager has been refactored. This had a potential issue, so something had been fixed, possibly.
- Some tests have been ported from Deno's test runner to Vitest to accumulate coverage.
2026-02-26 11:30:57 +00:00
vorotamoroz 392f76fd36 ### Refactored
- `ModuleCheckRemoteSize` has been ported to a serviceFeature, and also tests have been added.
- Some unnecessary things have been removed.
2026-02-26 08:59:54 +00:00
vorotamoroz f61a3eb85b bump 2026-02-25 09:39:55 +00:00
vorotamoroz 19c03ec8d8 ### Refactored
- `ModuleTargetFilter`, which was responsible for checking if a file is a target file, has been ported to a serviceFeature.
  - And also tests have been added. The middleware-style-power.
- `ModuleObsidianAPI` has been removed and implemented in `APIService` and `RemoteService`.
- Now `APIService` is responsible for the network-online-status, not `databaseService.managers.networkManager`.
2026-02-25 09:38:31 +00:00
vorotamoroz be1642f1c1 Fix grammatical errors. 2026-02-24 11:20:59 +00:00
vorotamoroz c9a71e2076 fix: align dependency versions to main 2026-02-24 11:14:14 +00:00
vorotamoroz 2199c1ebd3 change: test:docker-all:xxx to be parallel. 2026-02-24 11:13:58 +00:00
vorotamoroz 278935f85d Fix mock for testing 2026-02-24 11:08:08 +00:00
vorotamoroz 010631f553 bump dependencies 2026-02-24 10:38:35 +00:00
vorotamoroz 8c0c65307a bump 2026-02-24 08:23:08 +00:00
vorotamoroz 988cb34d7c Update 2026-02-24 07:56:23 +00:00
vorotamoroz 6eec8117f5 Refactor: Constantising log-mark 2026-02-24 07:51:21 +00:00
vorotamoroz 9f6a909143 Merge remote-tracking branch 'origin/main' into beta to port #802 2026-02-24 07:44:18 +00:00
vorotamoroz 09f283721a Merge remote-tracking branch 'origin/main' into beta 2026-02-24 04:13:34 +00:00
vorotamoroz 235c702223 Merge pull request #804 from A-wry/reduce-fetch-error-visibility
Add connection warning style logic and settings UI dropdown
2026-02-24 13:07:29 +09:00
A-wry b923b43b6b update submodule pointer to latest commonlib changes 2026-02-23 22:29:46 -05:00
A-wry fdcf3be0f9 Tagged downstream network errors to respect networkWarningStyle setting 2026-02-23 22:10:25 -05:00
vorotamoroz 25dd907591 port PR #802 2026-02-24 01:57:08 +00:00
vorotamoroz 80c049d276 Merge pull request #802 from waspeer/fix/write-file-auto-md-file-already-exists
fix: handle "File already exists" for .md files in writeFileAuto
2026-02-24 10:50:37 +09:00
L4z3x 310496d0b8 added changing docker compose data and etc folder, to prevent permissions errors
while trying to follow the docker compose guide i created the data folders using the root user, and had this error when i run the stack:
`touch: cannot touch '/opt/couchdb/etc/local.d/docker.ini': Permission denied`

the problem was solved by changing the ownership of the folder to the user 5984, then one in the docker compose file.
2026-02-23 22:21:18 +01:00
vorotamoroz e961f01187 fix typos. 2026-02-21 14:17:28 +09:00
vorotamoroz 14b4c3cd50 prettified 2026-02-21 14:12:05 +09:00
vorotamoroz 4f987e7c2b ### Fixed
- Hidden file synchronisation now works!
- Now Hidden file synchronisation respects `.ignore` files.
- Replicator initialisation during rebuilding now works correctly.

### Refactored

- Some methods naming have been changed for better clarity, i.e., `_isTargetFileByLocalDB` is now `_isTargetAcceptedByLocalDB`.
2026-02-21 14:05:32 +09:00
A-wry f4d8c0a8db Add connection warning style logic and settings UI dropdown 2026-02-20 21:51:30 -05:00
vorotamoroz 556ce471f8 ## 0.25.43-patched-8 2026-02-20 14:28:28 +00:00
vorotamoroz 32b6717114 keep a note 2026-02-19 10:38:42 +00:00
vorotamoroz e0e72fae72 Fixed: saving device name 2026-02-19 10:37:19 +00:00
vorotamoroz 203dd17421 for 0.25.43-patched-7, please refer to the updates.md 2026-02-19 10:23:45 +00:00
vorotamoroz 1bde2b2ff1 Fixed an issue where the StorageEventManager
Build by Vite is now testing
2026-02-19 04:18:18 +00:00
vorotamoroz 2bf1c775ee ## 0.25.43-patched-6
### Fixed

- Unlocking the remote database after rebuilding has been fixed.

### Refactored
- Now `StorageEventManagerBase` is separated from `StorageEventManagerObsidian` following their concerns.
- Now `FileAccessBase` is separated from `FileAccessObsidian` following their concerns.
2026-02-18 12:13:05 +00:00
vorotamoroz 4658e3735d Fix Shim 2026-02-17 10:56:05 +00:00
vorotamoroz 627edc96bf bump for beta 2026-02-17 10:14:13 +00:00
vorotamoroz 0a1917e83c Refactor for 0.25.43-patched-5 (very long, please refer the updates.md) 2026-02-17 10:14:04 +00:00
Wannes Salomé 48b0d22da6 fix: handle "File already exists" for .md files in writeFileAuto
During concurrent initialisation (UPDATE STORAGE runs up to 10 ops in
parallel), getAbstractFileByPath can return null for .md files whose
vault index entry hasn't been populated yet, even though the file
already exists on disk. This causes vault.create() to throw "File
already exists."

The same root cause (stale in-memory index) was already identified for
non-.md files (see comment above) and handled via adapterWrite. Extend
that workaround to .md files by catching the "File already exists"
error and falling back to adapterWrite, consistent with the existing
approach.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-17 00:24:30 +01:00
vorotamoroz 3201399bdf bump 2026-02-16 11:51:09 +00:00
vorotamoroz 2ae70e8f07 Refactor: DatabaseService and Replicator 2026-02-16 11:51:03 +00:00
vorotamoroz 2b9bb1ed06 beta bump 2026-02-16 06:51:52 +00:00
vorotamoroz e63e3e6725 ### Refactor
- Module dependency refined. (For details, please refer to updates.md)
2026-02-16 06:50:31 +00:00
vorotamoroz 6e9ac6a9f9 - Application LifeCycle has now started in Main, not ServiceHub. 2026-02-14 15:21:00 +09:00
vorotamoroz fb59c4a723 Refactored, please refer updates.md 2026-02-13 12:02:31 +00:00
vorotamoroz 1b5ca9e52c Refactor (write notes later) 2026-02-12 08:56:30 +00:00
vorotamoroz 787627a156 Refactor: Move some functions from modules to services 2026-02-12 06:27:29 +00:00
vorotamoroz b1bba7685e Add note. 2026-02-12 03:39:56 +00:00
vorotamoroz cdfc0ccead wow, auditing... bump. 2026-02-05 12:15:35 +00:00
vorotamoroz 0635cad350 bake i18n 2026-02-05 12:13:12 +00:00
vorotamoroz 6fd1fa6313 Fix typos and make P2P sync not experimental 2026-02-05 12:07:29 +00:00
vorotamoroz 12b1f881dc ### Fixed
- Encryption/decryption issues when using Object Storage as remote have been fixed.
2026-02-05 11:47:01 +00:00
vorotamoroz bf3efab1af Merge pull request #733 from dayne/patch-2
Update regions setup-flyio-on-the-fly-v2.ipynb
2026-02-02 13:51:48 +09:00
vorotamoroz da72fda221 Merge pull request #777 from oenhu/patch-1
Update README_cn.md
2026-02-02 13:42:14 +09:00
vorotamoroz 665501f485 Merge pull request #778 from oenhu/patch-2
Create tech_info_cn.md
2026-02-02 13:40:17 +09:00
vorotamoroz 6ee332fff8 Merge pull request #779 from oenhu/main
refactor: replace hardcoded strings with i18n keys
2026-02-02 13:38:01 +09:00
vorotamoroz f66447cb59 Fix task 2026-02-02 13:00:28 +09:00
vorotamoroz eb3120a8fd Fix CI 2026-02-02 12:57:49 +09:00
vorotamoroz 5fa39b3c6e Fix typo 2026-02-02 12:28:26 +09:00
vorotamoroz 91c35a88dd separate CIs 2026-02-02 12:27:37 +09:00
vorotamoroz 49f4d79f4f Update dependencies (Mostly translations) 2026-02-02 12:27:15 +09:00
vorotamoroz abfd010467 Add the detail 2026-02-02 11:39:28 +09:00
vorotamoroz cde1013359 Reducing ambiguity 2026-02-02 11:32:52 +09:00
vorotamoroz 9c7f9e4316 Tidy 2026-02-02 11:31:40 +09:00
vorotamoroz aceda16c64 Add beta policy note 2026-02-02 11:31:06 +09:00
vorotamoroz 3656e5c725 Merge branch 'beta' 2026-02-02 11:00:12 +09:00
vorotamoroz 6915b160a2 Bump to stable 2026-02-02 10:57:15 +09:00
vorotamoroz f464623bf6 revert for release script 2026-01-30 09:36:39 +00:00
vorotamoroz b1f518071c add note 2026-01-30 09:27:31 +00:00
vorotamoroz 0e903c3520 Change: enabling PATH_TEST_INSTALL in production build 2026-01-30 09:25:12 +00:00
vorotamoroz edcdfd97c4 Reduce dynamic function binding from APIService from 2026-01-30 09:23:54 +00:00
vorotamoroz c2b7081215 Add some notes 2026-01-30 07:39:03 +00:00
vorotamoroz cf1954b10e Bump for beta 2026-01-29 07:15:22 +00:00
vorotamoroz 46546e121f Refactor: Move webpeer from lib to main repository. 2026-01-26 09:17:01 +00:00
vorotamoroz 28146eec2c Refactor: Migrate the outdated, unstable platform abstraction layer to Services 2026-01-26 09:13:40 +00:00
vorotamoroz 3cd9b9e06d bump 2026-01-24 16:48:51 +09:00
vorotamoroz 7c43c61b85 ### Fixed
- No longer `No available splitter for settings!!` errors occur after fetching old remote settings while rebuilding local database.

### Improved

- Boot sequence warning is now kept in the in-editor notification area. (#748)

### New feature

- We can now set the maximum modified time for reflect events in the settings. (for #754)

### Refactored
- Module to service refactoring has been started for better maintainability:
  - UI module has been moved to UI service.

### Behaviour change
- Default chunk splitter version has been changed to `Rabin-Karp` for new installations.
2026-01-24 16:25:04 +09:00
vorotamoroz 465af4f3aa Urg: 0.25.40 for fix wrong eventType 2026-01-23 11:55:30 +00:00
vorotamoroz 0a1e3dcd51 bump 2026-01-23 06:27:06 +00:00
vorotamoroz b97756d0cf add unittest 2026-01-23 05:45:53 +00:00
vorotamoroz acf4bc3737 prettified 2026-01-23 05:45:19 +00:00
vorotamoroz 88838872e7 refactor_serivces
- Rewrite the service's binding/handler assignment systems
- Removed loopholes that allowed traversal between services to clarify dependencies.
- Consolidated the hidden state-related state, the handler, and the addition of bindings to the handler into a single object.
  - Currently, functions that can have handlers added implement either addHandler or setHandler directly on the function itself.
I understand there are differing opinions on this, but for now, this is how it stands.
- Services now possess a Context. Please ensure each platform has a class that inherits from ServiceContext.
- To permit services to be dynamically bound, the services themselves are now defined by interfaces.
2026-01-23 05:44:14 +00:00
vorotamoroz 7d3827d335 bump 2026-01-17 14:36:47 +09:00
vorotamoroz 92d3a0cfa2 ### Fixed
- Fixed an issue where indexedDB would not close correctly on some environments, causing unexpected errors during database operations.
2026-01-17 14:32:44 +09:00
vorotamoroz bba26624ad bump 2026-01-15 04:12:19 +00:00
vorotamoroz b82f497cab Add development guide link 2026-01-15 04:04:49 +00:00
vorotamoroz 37f4d13e75 Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2026-01-15 03:59:53 +00:00
vorotamoroz 7965f5342c Fix type 2026-01-15 12:47:26 +09:00
vorotamoroz 9cdc14dda8 Fix: CI 2026-01-15 12:45:29 +09:00
vorotamoroz 4f46276ebf Fix for CI 2026-01-15 12:45:13 +09:00
vorotamoroz 931d360fb1 Add summary note 2026-01-14 09:41:16 +00:00
vorotamoroz f68c1855da Remove obsoleted file. 2026-01-14 08:07:40 +00:00
vorotamoroz dff654b6e5 Fixed:
- Fixed mishandling of removing  duplicated queue on processing
- Dependency importing
2026-01-14 08:07:22 +00:00
vorotamoroz 7e85bcbf08 harness-ci.yml mod ci 2026-01-10 12:20:17 +09:00
vorotamoroz 38a695ea12 Fix actions 2026-01-09 12:18:38 +00:00
vorotamoroz a502b0cd0c Split the tests 2026-01-09 12:15:57 +00:00
vorotamoroz 934f708753 Improve timing issue 2026-01-09 12:05:40 +00:00
vorotamoroz 0e574c6cb1 Flag executable 2026-01-09 11:50:23 +00:00
vorotamoroz 7375a85b07 Tests:
- More tests have been added.
2026-01-09 11:46:37 +00:00
vorotamoroz 4c3393d8b2 Fixed:
- Databases now correctly closed after rebuilding.
2026-01-09 11:45:00 +00:00
oenhu a9f1bbff9f refactor: replace hardcoded strings with i18n keys 2026-01-09 00:29:40 +08:00
oenhu f86815e420 Create tech_info_cn.md
Create Chinese version
2026-01-08 15:07:06 +08:00
oenhu fd16b166ef Update README_cn.md
Update the translation content based on the latest English REDME.md.
2026-01-08 01:41:07 +08:00
vorotamoroz 02aa9319c3 Remove chromiumSandbox for Actions 2026-01-07 09:15:31 +00:00
vorotamoroz 1a72e46d53 Fix excluded 2026-01-07 09:12:21 +00:00
vorotamoroz d755579968 Add excluded 2026-01-07 09:08:14 +00:00
vorotamoroz b74ee9df77 Fix to pulling submodules 2026-01-07 09:03:18 +00:00
vorotamoroz daa04bcea8 Add actions 2026-01-07 09:01:05 +00:00
vorotamoroz b96b2f24a6 Add some script and run npm install 2026-01-07 09:00:55 +00:00
vorotamoroz 5569ab62df Change Port 2026-01-07 09:00:16 +00:00
vorotamoroz d84b6c4f15 Flag executable 2026-01-07 08:41:43 +00:00
vorotamoroz 336f2c8a4d Add Test 2026-01-07 08:38:33 +00:00
vorotamoroz b52ceec36a Update submodule 2026-01-07 08:33:06 +00:00
vorotamoroz 1e6400cf79 Tidied:
- Add some note for corrupting notice
- Array function standardised.

Fixed:
- Remove obsoleted accessing to Obsidian's global.
- Avoiding errors in exceptional circumstances.
- Removal of several outdated and inefficient QueueProcessor implementations
  - Log output is now a bit efficient.
2026-01-07 04:45:19 +00:00
vorotamoroz 1ff1ac951b - Remove old comments
- Fix Importing paths
2026-01-07 04:37:30 +00:00
vorotamoroz aa6d771d17 bump 2025-12-25 10:30:04 +00:00
vorotamoroz 512c238415 ### Improved
- Now the garbage collector (V3) has been implemented. (Beta)
- Now the plug-in and device information is stored in the remote database.
2025-12-25 10:29:19 +00:00
vorotamoroz 55ffeeda10 bump 2025-12-24 03:38:40 +00:00
vorotamoroz 65f18b4160 ### Fixed
- Now the conflict resolution dialogue shows correctly which device only has older APIs (#764).
2025-12-24 03:37:41 +00:00
vorotamoroz b0c1d6a1bf bump 2025-12-10 09:48:25 +00:00
vorotamoroz ca19f2f2ed Modify build script and prettier config type (.prettierrc to .prettierrc.mjs 2025-12-10 09:47:31 +00:00
vorotamoroz ac0378ca4b ### Behaviour change
- The plug-in automatically fetches the missing chunks even if `Fetch chunks on demand` is disabled.
    - This change is to avoid loss of data when receiving a bulk of revisions.
    - This can be prevented by enabling `Use Only Local Chunks` in the settings.
- Storage application now saved during each event and restored on startup.
- Synchronisation result application is also now saved during each event and restored on startup.
    - These may avoid some unexpected loss of data when the editor crashes.

### Fixed

- Now the plug-in waits for the application of pended batch changes before the synchronisation starts.
    - This may avoid some unexpected loss or unexpected conflicts.
      Plug-in sends custom headers correctly when RequestAPI is used.
- No longer causing unexpected chunk creation during `Reset synchronisation on This Device` with bucket sync.

### Refactored

- Synchronisation result application process has been refactored.
- Storage application process has been refactored.
    - Please report if you find any unexpected behaviour after this update. A bit of large refactoring.
2025-12-10 09:45:57 +00:00
vorotamoroz f06f8d1eb6 bump 2025-12-05 11:08:48 +00:00
vorotamoroz 77074cb92f ### New feature
- We can analyse the local database with the `Analyse database usage` command.
- We can reset the notification threshold and check the remote usage at once with the `Reset notification threshold and check the remote database usage` command.

### Fixed

- Now the plug-in resets the remote size notification threshold after rebuild.
2025-12-05 11:07:59 +00:00
vorotamoroz 1274b6f683 Grammatical Fix 2025-12-02 11:28:56 +00:00
vorotamoroz c54ae58c0f bump 2025-12-02 11:24:31 +00:00
vorotamoroz 3f54921e90 ### Improved
- Now the plugin warns when we are on the several file-related situations that may cause unexpected behaviour (#300).
2025-12-02 11:20:24 +00:00
vorotamoroz 1b070c2dd4 bump 2025-11-18 08:54:41 +00:00
vorotamoroz 0e5846b670 add BUILD_MODE switching by environment variables. 2025-11-18 08:52:25 +00:00
vorotamoroz f81e71802b update dependency 2025-11-18 08:51:51 +00:00
vorotamoroz 4c761eebff ### Fixed
- Now fetching configuration from server can handle the empty remote correctly (reported on #756) by common-lib.
- No longer asking to switch adapters during rebuilding.
2025-11-18 08:51:32 +00:00
vorotamoroz bf754d6e07 Merge branch 'dev' 2025-11-17 23:37:39 +09:00
vorotamoroz 3cc70b985a bump 2025-11-17 23:30:53 +09:00
vorotamoroz 0e81ec2586 ### Fixed
- Now we can save settings correctly again (#756).
2025-11-17 23:30:16 +09:00
vorotamoroz 1c49acd5b5 Merge pull request #755 from vrtmrz/dev
v0.25.29
2025-11-17 13:32:32 +09:00
vorotamoroz bab66a64d7 bump again for release.. 2025-11-17 13:27:26 +09:00
vorotamoroz 477913456f OK. 2025-11-17 13:24:45 +09:00
vorotamoroz b0661cdbab bump 2025-11-17 13:20:16 +09:00
vorotamoroz 18f9a842b7 ### New feature
- We can now configure hidden file synchronisation to always overwrite with the latest version (#579).

### Fixed
- Timing dependency issues during initialisation have been mitigated (#714)

### Improved
- Error logs now contain stack-traces for better inspection.
2025-11-17 13:18:55 +09:00
vorotamoroz 5130bc5f2a I'm really sorry. Is there any way I can test this locally? 2025-11-17 13:16:50 +09:00
vorotamoroz ca8af80a27 again. 2025-11-17 13:15:56 +09:00
vorotamoroz df273d273b Sorry for broke exist release... 2025-11-17 13:14:56 +09:00
vorotamoroz 23aa0a82ca fix again.. 2025-11-17 13:09:59 +09:00
vorotamoroz 8f488b205b fix releaseing 2025-11-17 13:07:47 +09:00
vorotamoroz 893eac5c92 Move from deprecated 2025-11-17 13:06:26 +09:00
vorotamoroz cd6946bce2 node 22 to 24 2025-11-17 12:53:11 +09:00
vorotamoroz 174ca08954 Add production switch on environment vars 2025-11-17 12:52:52 +09:00
vorotamoroz 4af4d9c4bd bump 2025-11-12 09:23:49 +00:00
vorotamoroz 1b7a25598a ### Improved
- Now we can switch the database adapter between IndexedDB and IDB without rebuilding (#747).
- No longer checking for the adapter by `Doctor`.

### Changes

- The default adapter is reverted to IDB to avoid memory leaks (#747).

### Fixed (?)

- Reverted QR code library to v1.4.4 (To make sure #752).
2025-11-12 09:22:40 +00:00
vorotamoroz e2a01c14cc Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2025-11-07 09:56:53 +00:00
vorotamoroz a623b987c8 bump 2025-11-07 09:55:22 +00:00
vorotamoroz db28b9ec11 ### Improved
- Some JWT notes have been added to the setting dialogue (#742).

### Fixed

- No longer wrong values encoded into the QR code.
- We can acknowledge why the QR codes have not been generated.

### Refactored

- Some dependencies have been updated.
- Internal functions have been modularised into `octagonal-wheels` packages and are well tested.
- Fixed importing from the parent project in library codes. (#729).
2025-11-07 09:54:12 +00:00
vorotamoroz b2fbbb38f5 Fix tip formatting in jwt-on-couchdb.md
Updated tip formatting in JWT on CouchDB documentation.
2025-11-06 18:49:18 +09:00
vorotamoroz 33c01fdf1e bump 2025-11-06 09:43:58 +00:00
vorotamoroz 536c0426d6 Update lib for switch Refiner to Computed 2025-11-06 09:40:37 +00:00
vorotamoroz 2f848878c2 Add doc 2025-11-06 09:24:25 +00:00
vorotamoroz c4f2baef5e ### Fixed
#### JWT Authentication

- Now we can use JWT Authentication ES512 correctly (#742).
- Several misdirections in the Setting dialogues have been fixed (i.e., seconds and minutes confusion...).
- The key area in the Setting dialogue has been enlarged and accepts newlines correctly.
- Caching of JWT tokens now works correctly
    - Tokens are now cached and reused until they expire.
    - They will be kept until 10% of the expiration duration is remaining or 10 seconds, whichever is longer (but at a maximum of 1 minute).
- JWT settings are now correctly displayed on the Setting dialogue.

#### Other fixes

- Receiving non-latest revisions no longer causes unexpected overwrites.
    - On receiving revisions that made conflicting changes, we are still able to handle them.

### Improved

- No longer duplicated message notifications are shown when a connection to the remote server fails.
    - Instead, a single notification is shown, and it will be kept on the notification area inside the editor until the situation is resolved.
- The notification area is no longer imposing, distracting, and overwhelming.
    - With a pale background, but bordered and with icons.
2025-11-06 09:24:16 +00:00
vorotamoroz a5b88a8d47 Add tips 2025-11-06 02:10:12 +00:00
vorotamoroz 88e61fb41f Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2025-11-04 11:36:36 +00:00
vorotamoroz 9bf04332bb bump 2025-11-04 11:35:19 +00:00
vorotamoroz 5238dec3f2 fix: Now hidden file synchronisation respects the filters correctly (#631, #735) 2025-11-04 11:34:39 +00:00
vorotamoroz 2b7b411c52 Merge branch 'svelteui' 2025-11-04 11:09:22 +00:00
vorotamoroz aab0f7f034 Fix Backporting mis 2025-11-04 10:58:46 +00:00
vorotamoroz b3a0deb0e3 bump 2025-10-31 11:36:55 +01:00
vorotamoroz b9138d1395 ### Fixed
- We can enter the fields on some dialogue correctly on mobile devices now.

### New features

- We can use TURN server for P2P connections now.
2025-10-31 11:33:06 +01:00
vorotamoroz 04997b84c0 Merge pull request #740 from shaielc/_local
Default to _local when node not supplied
2025-10-30 17:58:24 +09:00
vorotamoroz 7eb9807aa5 Fix import path 2025-10-30 09:35:17 +01:00
vorotamoroz 91a4f234f1 bump 2025-10-30 09:30:38 +01:00
vorotamoroz 82f2860938 ### Fixed
- P2P Replication got more robust and stable.

### Breaking changes

- Send configuration via Peer-to-Peer connection is not compatible with older versions.
2025-10-30 09:29:51 +01:00
shyelc 41a112cd8a Default to _local when node not supplied 2025-10-30 07:27:52 +00:00
vorotamoroz 294ebf0c31 Add automatic node detection 2025-10-30 13:24:01 +09:00
vorotamoroz 5443317157 merged 2025-10-30 02:38:30 +01:00
vorotamoroz 47fe9d2af3 Adjust method name to actual behaviour 2025-10-30 02:28:18 +01:00
Dayne Broderson c76187c6d2 Update setup-flyio-on-the-fly-v2.ipynb
remove extranious newline
2025-10-29 17:07:34 -08:00
vorotamoroz 4c260a7d2b Merge pull request #723 from GrzybowskiBYD/patch-1
Fix an issue with CouchDB while using couchdb-init.sh
2025-10-29 10:35:00 +09:00
vorotamoroz 82f6fefd35 bump 2025-10-26 19:51:20 +09:00
vorotamoroz ada8001fcb ### Fixed
- We are now able to enable optional features correctly again (#732).
- No longer oversized files have been processed, furthermore.
  - Before creating a chunk, the file is verified as the target.
  - The behaviour upon receiving replication has been changed as follows:
    - If the remote file is oversized, it is ignored.
    - If not, but while the local file is oversized, it is also ignored.
2025-10-26 19:38:45 +09:00
Dayne Broderson b3b3ad843c Update regions setup-flyio-on-the-fly-v2.ipynb
Updating the regions list pulled from recent `fly platform regions`
2025-10-22 09:26:13 -08:00
vorotamoroz 8b81570035 Grammatically fixes 2025-10-22 14:02:52 +01:00
vorotamoroz d3e50421e4 Merge branch 'svelteui' of https://github.com/vrtmrz/obsidian-livesync into svelteui 2025-10-22 14:02:20 +01:00
vorotamoroz 12605f4604 Add updates 2025-10-22 14:02:00 +01:00
vorotamoroz 2c0dd82886 Add updates 2025-10-22 13:56:24 +01:00
vorotamoroz f5315aacb8 v0.25.23.beta1
### Fixed (This should be backported to 0.25.22 if the beta phase is prolonged)

- No longer larger files will not create a chunks during preparing `Reset Synchronisation on This Device`.

### Behaviour changes

- Setup wizard is now more `goal-oriented`. Brand-new screens are introduced.
- `Fetch everything` and `Rebuild everything` is now `Reset Synchronisation on This Device` and `Overwrite Server Data with This Device's Files`.
- Remote configuration and E2EE settings are now separated to each modal dialogue.
- Peer-to-Peer settings is also separated into its own modal dialogue.
- Setup-URI, and Report for the Issue are now not copied to clipboard automatically. Instead, there are copy dialogue and buttons to copy them explicitly.
- No longer optional features are introduced during the setup or `Reset Synchronisation on This Device`, `Overwrite Server Data with This Device's Files`.
- We cannot preform `Fetch everything` and `Rebuild everything` (Removed, so the old name) without restarting Obsidian now.

### Miscellaneous

- Setup QR Code generation is separated into a src/lib/src/API/processSetting.ts file. Please use it as a subrepository if you want to generate QR codes in your own application.
- Setup-URI is also separated into a src/lib/src/API/processSetting.ts
- Some direct access to web-APIs are now wrapped into the services layer.

### Dependency updates

- Many dependencies are updated. Please see `package.json`.
- As upgrading TypeScript, Fixed many UInt8Array<ArrayBuffer> and Uint8Array type mismatches.
2025-10-22 13:56:15 +01:00
vorotamoroz 5a93066870 bump 2025-10-15 01:02:24 +09:00
vorotamoroz 3a73073505 ### Fixed
- Fixed a bug that caused wrong event bindings and flag inversion (#727)
  - This caused following issues:
    - In some cases, settings changes were not applied or saved correctly.
    - Automatic synchronisation did not begin correctly.

### Improved
- Too large diffs are not shown in the file comparison view, due to performance reasons.
2025-10-15 01:00:24 +09:00
vorotamoroz ee0c0ee611 Add a note to prevent my forget 2025-10-13 11:27:03 +09:00
vorotamoroz d7ea30e304 Merge pull request #726 from vrtmrz/disenchant
Disenchant
2025-10-13 10:40:20 +09:00
vorotamoroz 2b9ded60f7 Add notes 2025-10-13 10:38:32 +09:00
vorotamoroz 40508822cf Bump and add readme 2025-10-13 10:13:45 +09:00
vorotamoroz 6f938d5f54 Update submodule commit reference 2025-10-13 09:48:25 +09:00
vorotamoroz 51dc44bfb0 bump 0.25.21.beta2 2025-10-08 05:01:07 +01:00
vorotamoroz 7c4f2bf78a ### Fixed
- Fixed wrong event type bindings (which caused some events not to be handled correctly).
- Fixed detected a timing issue in StorageEventManager
    - When multiple events for the same file are fired in quick succession, metadata has been kept older information. This induces unexpected wrong notifications and write prevention.
2025-10-08 05:00:42 +01:00
Marcin Grzybowski d82122de24 Update couchdb-init.sh
Fixed the {"error":"nodedown","reason":"nonode@nohost is down"} issue
2025-10-06 15:11:59 +02:00
vorotamoroz 67c9b4cf06 bump for beta 2025-10-06 10:45:59 +01:00
vorotamoroz 4808876968 - Rename methods for automatic binging checking.
- Add automatic binging checks.
2025-10-06 10:40:25 +01:00
vorotamoroz cccff21ecc Merge branch 'main' into disenchant and run prettier 2025-10-04 17:59:42 +09:00
vorotamoroz d8415a97e5 Move some dependency to devDependency 2025-10-04 17:49:02 +09:00
vorotamoroz 85e9aa2978 For convenience 2025-10-04 17:20:59 +09:00
vorotamoroz b4eb0e4868 Improved: copy a dev build to vault folder 2025-10-04 17:12:37 +09:00
vorotamoroz 3ea348f468 Merge pull request #716 from chriscross12324/bugfix/setting-panel-hierarchy
bugfix/setting-panel-hierarchy: Fixed visual inconsistencies
2025-10-04 17:07:25 +09:00
vorotamoroz 81362816d6 disenchanting and dispelling from the nightmarish implicit something
Indeed, even though if this changeset is mostly another nightmare. It might be in beta for a while.
2025-10-03 14:59:14 +01:00
Chris Coulthard d6efe4510f bugfix/setting-panel-hierarchy: Updated styling to improve consistency. Updated various setting panes (Fixed hierarchy issues that caused some titles to overlap rather then bump and whitespace formatting) 2025-09-28 19:27:14 -07:00
vorotamoroz ca5a7ae18c bump 2025-09-26 11:42:06 +01:00
vorotamoroz a27652ac34 ### Fixed
- Chunk fetching no longer reports errors when the fetched chunk could not be saved (#710).
    - Just using the fetched chunk temporarily.
- Chunk fetching reports errors when the fetched chunk is surely corrupted (#710, #712).
- It no longer detects files that the plug-in has modified.
    - It may reduce unnecessary file comparisons and unexpected file states.

### Improved

- Now checking the remote database configuration respecting the CouchDB version (#714).
2025-09-26 11:40:41 +01:00
vorotamoroz 29b89efc47 ## 0.25.19
### Improved
- Now encoding/decoding for chunk data and encryption/decryption are performed in native functions (if they were available).
2025-09-18 12:29:09 +01:00
vorotamoroz ef3eef2d08 Bump 2025-09-17 09:07:49 +01:00
vorotamoroz ffbbe32e36 ### Fixed
- Property encryption detection now works correctly (On Self-hosted LiveSync, it was not broken, but as a library, it was not working correctly).
- Initialising the chunk splitter is now surely performed.
- DirectFileManipulator now works fine (as a library)
    - Old `DirectFileManipulatorV1` is now removed.

### Refactored

- Removed some unnecessary intermediate files.
2025-09-17 09:05:16 +01:00
vorotamoroz 0a5371cdee bump 2025-09-16 10:47:00 +01:00
vorotamoroz 466bb142e2 Refactored: removed some unnecessary intermediate file 2025-09-16 10:45:14 +01:00
vorotamoroz d394a4ce7f ### Fixed
- No longer information-level logs have produced during toggling `Show only notifications` in the settings (#708).
- Ignoring filters for Hidden file sync now works correctly (#709).
2025-09-16 10:30:48 +01:00
vorotamoroz 71ce76e502 Merge pull request #704 from Gron-HD/main
Add Docker Compose troubleshooting for own server setup
2025-09-16 15:33:14 +09:00
vorotamoroz ae7a7dd456 Merge pull request #706 from abhith/patch-1
docs(README): update links for Customisation Sync and Hidden File Sync
2025-09-16 15:31:00 +09:00
vorotamoroz 4048186bb5 bump 2025-09-04 11:46:50 +01:00
vorotamoroz 2b94fd9139 ## Improved
- Improved connectivity for P2P connections
- The connection to the signalling server can now be disconnected while in the background or when explicitly disconnected.
  - These features use a patch that has not been incorporated upstream.
2025-09-04 11:44:49 +01:00
vorotamoroz ec72ece86d bump 2025-09-03 10:12:51 +01:00
vorotamoroz e394a994c5 Fix typo 2025-09-03 10:11:46 +01:00
vorotamoroz aa23b6a39a ### Improved
- Now we can configure `forcePathStyle` for bucket synchronisation (#707).
2025-09-03 10:08:49 +01:00
vorotamoroz 58e328a591 bump 2025-09-02 10:27:23 +01:00
vorotamoroz 1730c39d70 ### Fixed
- Opening IndexedDB handling has been ensured.
- Migration check of corrupted files detection has been fixed.
    - Now informs us about conflicted files as non-recoverable, but noted so.
    - No longer errors on not-found files.
2025-09-02 10:24:13 +01:00
Abhith Rajan dfeac201a2 docs(README): update links for Customisation Sync and Hidden File Sync sections 2025-09-01 21:54:11 +04:00
vorotamoroz b42152db5e bump 2025-09-01 12:28:01 +09:00
vorotamoroz 171cfc0a38 ### Fixed
- Conflict resolving dialogue now properly displays the changeset name instead of A or B (#691).
2025-09-01 12:23:38 +09:00
vorotamoroz d2787bdb6a Update older dependencies 2025-09-01 12:21:12 +09:00
Ron Gerber 44b022f003 Add Docker Compose troubleshooting for own server setup
Added another option for the init command that passes the variables directly. When i tried the command above i got the mentioned error.
2025-08-30 01:00:58 +02:00
vorotamoroz 58845276e7 bump 2025-08-29 11:48:33 +01:00
vorotamoroz a2cc093a9e ### Fixed
- Fixed an issue with automatic synchronisation starting (#702).
2025-08-29 11:46:11 +01:00
vorotamoroz fec203a751 bump 2025-08-28 10:27:31 +01:00
vorotamoroz 1a06837769 ### Fixed
- Automatic translation detection on the first launch now works correctly (#630).
- No errors are shown during synchronisations in offline (if not explicitly requested) (#699).
- Missing some checking during automatic-synchronisation now works correctly.
2025-08-28 10:26:17 +01:00
vorotamoroz 18d1ce8ec8 bump 2025-08-26 11:17:09 +01:00
vorotamoroz 2221d8c4e8 Update dependency 2025-08-26 11:14:30 +01:00
vorotamoroz 08548f8630 ### New experimental feature
- We can perform Garbage Collection (Beta2) without rebuilding the entire database, and also fetch the database.

### Fixed

- Resetting the bucket now properly clears all uploaded files.

### Refactored

- Some files have been moved to better reflect their purpose and improve maintainability.
- The extensive LiveSyncLocalDB has been split into separate files for each role.
2025-08-26 11:09:33 +01:00
vorotamoroz 5d24c3b984 bump 2025-08-20 10:36:47 +01:00
vorotamoroz de8fd43c8b ### Fixed
- CORS Checking messages now use replacements.
- Configuring CORS setting via the UI now respects the existing rules.
- Now startup-checking works correctly again, performs migration check serially and then it will also fix starting LiveSync or start-up sync. (#696)
- Statusline in editor now supported 'Bases'.
2025-08-20 10:36:22 +01:00
vorotamoroz ed88761eaa bump 2025-08-18 06:32:19 +01:00
vorotamoroz 4dcb37f5a2 ## 0.25.8
### New feature
- Insecure chunk detection has been implemented.

### Fixed
- Unexpected `Failed to obtain PBKDF2 salt` or similar errors during bucket-synchronisation no longer occur.
- Unexpected long delays for chunk-missing documents when using bucket-synchronisation have been resolved.
- Fetched remote chunks are now properly stored in the local database if `Fetch chunks on demand` is enabled.
- The 'fetch' dialogue's message has been refined.
- No longer overwriting any corrupted documents to the storage on boot-sequence.

### Refactored
- Type errors have been corrected.
2025-08-18 06:26:50 +01:00
vorotamoroz db0562eda1 An minor note added 2025-08-15 11:06:55 +01:00
vorotamoroz b610d5d959 bump 2025-08-15 11:04:34 +01:00
vorotamoroz 5abba74f3b ## 0.25.7
### Fixed

- Off-loaded chunking have been fixed to ensure proper functionality (#693).
- Chunk document ID assignment has been fixed.
- Replication prevention message during version up detection has been improved (#686).
- `Keep A` and `Keep B` on Conflict resolving dialogue has been renamed to `Use Base` and `Use Conflicted` (#691).

### Improved

- Metadata and content-size unmatched documents are now detected and reported, prevented to be applied to the storage.

### New Features

- `Scan for Broken files` has been implemented on `Hatch` -> `TroubleShooting`.

### Refactored

- Off-loaded processes have been refactored for the better maintainability.
- Removed unused code.
2025-08-15 10:51:39 +01:00
vorotamoroz 021c1fccfe Merge pull request #667 from h-exx/main
Edited the Docker Compose documentation to make it work
2025-08-14 14:24:14 +09:00
vorotamoroz 0a30af479f Fix Fetch chunks on demand 2025-08-09 02:17:50 +09:00
vorotamoroz a9c3f60fe7 bump 2025-08-09 01:51:17 +09:00
vorotamoroz f996e056af ### Fixed
- Storage scanning no longer occurs when `Suspend file watching` is enabled (including boot-sequence).

### Improved
- Saving notes and files now consumes less memory.
- Chunk caching is now more efficient.
- Both of them (may) are effective for #692, #680, and some more.

### Changed
- `Incubate Chunks in Document` (also known as `Eden`) is now fully sunset.
- The `Compute revisions for chunks` setting has also been removed.
- As mentioned, `Memory cache size (by total characters)` has been removed.

### Refactored
- A significant refactoring of the core codebase is underway (please refer the release-note).
2025-08-09 01:45:41 +09:00
vorotamoroz 1073ee9e30 bump 2025-07-29 12:50:25 +01:00
vorotamoroz f94653e60e ## 0.25.4
- The PBKDF2Salt is no longer corrupted when attempting replication while the device is offline (#686)
2025-07-29 12:45:28 +01:00
vorotamoroz 3dccf2076f Add draft design documents 2025-07-28 19:14:22 +09:00
vorotamoroz 3e78fe03e1 bump 2025-07-22 04:36:22 +01:00
vorotamoroz 4aa8fc3519 ## 0.25.3
### Fixed
- Now the `Doctor` at migration will save the configuration.
2025-07-22 04:35:40 +01:00
vorotamoroz ba3d2220e1 bump again 2025-07-19 18:08:27 +09:00
vorotamoroz 8057b516af bump 2025-07-19 17:51:53 +09:00
vorotamoroz f2b4431182 ## 0.25.1
19th July, 2025

### Refined and New Features
- Fetching the remote database on `RedFlag` now also retrieves remote configurations optionally.
- The setup wizard using Set-up URI and QR code has been improved.

### Changes
- The Set-up URI is now encrypted with a new encryption algorithm (mostly the same as `V2`).
2025-07-19 17:26:52 +09:00
vorotamoroz badec46d9a 0.25.0 released 2025-07-19 15:21:36 +09:00
vorotamoroz 355e41f488 bump for beta 2025-07-14 00:36:09 +09:00
vorotamoroz e0e7e1b5ca ### Fixed
- The encryption algorithm now uses HKDF with a master key.
- `Fetch everything from the remote` now works correctly.
- Extra log messages during QR code decoding have been removed.

### Changed
- Some settings have been moved to the `Patches` pane:

### Behavioural and API Changes
- `DirectFileManipulatorV2` now requires new settings (as you may already know, E2EEAlgorithm).
- The database version has been increased to `12` from `10`.
2025-07-14 00:33:40 +09:00
vorotamoroz ce4b61557a bump 2025-07-10 11:24:59 +01:00
vorotamoroz 52b02f3888 ## 0.24.31
### Fixed

- The description of `Enable Developers' Debug Tools.` has been refined.
- Automatic conflict checking and resolution has been improved.
- Resolving conflicts dialogue will not be shown for the multiple files at once.
2025-07-10 11:12:44 +01:00
vorotamoroz 7535999388 Update updates.md 2025-07-09 22:28:50 +09:00
vorotamoroz dccf8580b8 Update updates.md 2025-07-09 22:27:52 +09:00
vorotamoroz e3964f3c5d bump 2025-07-09 12:48:37 +01:00
vorotamoroz 375e7bde31 ### New Feature
- New chunking algorithm `V3: Fine deduplication` has been added, and will be recommended after updates.
- New language `ko` (Korean) has been added.
- Chinese (Simplified) translation has been updated.

### Fixed

- Numeric settings are now never lost the focus during the value changing.

### Improved
- All translations have rewritten into YAML format, to easier manage and contribution.
- Doctor recommendations have now shown in the user-friendly notation.

### Refactored

- Never ending `ObsidianLiveSyncSettingTag.ts` finally had separated into each pane's file.
- Some commented-out codes have been removed.
2025-07-09 12:15:59 +01:00
Jacques Faulkner 341f0ab12d Updated Table of Contents 2025-06-27 10:39:13 +01:00
Jacques Faulkner 39340c1e1b Sorry 1 more, reworded the creating directories comments 2025-06-26 14:45:04 +01:00
Jacques Faulkner 55cdc58857 Edited warning to make a bit more sense 2025-06-26 14:42:23 +01:00
Jacques Faulkner 4f1a9dc4e8 Forgot a # 2025-06-25 18:54:22 +01:00
Jacques Faulkner 013818b7d0 Update setup_own_server.md 2025-06-25 18:53:31 +01:00
vorotamoroz 1179438df8 bump 2025-06-20 12:43:39 +01:00
vorotamoroz 47ea8f6859 ## 0.24.29
### Fixed

- Synchronisation with buckets now works correctly, regardless of whether a prefix is set or the bucket has been (re-) initialised (#664).
- An information message is now displayed again, during any automatic synchronisation is enabled (#662).

### Tidied up

- Importing paths have been tidied up.
2025-06-20 12:43:15 +01:00
vorotamoroz 670fe16486 Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2025-06-16 02:53:30 +01:00
vorotamoroz 3f0093916c Add some note 2025-06-16 02:52:59 +01:00
vorotamoroz 9503474d06 bump 2025-06-15 18:49:31 +09:00
vorotamoroz ddf7b243e4 ## 0.24.28
### Fixed

- Batch Update is no longer available in LiveSync mode to avoid unexpected behaviour. (#653)
- Now compatible with Cloudflare R2 again for bucket synchronisation.
- Prevention of broken behaviour due to database connection failures added (#649).
2025-06-15 18:49:16 +09:00
vorotamoroz f37561c3c1 Update Library 2025-06-15 18:24:19 +09:00
vorotamoroz f01429decc Merge pull request #633 from jmarmstrong1207/patch-1
Add simple docker compose to the setup guide
2025-06-10 11:27:22 +09:00
vorotamoroz c0fcb66924 bump 2025-06-10 02:52:45 +01:00
vorotamoroz 5f76b9809b ## 0.24.27
### Improved

- We can use prefix for path for the Bucket synchronisation.
- The "Use Request API to avoid `inevitable` CORS problem" option is now promoted to the normal setting, not a niche patch.

### Fixed

- Now switching replicators applied immediately, without the need to restart Obsidian.

### Tidied up

- Some dependencies have been updated to the latest version.
2025-06-10 02:51:47 +01:00
vorotamoroz d61d6fec37 bump manifest 2025-05-14 13:55:42 +01:00
vorotamoroz 9fdd622824 bump 2025-05-14 13:55:17 +01:00
vorotamoroz 3b8d03a189 ## 0.24.26
### New Features

- Automatic display-language changing according to the Obsidian language
  setting.
- Now we can limit files to be synchronised even in the hidden files.
- "Use Request API to avoid `inevitable` CORS problem" has been implemented.
- `Show status icon instead of file warnings banner` has been implemented.

### Improved

- All regular expressions can be inverted by prefixing `!!` now.

### Fixed

- No longer unexpected files will be gathered during hidden file sync.
- No longer broken `\n` and new-line characters during the bucket
  synchronisation.
- We can purge the remote bucket again if we using MinIO instead of AWS S3 or
  Cloudflare R2.
- Purging the remote bucket is now more reliable.
- Some wrong messages have been fixed.

### Behaviour changed

- Entering into the deeper directories to gather the hidden files is now limited
  by `/` or `\/` prefixed ignore filters.

### Etcetera

- Some code has been tidied up.
- Trying less warning-suppressing and be more safer-coding.
- Dependent libraries have been updated to the latest version.
- Some build processes have been separated to `pre` and `post` processes.
2025-05-14 13:11:03 +01:00
James Armstrong 1f1a39e5a0 Add simple docker compose 2025-04-28 06:10:29 -07:00
vorotamoroz d0e92cff7a refine readme 2025-04-23 06:45:03 +01:00
vorotamoroz 5addddc792 Update doc 2025-04-23 05:51:51 +01:00
vorotamoroz d978892661 Update docs 2025-04-23 05:11:59 +01:00
vorotamoroz cfb061a6a2 add note to troubleshooting 2025-04-23 05:10:40 +01:00
vorotamoroz 381055fc93 bump 2025-04-22 11:29:42 +01:00
vorotamoroz 37d12916fc ## 0.24.25
### Improved

- Peer-to-peer synchronisation has been got more robust.

### Fixed

- No longer broken falsy values in settings during set-up by the QR code generation.

### Refactored

- Some `window` references now have pointed to `globalThis`.
- Some sloppy-import has been fixed.
- A server side implementation `Synchromesh` has been suffixed with `deno` instead of `server` now.
2025-04-22 11:28:55 +01:00
vorotamoroz 944aa846c4 bump 2025-04-15 11:10:37 +01:00
vorotamoroz abca808e29 ### Fixed
- No longer broken JSON files including `\n`, during the bucket synchronisation. (#623)
- Custom headers and JWT tokens are now correctly sent to the server during configuration checking. (#624)

### Improved

- Bucket synchronisation has been enhanced for better performance and reliability.
    - Now less duplicated chunks are sent to the server.
    - Fetching conflicted files from the server is now more reliable.
    - Dependent libraries have been updated to the latest version.
2025-04-15 11:09:49 +01:00
vorotamoroz 90bb610133 Update submodule 2025-04-14 03:23:24 +01:00
vorotamoroz 9c5e9fe63b Conclusion stated. 2025-04-11 14:13:22 +01:00
vorotamoroz 00dfae24d7 bump 2025-04-10 14:28:03 +01:00
vorotamoroz d8a41fe45d ### New Feature
- Now, we can send custom headers to the server.
- Authentication with JWT in CouchDB is now supported.

### Improved

- The QR Code for set-up can be shown also from the setting dialogue now.
- Conflict checking for preventing unexpected overwriting on the boot-up process has been quite faster.

### Fixed

- Some bugs on Dev and Testing modules have been fixed.
2025-04-10 14:24:33 +01:00
vorotamoroz 30467d1c25 Add link to P2P pseudo client. 2025-04-04 12:30:21 +01:00
vorotamoroz f8351f1d45 Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2025-04-04 11:52:12 +01:00
vorotamoroz 5924af98ab Update Library (Probably no effect) 2025-04-04 11:52:05 +01:00
vorotamoroz 2769b61da4 Update setup_own_server.md
Add note; #609
2025-04-04 18:24:13 +09:00
vorotamoroz bb4409221d Update README.md 2025-04-03 20:57:15 +09:00
vorotamoroz f398c14200 Bump for release-mistake. 2025-04-01 10:42:29 +01:00
vorotamoroz 27d58508dc Missed 2025-04-01 10:38:12 +01:00
vorotamoroz d4dea5b226 bump 2025-04-01 10:21:38 +01:00
vorotamoroz c79dc30cba ## 0.24.21
### Fixed

- No longer conflicted files are handled in the boot-up process. No more unexpected overwriting.
    - It ignores `Always overwrite with a newer file`, and always be prevented for the safety. Please pick it manually or open the file.
- Some log messages on conflict resolution has been corrected.
- Automatic merge notifications, displayed on the grounds of `same`, have been degraded to logs.

### Improved

- Now we can fetch the remote database with keeping local files completely intact.
    - In new option, all files are stored into the local database before the fetching, and will be merged automatically or detected as conflicts.
- The dialogue presenting options when performing `Fetch` are now more informative.

### Refactored

- Some class methods have been fixed its arguments to be more consistent.
- Types have been defined for some conditional results.
2025-04-01 10:20:21 +01:00
vorotamoroz b3119ee8a9 bump and update dependencies 2025-03-24 18:55:02 +09:00
vorotamoroz 2a1d71da5c Improved: show details of TypeError using Obsidian API. 2025-03-24 12:04:58 +09:00
vorotamoroz 24f31ed19e Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2025-03-19 04:43:06 +01:00
vorotamoroz a982629ae6 Update draft : possibly I should share cSpell dictionary. 2025-03-19 04:42:50 +01:00
vorotamoroz 85140aecab Update README.md 2025-03-05 20:40:04 +09:00
vorotamoroz 3f2e23ee88 bump 2025-03-05 11:13:58 +00:00
vorotamoroz 6049c19e8a ## 0.24.19
### New Feature

- Now we can generate a QR Code for transferring the configuration to another device.
2025-03-05 11:12:00 +00:00
vorotamoroz 65648683a3 bump 2025-02-28 12:02:45 +00:00
vorotamoroz 5d70f2c1e9 ## 0.24.18
### Fixed

- Now no chunk creation errors will be raised after switching `Compute revisions for chunks`.
- Some invisible file can be handled correctly (e.g., `writing-goals-history.csv`).
- Fetching configuration from the server is now saves the configuration immediately (if we are not in the wizard).

### Improved

- Mismatched configuration dialogue is now more informative, and rewritten to more user-friendly.
- Applying configuration mismatch is now without rebuilding (at our own risks).
- Now, rebuilding is decided more fine grained.

### Improved internally

- Translations can be nested. i.e., task:`Some procedure`, check: `%{task} checking`, checkfailed: `%{check} failed` produces `Some procedure checking failed`.
2025-02-28 11:58:15 +00:00
vorotamoroz cbcfdc453e update default vault and bump for release 2025-02-27 13:39:28 +00:00
vorotamoroz a4eb21593c bump 2025-02-27 13:24:51 +00:00
vorotamoroz 05eb2c8262 ## 0.24.16
### Improved

#### Peer-to-Peer

- Now peer-to-peer synchronisation checks the settings are compatible with each other.
- Peer-to-peer synchronisation now handles the platform and detects pseudo-clients.

#### General

- New migration method has been implemented, that called `Doctor`.

- The minimum interval for replication to be caused when an event occurs can now be configurable.
- Some detail note has been added and change nuance about the `Report` in the setting dialogue, which had less informative.

### Behaviour and default changed

- `Compute revisions for chunks` are backed into enabled again. it is necessary for garbage collection of chunks.

### Refactored

- Platform specific codes are more separated. No longer `node` modules were used in the browser and Obsidian.
2025-02-27 13:23:11 +00:00
vorotamoroz fecefa3631 ### Fixed
- Now, even without WeakRef, Polyfill is used and the whole thing works without error. However, if you can switch WebView Engine, it is recommended to switch to a WebView Engine that supports WeakRef.

And bumped.
2025-02-20 10:40:18 +00:00
vorotamoroz f8c4d5ccb0 Add a bit more. 2025-02-18 13:48:41 +00:00
vorotamoroz e63e79bc8e Add note of flag files. 2025-02-18 13:36:15 +00:00
vorotamoroz ed76125f3d bump 2025-02-18 13:02:54 +00:00
vorotamoroz 70f4e23474 ## 0.24.14
### Fixed

- Resolving conflicts of JSON files (and sensibly merging them) is now working fine, again!
    - And, failure logs are more informative.
- More robust to release the event listeners on unwatching the local database.

### Refactored

- JSON file conflict resolution dialogue has been rewritten into svelte v5.
- Upgrade eslint.
- Remove unnecessary pragma comments for eslint.
2025-02-18 12:59:18 +00:00
vorotamoroz f6d5b78cc8 bump 2025-02-17 11:35:34 +00:00
vorotamoroz 405624b51b ## 0.24.13
### Fixed
#### General Replication
- No longer unexpected errors occur when the replication is stopped during for some reason (e.g., network disconnection).
#### Peer-to-Peer Synchronisation
- Set-up process will not receive data from unexpected sources.
- No longer resource leaks while enabling the `broadcasting changes`
- Logs are less verbose.
- Received data is now correctly dispatched to other devices.
- `Timeout` error now more informative.
- No longer timeout error occurs for reporting the progress to other devices.
- Decision dialogues for the same thing are not shown multiply at the same time anymore.
- Disconnection of the peer-to-peer synchronisation is now more robust and less error-prone.
#### Webpeer
- Now we can toggle Peers' configuration.
### Refactored
- Cross-platform compatibility layer has been improved.
- Common events are moved to the common library.
- Displaying replication status of the peer-to-peer synchronisation is separated from the main-log-logic.
- Some file names have been changed to be more consistent.
2025-02-17 11:33:35 +00:00
vorotamoroz 90c0ff22b9 Add paths for future maintenance. 2025-02-17 11:30:42 +00:00
vorotamoroz 67568ea886 bump 2025-02-14 11:28:01 +00:00
vorotamoroz cc29b4058d 0.24.12
Fixed
-  No longer unnecessary acknowledgements are sent when starting peer-to-peer synchronisation.

Refactored
- Platform impedance-matching-layer has been improved.
- Some UIs have been get isomorphic among Obsidian and web applications (for `webpeer`).
2025-02-14 11:15:22 +00:00
vorotamoroz 4e8243b3d5 Update release.yml 2025-02-13 22:02:22 +09:00
vorotamoroz 4eb1787784 bump 2025-02-13 12:58:15 +00:00
vorotamoroz 1cd1465f2c 0.24.11
Improved

- New Translation: `es` (Spanish) by @zeedif (Thank you so much)!
- Now all of messages can be selectable and copyable, also on the iPhone, iPad, and Android devices. Now we can copy or share the messages easily.

New Feature

- Peer-to-Peer Synchronisation has been implemented!

Fixed

- No longer memory or resource leaks when the plug-in is disabled.
- Now deleted chunks are correctly detected on conflict resolution, and we are guided to resurrect them.
- Hanging issue during the initial synchronisation has been fixed.
- Some unnecessary logs have been removed.
- Now all modal dialogues are correctly closed when the plug-in is disabled.

Refactor

- Several interfaces have been moved to the separated library.
- Translations have been moved to each language file, and during the build, they are merged into one file.
- Non-mobile friendly code has been removed and replaced with the safer code.
- Started writing Platform impedance-matching-layer.
- Svelte has been updated to v5.
- Some function have got more robust type definitions.
- Terser optimisation has slightly improved.
- During the build, analysis meta-file of the bundled codes will be generated.
2025-02-13 12:48:00 +00:00
vorotamoroz 45ceca8bb6 run prettier and update lib 2025-02-12 03:44:46 +00:00
vorotamoroz 7b385aab9e Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2025-02-12 03:22:50 +00:00
vorotamoroz 98411e5f48 Merge pull request #573 from zeedif/main
Migrate UI strings to $tf for translation support
2025-02-12 12:21:44 +09:00
vorotamoroz b6687e2fb0 Adding bundle size analysis 2025-02-12 03:18:59 +00:00
Zeedif 658cbb7ded Merge branch 'main' into main 2025-02-06 20:46:26 -06:00
vorotamoroz 08a48154fa Add note 2025-02-05 01:35:17 +00:00
vorotamoroz 62501a5940 bump again 2025-02-05 01:33:31 +00:00
vorotamoroz ccb3dd52de Dep update 2025-02-05 01:10:03 +00:00
vorotamoroz 3e5f4c8946 bump 2025-02-05 01:04:21 +00:00
vorotamoroz 54e64c59a9 - Prettified some source.
- Fixed the issue which the filename is shown as `undefined`.
- Fixed the issue where files transferred at short intervals were not reflected.
- Updated dependency (including new translation)
2025-02-05 00:58:51 +00:00
CRuiz 588840ff8b Reemplazar $tf por $msg 2025-02-04 08:22:43 -06:00
CRuiz e6b8dfb279 Actualizar mensaje de recomendación de URI en la migración del módulo 2025-01-22 15:57:36 -06:00
CRuiz 73782c5389 Add translation ids 2025-01-22 13:41:18 -06:00
vorotamoroz f2b667d75e bump 2025-01-22 11:56:36 +00:00
vorotamoroz 9b1588a65b ## 0.24.8
### Fixed
-   Some parallel-processing tasks are now performed more safely.
-   Some error messages has been fixed.
### Improved
-   Synchronisation is now more efficient and faster.
-   Saving chunks is a bit more robust.
### New Feature
-   We can remove orphaned chunks again, now!
2025-01-22 11:55:56 +00:00
vorotamoroz 0629bc04bb Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2025-01-07 11:33:13 +00:00
vorotamoroz b0e97e6c96 Bump 2025-01-07 11:31:58 +00:00
vorotamoroz 7f853b0222 - 0.24.7
- Fixed (Security)
   - Assigning IDs to chunks has been corrected for more safety.
  - Fixed
    - Conflict resolution dialogue has been fixed
    - Resolving conflicts by timestamp has been fixed
  - Improved
    -  Notifications can be suppressed for the hidden files update now.
    -  No longer uses the old-xxhash and sha1 for generating the chunk ID.
2025-01-07 11:28:56 +00:00
vorotamoroz 3d4ad4a3b4 Update README.md
Add acknowledgements
2025-01-02 15:02:35 +09:00
vorotamoroz 4b1fff852a Merge pull request #544 from dcvdiego/main
make self-hosted docs slightly more readable
2024-12-23 12:28:37 +09:00
dcvdiego 08d7d24baf Update setup_own_server.md 2024-12-21 16:26:55 +00:00
vorotamoroz 9db3c3df0a bump 2024-12-14 02:32:07 +09:00
vorotamoroz 672940ad6f Fixed: No longer the empty-and-stilled log pane. 2024-12-14 02:31:31 +09:00
vorotamoroz 2338601fae 0.24.5 (by Library Fixing)
Fixed
- Fix some wrong behaviour during comparing JSON objects

Improved
- Reactive values are now shown more smoothly (Logs,a status line.
2024-12-13 10:59:05 +00:00
vorotamoroz 3e657b38a9 bump 2024-12-12 11:12:04 +00:00
vorotamoroz 21861d8c51 ## 0.24.4
### Fixed

-   Fixed so many inefficient and buggy modules inherited from the past.

### Improved

-   Tasks are now executed in an efficient asynchronous library.
-   On-demand chunk fetching is now more efficient and keeps the interval between requests.
    -   This will reduce the load on the server and the network.
    -   And, safe for the Cloudant.
2024-12-12 11:10:50 +00:00
vorotamoroz 3bb4aba395 Update dependencies 2024-12-12 11:10:29 +00:00
vorotamoroz 751de5a13e bump 2024-12-09 00:46:15 +00:00
vorotamoroz 29229f809b Update the doc 2024-12-09 00:40:15 +00:00
vorotamoroz 2d0dc2a389 Merge pull request #543 from Volkor3-16/main
Fix up wording of messages
2024-12-09 09:12:51 +09:00
Volkor 6cbe319b80 remove a unneeded "the" 2024-12-04 02:02:25 +11:00
Volkor e9fe58f818 run pretty - revert crlf to lf
since most modern ides handle lf on windows fine, and the entire project is in lf already, i'll set this back
2024-12-04 01:13:12 +11:00
Volkor 61524e1c44 FIX: manual setup button 2024-12-04 00:17:41 +11:00
vorotamoroz c25eaa09c9 fixed: Fixed font-family of in-editor status. 2024-12-03 10:15:53 +00:00
Volkor 71987e6814 Change a few more lines to more correctly reflect the settings 2024-11-27 23:39:47 +11:00
vorotamoroz b15d0710e5 bump 2024-11-21 11:40:37 +00:00
vorotamoroz 9d304b3233 v0.24.2
Rewritten

-   Hidden File Sync is now respects the file changes on the storage. Not simply comparing modified times.
    -   This makes hidden file sync more robust and reliable.

Fixed

-   `Scan hidden files before replication` is now configurable again.
-   Some unexpected errors are now handled more gracefully.
-   Meaningless event passing during boot sequence is now prevented.
-   Error handling for non-existing files has been fixed.
-   Hidden files will not be batched to avoid the potential error.
    -   This behaviour had been causing the error in the previous versions in specific situations.
-   The log which checking automatic conflict resolution is now in verbose level.
-   Replication log (skipping non-targetting files) shows the correct information.
-   The dialogue that asking enabling optional feature during `Rebuild Everything` now prevents to show the `overwrite` option.
    -   The rebuilding device is the first, meaningless.
-   Files with different modified time but identical content are no longer processed repeatedly.
-   Some unexpected errors which caused after terminating plug-in are now avoided.
-

Improved

-   JSON files are now more transferred efficiently.
    -   Now the JSON files are transferred in more fine chunks, which makes the transfer more efficient.
2024-11-21 11:40:15 +00:00
dcvdiego d062b13040 make docs slightly more readable 2024-11-19 16:28:55 +00:00
Volkor 7eceab59af Fix up wording of messages 2024-11-18 21:55:22 +11:00
vorotamoroz ed5cb3e043 Format utility 2024-11-12 01:09:07 +00:00
vorotamoroz 574fdf9202 Format submodule 2024-11-12 01:08:35 +00:00
vorotamoroz 9ec7b809a9 I have adapted the new-line-char to the codebase. But I am not sure if this is the right thing to do. 2024-11-12 01:04:46 +00:00
vorotamoroz 4d302aff9d Merge pull request #533 from doublethefish/chore/formatting
chore(formatting): adds prettier for consistent coding style
2024-11-12 09:53:50 +09:00
vorotamoroz b70009f4a9 Merge branch 'main' into chore/formatting 2024-11-12 09:37:52 +09:00
Frank Harrison c24ee32f37 chore(formatting): ignores generated code in pretty 2024-11-11 09:45:53 +00:00
Frank Harrison 012d0aa4df chore(format): also format json (no effect)
Adds json-file formating to the prettier command. Currently this has no
effect, but if the `tabWidth` is changed to 2 and the `printWidth`
reduced to 88, then it will also impact the json files and keep the
formatting consistent across code and data.
2024-11-11 09:41:56 +00:00
Frank Harrison 5c97e5b672 chore(format): no intentional behaviour change - runs pretty 2024-11-11 09:41:52 +00:00
Frank Harrison 6e1eb36f3b chore(format): adds prettier and commands to run it
... including ci/cd check-only commands.

The code is quite complex and missing a lot of dev-ops types checks and
standards. One of the key problems with codebases like this is
on-boarding new developers to the codebase (like myself). When there is
a consistent and enforced coding-style (irrespective of what the coding
style is) it makes it _significantly_ easier for collaborators and
maintainers to get on with the job in hand. It also, from a day-2-day
developer perspective, significantly reduces cognitive overhead re
reading code.
Finally this is a "trial balloon" PR, if this patch is accepted I will
likely do more work on testing and docs for the project.

- The new prettier config is a non-standard setup, but a close-match to
  how the code _currently_ looks.
- 120 col-width print width (instead of the better and more
  information-dense 88), this is so the diff after applying prettier to
  the code is less disruptive, whilst still showing the benefits of using
  a prettier.
- We use `tabWidth` setting of 4 as the code uses that more common
  setting instead of the more compact 2 spaces - note that 2 often leads
  to more readable and compact code.
- We enforce trailing commas, as that seems to be the norm in this
  code-base. We choose the `es5` standard here.
- We enforce tailing semi-colons (`semi`) as the majority of code used
  that flavour of `js`/`ts`.
- For now we only run on code and not json files.

This is designed such that `npm run pretty` re-formats the code for
development, and when integrated with ci/cd, `prettyCheck` will return
non-zero exit codes when formatting doesn't match the coding standards.
2024-11-11 09:41:35 +00:00
vorotamoroz 8809aee327 Add default values to a new SetupURI. 2024-11-11 08:05:10 +00:00
vorotamoroz fc04c557fc Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2024-11-11 01:23:07 +00:00
vorotamoroz 115a0d2d8a bump 2024-11-11 01:22:40 +00:00
vorotamoroz 2c97289ec8 Fixed
-   Vault History can show the correct information of match-or-not for each file and database even if it is a binary file.
-   `Sync settings via markdown` is now hidden during the setup wizard.
-   Verify and Fix will ignore the hidden files if the hidden file sync is disabled.

New feature
-   Now we can fetch the tweaks from the remote database while the setting dialogue and wizard are processing.

Improved
-   More things are moved to the modules.
    -   Includes the Main codebase. Now `main.ts` is almost stub.
-   EventHub is now more robust and typesafe.
2024-11-11 00:58:31 +00:00
vorotamoroz 6d472d17fd Fix output order 2 2024-11-09 10:31:34 +09:00
vorotamoroz 3a3aabfd11 Fix scripting 2024-11-09 10:21:05 +09:00
vorotamoroz 8b45dd1d24 .. 2024-11-08 11:12:35 +00:00
vorotamoroz a2b36ccf31 v0.24.0! 2024-10-28 11:18:29 +09:00
vorotamoroz 25e30fa09d Merge tag '0.24.0.dev-rc8' 2024-10-28 10:24:38 +09:00
vorotamoroz 8f5bc387b4 Update manifest-beta.json 2024-10-25 20:44:32 +09:00
vorotamoroz 5afe24c460 0.24.0.dev-rc8 2024-10-25 12:39:32 +01:00
vorotamoroz 658a09f1cc Update manifest-beta.json 2024-10-24 20:46:08 +09:00
vorotamoroz a9020a3aea 0.24.0.dev-rc7 2024-10-24 12:41:50 +01:00
vorotamoroz 293c731437 Update manifest-beta.json 2024-10-22 18:11:18 +09:00
vorotamoroz 5b4ae37030 0.24.0.dev-rc6 2024-10-22 10:08:20 +01:00
vorotamoroz 9e8d126259 Update manifest-beta.json 2024-10-21 17:52:28 +09:00
vorotamoroz 6d244a6e34 0.24.0.dev-rc5 2024-10-21 09:47:09 +01:00
vorotamoroz 1f0ad4eb1e Update manifest-beta.json 2024-10-18 19:23:48 +09:00
vorotamoroz e0e0ab0426 0.24.0.dev-rc4 2024-10-18 11:14:58 +01:00
vorotamoroz 5023d6da0b Merge pull request #474 from nyawox/per-file-sync-grammar
fix: per-file customization sync description grammar
2024-10-18 11:43:03 +09:00
vorotamoroz 49160c7d57 Merge branch 'main' into per-file-sync-grammar 2024-10-18 11:42:49 +09:00
vorotamoroz 4434224c29 Merge pull request #479 from fuhrysteve/patch-1
add username and password to setup URI instructions
2024-10-18 11:40:23 +09:00
vorotamoroz cf3b9e5522 Add manifest beta 2024-10-17 10:26:19 +01:00
vorotamoroz 7ca5ac5ac7 0.24.0.dev-rc3 2024-10-17 10:19:08 +01:00
vorotamoroz 095a3d20fb 0.24.0.dev-rc2 2024-10-17 09:57:42 +01:00
vorotamoroz 89e23b1bf4 Preparing v0.24.0 2024-10-16 12:44:07 +01:00
vorotamoroz 48315d657d bump 2024-09-24 14:02:53 +01:00
vorotamoroz b73ca73776 Refined:
- Setting dialogue very slightly refined.
  - The hodgepodge inside the `Hatch` pane has been sorted into more explicit categorised panes.
  - Applying the settings will now be more informative.

New features:
- Word-segmented chunk building on users language.

Fixed:
- Sending chunks on `Send chunk in bulk` are now buffered to avoid the out-of-memory error.
- `Send chunk in bulk` is back to default disabled.
- Merging conflicts of JSON files are now works fine even if it contains `null`.
Development:
- Implemented the logic for automatically generating the stub of document for the setting dialogue.
2024-09-24 14:00:44 +01:00
vorotamoroz 48e4d57278 bump 2024-09-08 17:58:10 +09:00
vorotamoroz 7eae25edd0 - Fixed:
- Case-insensitive file handling
    - Full-lower-case files are no longer created during database checking.
  - Bulk chunk transfer
    - The default value will automatically adjust to an acceptable size when using IBM Cloudant.
2024-09-08 17:55:04 +09:00
vorotamoroz 3285c1694b bump 2024-09-07 01:45:12 +09:00
vorotamoroz ede126d7d4 - 0.23.21:
- New Features:
    - Case-insensitive file handling
      - Files can now be handled case-insensitively.
      - This behaviour can be modified in the settings under `Handle files as Case-Sensitive` (Default: Prompt, Enabled for previous behaviour).
    - Improved chunk revision fixing
        - Revisions for chunks can now be fixed for faster chunk creation.
        - This can be adjusted in the settings under `Compute revisions for chunks` (Default: Prompt, Enabled for previous behaviour).
    - Bulk chunk transfer
      - Chunks can now be transferred in bulk during uploads.
      - This feature is enabled by default through `Send chunks in bulk`.
    - Creation of missing chunks without
      - Missing chunks can be created without storing notes, enhancing efficiency for first synchronisation or after prolonged periods without synchronisation.
  - Improvements:
    - File status scanning on the startup
      - Quite significant performance improvements.
      - No more missing scans of some files.
    - Status in editor enhancements
      - Significant performance improvements in the status display within the editor.
      - Notifications for files that will not be synchronised will now be properly communicated.
    - Encryption and Decryption
      - These processes are now performed in background threads to ensure fast and stable transfers.
    - Verify and repair all files
      - Got faster through parallel checking.
    - Migration on update
      - Migration messages and wizards have become more helpful.
  - Behavioural changes:
    - Chunk size adjustments
      - Large chunks will no longer be created for older, stable files, addressing storage consumption issues.
    - Flag file automation
      - Confirmation will be shown and we can cancel it.
  - Fixed:
    - Database File Scanning
      - All files in the database will now be enumerated correctly.
  - Miscellaneous
    - Dependency updated.
    - Now, tree shaking is left to terser, from esbuild.
2024-09-07 01:43:21 +09:00
Stephen J. Fuhry f778107727 add username and password to setup URI instructions 2024-08-07 14:43:38 -04:00
vorotamoroz 630889680e bump 2024-07-31 02:32:02 +01:00
vorotamoroz e46714e0f9 Fixed:
- Remote Storage Limit Notification dialogue has been fixed, now the chosen value is saved.
Improved:
- The Enlarging button on the enlarging threshold dialogue now displays the new value.
2024-07-31 02:31:13 +01:00
vorotamoroz 86d5582f37 bump 2024-07-31 02:14:11 +01:00
vorotamoroz 697ee1855b Fixed:
- Customisation Sync now checks the difference while storing or applying the configuration.
- Time difference in the dialogue has been fixed.
2024-07-31 02:13:25 +01:00
nyawox 12d825ea49 fix: per-file customization sync description grammar 2024-07-26 23:38:01 +09:00
vorotamoroz b8edc85528 bump 2024-07-25 13:37:34 +01:00
vorotamoroz e2740cbefe New feature:
- Per-file-saved customization sync has been shipped.
- Customisation sync has got beta3.
Improved:
- Start-up speed has been improved.
Fixed:
- On the customisation sync dialogue, buttons are kept within the screen.
- No more unnecessary entries on `data.json` for customisation sync.
- Selections are no longer lost while updating customisation items.
Tidied on source codes:
- Many typos have been fixed.
- Some unnecessary type casting removed.
2024-07-25 13:36:26 +01:00
vorotamoroz a96e4e4472 bump 2024-07-12 10:13:04 +01:00
vorotamoroz dd26bbfe64 Improved:
- Overall performance has been improved by using PouchDB 9.0.0.
- Configuration mismatch detection is refined. We can resolve mismatches more smoothly and naturally.
Fixed:
- Customisation Sync will be disabled when a corrupted configuration is detected.
New feature:
- We can get a notification about the storage usage of the remote database.
2024-07-12 10:11:16 +01:00
vorotamoroz 6b9bd473cf bump 2024-07-10 05:24:26 +01:00
vorotamoroz 4be4fa6cc7 Maintenance:
- Library refining (Phase 1 - step 2). There are no significant changes on the user side.
2024-07-10 05:23:34 +01:00
vorotamoroz a9745e850e Improved:
- The passphrase of the Setup URI is now automatically generated. (#426)
2024-07-01 11:05:33 +01:00
vorotamoroz 7b9515a47e bump 2024-07-01 06:18:52 +01:00
vorotamoroz 220dce51f2 Dependency Update 2024-07-01 06:16:04 +01:00
vorotamoroz a23fc866c0 Tidied:
- Thinning of this repository through the creation of a library of universal functions
2024-07-01 06:12:23 +01:00
vorotamoroz 5c86966d89 Bump 2024-06-14 12:36:18 +01:00
vorotamoroz 29ed4d2b95 Fixed:
- No longer batch-saving ignores editor inputs.
- The file-watching and serialisation processes have been changed to the one which is similar to previous implementations.
- We can configure the settings (Especially about text-boxes) even if we have configured the device name.
Improved:
- We can configure the delay of batch-saving.
  - Default: 5 seconds, the same as the previous hard-coded value. (Note: also, the previous behaviour was not correct).
- Also, we can configure the limit of delaying batch-saving.
- The performance of showing status indicators has been improved.
2024-06-14 12:35:56 +01:00
vorotamoroz 16c6c52128 bump 2024-06-04 11:35:36 +01:00
vorotamoroz 8b94a0b72e Fixed:
- No longer files have been trimmed even delimiters have been continuous.
- Fixed the toggle title to `Do not split chunks in the background` from `Do not split chunks in the foreground`.
- Non-configured item mismatches are no longer detected.
2024-06-04 11:34:42 +01:00
vorotamoroz c5ac76d916 bump 2024-05-30 10:53:48 +01:00
vorotamoroz b67a6db8a1 Improved:
- Now notes will be split into chunks in the background thread to improve smoothness.
  - Default enabled, to disable, toggle `Do not split chunks in the foreground` on `Hatch` -> `Compatibility`.
  - If you want to process very small notes in the foreground, please enable `Process small files in the foreground` on `Hatch` -> `Compatibility`.
- We can use a `splitting-limit-capped chunk splitter`; which performs more simple and make less amount of chunks.
  - Default disabled, to enable, toggle `Use splitting-limit-capped chunk splitter` on `Sync settings` -> `Performance tweaks`
Tidied
  - Some files have been separated into multiple files to make them more explicit in what they are responsible for.
2024-05-30 10:52:20 +01:00
vorotamoroz d4202161e8 bump 2024-05-28 12:27:30 +01:00
vorotamoroz 2a2b39009c Fixed:
- Now we *surely* can set the device name and enable customised synchronisation.
- Unnecessary dialogue update processes have been eliminated.
- Customisation sync no longer stores half-collected files.
- No longer hangs up when removing or renaming files with the `Sync on Save` toggle enabled.
Improved:
- Customisation sync now performs data deserialization more smoothly.
- New translations have been merged.
2024-05-28 12:26:23 +01:00
vorotamoroz bf3a6e7570 Add the documentation and new a build option (buildDev). 2024-05-28 08:56:26 +01:00
vorotamoroz 069b8513d1 bump 2024-05-27 12:21:08 +01:00
vorotamoroz 128b1843df Fixed: No longer configurations have been locked in the minimal setup. 2024-05-27 12:20:18 +01:00
vorotamoroz fd722b1fe5 bump 2024-05-27 12:05:41 +01:00
vorotamoroz 0bf087dba0 Fixed:
- No longer unexpected parallel replication is performed.
- Now we can set the device name and enable customised synchronisation again.
2024-05-27 12:04:19 +01:00
vorotamoroz 3a4b59b998 Update troubleshooting.md 2024-05-27 12:12:37 +09:00
vorotamoroz 8fc9d51c45 Add Note. 2024-05-27 04:11:44 +01:00
vorotamoroz 35feb5bf93 bump 2024-05-22 14:05:15 +01:00
vorotamoroz b3a85c5462 New feature:
- Now we are ready for i18n.
- The setting dialogue has been refined. Very controllable, clearly displayed disabled items, and ready to i18n.
Fixed:
- Many memory leaks have been rescued.
- Chunk caches now work well.
- Many trivial but potential bugs are fixed.
- No longer error messages will be shown on retrieving checkpoint or server information.
- Now we can check and correct tweak mismatch during the setup
Improved:
- Customisation synchronisation has got more smoother.
Tidied
- Practically unused functions have been removed or are being prepared for removal.
- Many of the type-errors and lint errors have been corrected.
- Unused files have been removed.
Note:
- From this version, some test files have been included. However, they are not enabled and released in the release build.
2024-05-22 14:04:22 +01:00
vorotamoroz 7b0ac22c3b Create terms.md 2024-05-13 14:04:02 +09:00
vorotamoroz dca8e4b2a4 bump 2024-05-10 11:38:03 +01:00
vorotamoroz 89de2dcc37 Fixed:
- No longer missing tasks which have queued as the same key (e.g., for the same operation to the same file).
- Some trivial issues have been fixed.
New feature:
- Reloading Obsidian can be scheduled until that file and database operations are stable.
2024-05-10 11:33:59 +01:00
vorotamoroz 172b08dbb3 bump 2024-05-08 23:57:19 +09:00
vorotamoroz d518a3fc1b Fixed:
- Now the remote chunks could be decrypted even if we are using `Incubate chunks in Document`. (The note of 0.23.6 has been fixed).
- Chunk retrieving with `Incubate chunks in document` got more efficiently.
- No longer task processor misses the completed tasks.
- Replication is no longer started automatically during changes in window visibility (e.g., task switching on the desktop) when off-focused.
2024-05-08 23:56:29 +09:00
vorotamoroz c6ed867498 bump 2024-05-07 12:59:55 +01:00
vorotamoroz 4f4923e977 New feature:
- Now we can check configuration mismatching between clients before synchronisation.
- Now we can perform remote database compaction from the `Maintenance` pane.
Fixed:
- We can detect the bucket could not be reachable.
2024-05-07 12:55:48 +01:00
vorotamoroz a5ebf29b3d Merge pull request #417 from MichaelBrunn3r/translation
fix: Grammar issues in settings page
2024-05-07 20:26:59 +09:00
vorotamoroz ee465184c8 bump 2024-05-05 23:46:16 +09:00
vorotamoroz d7d4f1e6f2 New feature:
- We can now use `Incubate Chunks in Document` to reduce non-well-formed chunks.
Fixed:
- No longer experimental configuration is shown on the Minimal Setup.
2024-05-05 23:45:45 +09:00
Michael Brunner cbf5023593 fix: Grammar issues in settings page 2024-05-04 12:34:53 +02:00
vorotamoroz 3925052f92 Add the design document of planned improving. 2024-05-04 02:59:24 +09:00
vorotamoroz 1934418258 Add the design document of planned improving. 2024-05-04 01:57:03 +09:00
vorotamoroz 2ae018b2bd Refactor:
- Files have been categorised for clarity. The deliverables are not affected.
2024-05-02 04:07:36 +01:00
vorotamoroz 8474497985 bump 2024-05-01 02:24:08 +09:00
vorotamoroz b5714cc83b Fixed:
- No longer unwanted `\f` in journal sync.
2024-05-01 02:22:30 +09:00
vorotamoroz 133f5a7109 bump 2024-04-30 11:49:16 +01:00
vorotamoroz daa3feebf1 Fixed:
- Journal Sync will not hang up during big replication, especially the initial one.
- All changes which have been replicated while rebuilding will not be postponed (Previous behaviour).
Improved:
- Now Journal Sync works efficiently in download and parse, or pack and upload.
- Less server storage and faster packing/unpacking usage by the new chunk format.
2024-04-30 11:48:27 +01:00
vorotamoroz 7b5f7d0fbf bump 2024-04-30 01:40:01 +09:00
vorotamoroz 29532193cb - Fixed:
- Now journal synchronisation considers untransferred each from sent and received.
  - Journal sync now handles retrying.
  - Journal synchronisation no longer considers the synchronisation of chunks as revision updates (Simply ignored).
  - Journal sync now splits the journal pack to prevent mobile device rebooting.
  - Maintenance menus which had been on the command palette are now back in the maintain pane on the setting dialogue.
- Improved:
  - Now all changes which have been replicated while rebuilding will be postponed.
2024-04-30 01:39:09 +09:00
vorotamoroz 5b4309c09d For the future. Because of a good opportunity. 2024-04-29 02:01:27 +09:00
vorotamoroz 16ef582453 Update: wrote about the new Remote Type. 2024-04-28 23:37:26 +09:00
vorotamoroz 3e22f70c7a Update README.md 2024-04-28 17:49:50 +09:00
vorotamoroz 0a8dbe097e bump 2024-04-27 03:35:32 +09:00
vorotamoroz 2c0fcf74d0 New feature: Object storage support 2024-04-27 03:33:59 +09:00
vorotamoroz a1ab1efd5d Update README.md 2024-04-20 21:45:21 +09:00
vorotamoroz c8fcf2d0d5 Bump 2024-04-19 12:06:09 +01:00
vorotamoroz c384e2f7fb Fixed:
- No longer data corrupting due to false BASE64 detections.
2024-04-19 12:04:14 +01:00
vorotamoroz 99c1c7dc1a bump 2024-04-18 12:37:49 +01:00
vorotamoroz 84adec4b1a New feature: Automatic data compression to reduce amount of traffic and the usage of remote database. 2024-04-18 12:30:29 +01:00
vorotamoroz f0b202bd91 bump 2024-04-12 01:32:03 +09:00
vorotamoroz d54b7e2d93 - Fixed:
- Error handling on booting now works fine.
  - Replication is now started automatically in LiveSync mode.
  - Batch database update is now disabled in LiveSync mode.
  - No longer automatically reconnection while off-focused.
  - Status saves are thinned out.
  - Now Self-hosted LiveSync waits for all files between the local database and storage to be surely checked.
- Improved:
  - The job scheduler is now more robust and stable.
  - The status indicator no longer flickers and keeps zero for a while.
  - No longer meaningless frequent updates of status indicators.
  - Now we can configure regular expression filters in handy UI. Thank you so much, @eth-p!
  - `Fetch` or `Rebuild everything` is now more safely performed.
- Minor things
  - Some utility function has been added.
  - Customisation sync now less wrong messages.
  - Digging the weeds for eradication of type errors.
2024-04-12 01:30:35 +09:00
vorotamoroz 6952ef37f5 Update quick_setup.md 2024-04-09 13:10:31 +09:00
vorotamoroz 9630bcbae8 bump 2024-03-22 10:50:03 +01:00
vorotamoroz c3f925ab9a Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2024-03-22 10:48:25 +01:00
vorotamoroz 034dc0538f - Fixed:
- Fixed the issue that binary files were sometimes corrupted.
  - Fixed customisation sync data could be corrupted.
- Improved:
  - Now the remote database costs lower memory.
    - This release requires a brief wait on the first synchronisation, to track the latest changeset again.
  - Description added for the `Device name`.
- Refactored:
  - Many type-errors have been resolved.
  - Obsolete file has been deleted.
2024-03-22 10:48:16 +01:00
vorotamoroz b6136df836 Update quick_setup.md 2024-03-22 14:27:34 +09:00
vorotamoroz 24aacdc2a1 bump 2024-03-22 04:07:17 +01:00
vorotamoroz f91109b1ad - Improved:
- Faster start-up by removing too many logs which indicates normality
  - By streamlined scanning of customised synchronisation extra phases have been deleted.
2024-03-22 04:07:07 +01:00
vorotamoroz e76e7ae8ea bump 2024-03-19 17:59:38 +01:00
vorotamoroz f7fbe85d65 - New feature:
- We can disable the status bar in the setting dialogue.
- Improved:
  - Now some files are handled as correct data type.
  - Customisation sync now uses the digest of each file for better performance.
  - The status in the Editor now works performant.
- Refactored:
  - Common functions have been ready and the codebase has been organised.
  - Stricter type checking following TypeScript updates.
  - Remove old iOS workaround for simplicity and performance.
2024-03-19 17:58:55 +01:00
vorotamoroz 0313443b29 Merge pull request #389 from Seeker0472/fix-command
Fixed docker-compose command in docs
2024-03-19 14:06:23 +09:00
seeker0472 755c30f468 fix docker-compose command 2024-03-17 14:30:35 +08:00
vorotamoroz b00b0cc5e5 bump 2024-03-15 10:37:15 +01:00
vorotamoroz d7985a6b41 Improved:
- Now using HTTP for the remote database URI warns of an error (on mobile) or notice (on desktop).
2024-03-15 10:36:00 +01:00
vorotamoroz 486e816902 Update dependencies 2024-03-15 10:35:41 +01:00
vorotamoroz ef9b19c24b bump 2024-03-04 04:07:51 +00:00
vorotamoroz 4ed9494176 Changed:
- The default settings has been changed.
Improved:
- Default and preferred settings are applied on completion of the wizard.
Fixed:
- Now Initialisation `Fetch` will be performed smoothly and there will be fewer conflicts.
- No longer stuck while Handling transferred or initialised documents.
2024-03-04 04:07:11 +00:00
vorotamoroz fcd56d59d5 bump 2024-03-01 08:33:37 +00:00
vorotamoroz 1cabfcfd19 Fixed:
- `Verify and repair all files` is no longer broken.
New feature::
- Now `Verify and repair all files` can restore or show history
Improved:
- Performance improved
2024-03-01 08:32:48 +00:00
vorotamoroz 37a18dbfef bump 2024-03-01 03:28:46 +00:00
vorotamoroz e7edf88713 Fixed
- No longer unchanged hidden files and customisations are saved and transferred now.
- File integrity of vault history indicates the integrity correctly.
Improved
- In the report, the schema of the remote database URI is now printed.
2024-03-01 03:28:06 +00:00
vorotamoroz 90ff75ab35 add notes. 2024-02-29 00:30:07 +00:00
vorotamoroz bff1d661f5 Update troubleshooting.md
Fix grammar
2024-02-29 00:42:28 +09:00
vorotamoroz 6b59c14774 Update doc 2024-02-28 08:29:06 +00:00
vorotamoroz 8249274eac bump 2024-02-28 08:28:07 +00:00
vorotamoroz 3c6dae7814 - Fixed:
- Fixed a bug on `fetch chunks on demand` that could not fetch the chunks on demand.
- Improved:
  - `fetch chunks on demand` works more smoothly.
  - Initialisation `Fetch` is now more efficient.
- Tidied:
  - Removed some meaningless codes.
2024-02-28 08:27:17 +00:00
vorotamoroz 60cf8fe640 bump 2024-02-27 08:36:37 +00:00
vorotamoroz 3d89b3863f Fixed:
- Now fetch and unlock the locked remote database works well again.
- No longer crash on symbolic links inside hidden folders.
Improved:
- Chunks are now created more efficiently.
- Better performance in saving notes.
- Network activities are indicated as an icon.
- Less memory used for binary processing.
Tidied:
- Cleaned unused functions up.
- Sorting out the codes that have become nonsense.
Changed:
- Now no longer `fetch chunks on demand` needs `Pacing replication`
2024-02-27 08:35:46 +00:00
vorotamoroz ee9364310d bump 2024-02-20 09:36:43 +00:00
vorotamoroz 86b9695bc2 Fixed:
- No longer deleted hidden files were ignored.
- The document history dialogue is now able to process the deleted revisions.
- Deletion of a hidden file is now surely performed even if the file is already conflicted.
2024-02-20 09:32:48 +00:00
vorotamoroz e05f8771b9 bump 2024-02-20 05:15:48 +00:00
vorotamoroz 65619c2478 Fixed:
- Fixed a problem with synchronisation taking a long time to start in some cases.
- Now we can disable E2EE encryption.
Improved:
- `Setup Wizard` is now more clear.
- `Minimal Setup` is now more simple.
- Self-hosted LiveSync now be able to use even if there are vaults with the same name.
- Now Self-hosted LiveSync waits until set-up is complete.
- Show reload prompts when possibly recommended while settings.
New feature:
- A guidance dialogue prompting for settings will be shown after the installation.
Changed
- Some setting names has been changed
2024-02-20 05:13:53 +00:00
vorotamoroz 1552fa9d9e Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2024-02-15 08:36:49 +00:00
vorotamoroz 767f12b52f Rewrite 2024-02-15 08:35:12 +00:00
vorotamoroz 4071ba120e Update troubleshooting.md 2024-02-15 13:56:15 +09:00
vorotamoroz 2c0e3ba01c update faq 2024-02-15 04:38:31 +00:00
vorotamoroz 90adf06830 Merge branch 'main' of https://github.com/vrtmrz/obsidian-livesync 2024-02-15 04:04:06 +00:00
vorotamoroz cf8e7ff6ca bump 2024-02-15 04:04:01 +00:00
vorotamoroz 95c3ff5043 Update common lib. 2024-02-15 04:02:28 +00:00
vorotamoroz 7ea3515801 Fixed:
- Some description of settings have been refined
New feature:
- TroubleShooting is now shown in the setting dialogue.
2024-02-15 04:02:20 +00:00
vorotamoroz f866981a8a Update troubleshooting.md 2024-02-14 17:38:52 +09:00
vorotamoroz 8f36d6f893 fix minor layout 2024-02-09 03:20:31 +00:00
vorotamoroz 6dd86e9392 modify minor layouts. 2024-02-09 03:16:33 +00:00
vorotamoroz d22716bef0 make more clear documents. 2024-02-09 03:13:03 +00:00
vorotamoroz 5d9baec5e4 update colab note 2024-02-07 10:17:45 +00:00
vorotamoroz 27d71ca2fb New utilities. 2024-02-06 11:03:51 +00:00
vorotamoroz c024ed13d3 Refining the content. 2024-02-06 11:02:48 +00:00
vorotamoroz b9527ccab0 bump 2024-01-30 17:31:52 +00:00
vorotamoroz fa3aa2702c Fixed:
- Now the result of conflict resolution could be surely written into the storage.
- Deleted files can be handled correctly again in the history dialogue and conflict dialogue.
- Some wrong log messages were fixed.
- Change handling now has become more stable.
- Some event handling became to be safer.
Improved:
- Dumping document information shows conflicts and revisions.
- The timestamp-only differences can be surely cached.
- Timestamp difference detection can be rounded by two seconds.
Refactored:
- A bit of organisation to write the test.
2024-01-30 17:31:02 +00:00
vorotamoroz 93e7cbb133 bump. 2024-01-29 08:41:03 +00:00
vorotamoroz 716ae32e02 Fixed:
- Deletion of files is now reliably synchronised.
2024-01-29 08:40:41 +00:00
vorotamoroz d6d8cbcf5a bump 2024-01-29 07:57:02 +00:00
vorotamoroz efd348b266 Fixed:
- No longer detects storage changes which have been caused by Self-hosted LiveSync itself.
- Setting sync file will be detected only if it has been configured now.
  - And its log will be shown only while the verbose log is enabled.
- Customisation file enumeration has got less blingy.
Fixed and improved:
- In-editor-status is now shown in the following areas:
  - Note editing pane (Source mode and live-preview mode).
  - New tab pane.
  - Canvas pane.
2024-01-29 07:56:02 +00:00
vorotamoroz 8969b1800a bump 2024-01-24 08:53:00 +00:00
vorotamoroz 2c8e026e29 Fixed:
- Now the results of resolving conflicts are surely synchronised.
Modified:
- Some setting items got new clear names.
New feature:
- We can limit the synchronising files by their size.
- Now the settings could be stored in a specific markdown file to synchronise or switch it
- Customisation of the obsoleted device is now able to be deleted at once.
2024-01-24 08:52:47 +00:00
vorotamoroz a6c27eab3d Merge pull request #367 from calvinbui/patch-1
Skip workspace-mobile.json for cross-platform sync
2024-01-24 15:55:50 +09:00
vorotamoroz 9b5c57d540 Merge pull request #336 from toon159/patch-1
Lower payload size limit and batch limit from 10 to 2
2024-01-22 13:03:29 +09:00
Calvin Bui c251c596e8 Skip workspace-mobile.json for cross-platform sync 2024-01-18 13:23:48 +11:00
vorotamoroz 61188cfaef bump 2024-01-16 08:36:37 +00:00
vorotamoroz 97d944fd75 New feature:
- We can perform automatic conflict resolution for inactive files, and postpone only manual ones by `Postpone manual resolution of inactive files`.
- Now we can see the image in the document history dialogue.
  - We can see the difference of the image, in the document history dialogue.
	- And also we can highlight differences.

Improved:
- Hidden file sync has been stabilised.
- Now automatically reloads the conflict-resolution dialogue when new conflicted revisions have arrived.

Fixed:
- No longer periodic process runs after unloading the plug-in.
- Now the modification of binary files is surely stored in the storage.
2024-01-16 08:32:43 +00:00
vorotamoroz d3dc1e7328 Minor fix and refine the readme 2024-01-12 10:29:18 +00:00
vorotamoroz 45304af369 bump 2024-01-12 09:38:57 +00:00
vorotamoroz 7f422d58f2 - Refined:
- Task scheduling logics has been rewritten.
  - Possibly many bugs and fragile behaviour has been fixed
- Fixed:
  - Remote-chunk-fetching now works with keeping request intervals
- New feature:
  - We can show only the icons in the editor.
2024-01-12 09:36:49 +00:00
vorotamoroz c2491fdfad bump 2023-12-11 12:55:01 +09:00
vorotamoroz 06a6e391e8 Fixed for change detection bug. 2023-12-11 12:53:50 +09:00
vorotamoroz f99475f6b7 bump 2023-12-11 12:46:23 +09:00
vorotamoroz 109fc00b9d Fixed
- Now ID of the documents is shown in the log with the first 8 letters.
2023-12-11 12:45:40 +09:00
vorotamoroz c071d822e1 - Improved:
- Now all revisions will be shown only its first a few letters.
- Fixed:
  - Check before modifying files has been implemented.
  - Content change detection has been improved.
2023-12-11 12:22:17 +09:00
vorotamoroz d2de5b4710 bump 2023-12-04 19:39:47 +09:00
vorotamoroz cf5ecd8922 Implemented:
- Now we can use SHA1 for hash function as fallback.
2023-12-04 19:39:04 +09:00
vorotamoroz b337a05b5a bump 2023-11-27 07:13:15 +00:00
vorotamoroz 9ea6bee9d1 - Fixed:
- No longer files are broken while rebuilding.
    - Now, Large binary files can be written correctly on a mobile platform.
    - Any decoding errors now make zero-byte files.
  - Modified:
    - All files are processed sequentially for each.
2023-11-27 06:55:55 +00:00
vorotamoroz 9747c26d50 bump 2023-11-25 02:22:26 +09:00
vorotamoroz bb4b764586 - Fixed:
- No more infinity loops on larger files.
    - Show message on decode error.
  - Refactored:
    - Fixed to avoid obsolete global variables.
2023-11-25 02:21:44 +09:00
vorotamoroz 279b4b41e5 bump 2023-11-24 10:32:46 +00:00
vorotamoroz b644fb791d - Changes and performance improvements:
- Now the saving files are processed by Blob.
    - The V2-Format has been reverted.
    - New encoding format has been enabled in default.
    - WARNING: Since this version, the compatibilities with older Filesystem LiveSync have been lost.
2023-11-24 10:31:58 +00:00
Vichaya Raksakunpanich 5802ed31be Update ObsidianLiveSyncSettingTab.ts
Lower payload size limit and batch limit to 2 due to IBM Cloudant read/write limitation. Hope it will fix the "Replication error".
2023-11-24 16:25:16 +07:00
vorotamoroz ac9428e96b Fixed
- To better replication, path obfuscation is now deterministic even if with E2EE.
2023-11-15 08:44:03 +00:00
vorotamoroz 280d9e1dd9 Fixed: Fixed the issue of TOML editing. 2023-11-07 01:07:58 +00:00
vorotamoroz f7209e566c bump 2023-10-24 10:07:29 +01:00
vorotamoroz 4a9ab2d1de Fixed:
- No longer enumerating file names is broken.
2023-10-24 10:07:17 +01:00
vorotamoroz cb74b5ee93 - Fixed
- Now empty file could be decoded.
    - Local files are no longer pre-saved before fetching from a remote database.
    - No longer deadlock while applying customisation sync.
    - Configuration with multiple files is now able to be applied correctly.
    - Deleting folder propagation now works without enabling the use of a trash bin.
2023-10-24 09:54:56 +01:00
vorotamoroz 60eecd7001 bump 2023-10-17 12:00:59 +09:00
vorotamoroz 4bd7b54bcd Fixed:
- Now the files which having digit or character prefixes in the path will not be ignored.
2023-10-17 12:00:19 +09:00
vorotamoroz 8923c73d1b bump 2023-10-14 23:08:34 +09:00
vorotamoroz 11e64b13e2 The text-input-dialogue is no longer broken. 2023-10-14 23:07:51 +09:00
vorotamoroz 983d9248ed bump 2023-10-13 04:23:59 +01:00
vorotamoroz 7240e84328 - New feature:
- We can launch Customization sync from the Ribbon if we enable it.
- Fixed:
  - Setup URI is now back to the previous spec; be encrypted by V1.
  - The Settings dialogue is now registered at the beginning of the start-up process.
- Improved:
  - Enumerating documents has been faster.
2023-10-13 04:22:24 +01:00
vorotamoroz 0d55ae2532 Merge pull request #298 from LiamSwayne/patch-1
Grammar fix
2023-10-04 13:07:42 +09:00
Liam Swayne dbd284f5dd grammar fix 2023-10-03 22:26:30 -04:00
vorotamoroz c000a02f4a bump 2023-10-02 10:39:54 +01:00
vorotamoroz 79754f48d6 New feature:
- We can delete all data of customization sync from the `Delete all customization sync data` on the `Hatch` pane.
Fixed:
- Prevent keep restarting on iOS by yielding microtasks.
2023-10-02 10:38:54 +01:00
vorotamoroz dd7a40630b bump 2023-10-02 09:54:56 +01:00
vorotamoroz 14406f8213 - Fixed:
- No more UI freezing and keep restarting on iOS.
  - Diff of Non-markdown documents are now shown correctly.
- Improved:
  - Performance has been a bit improved.
  - Customization sync has gotten faster.
    - However, We lost forward compatibility again (only for this feature). Please update all devices.
- Misc
  - Terser configuration has been more aggressive.
2023-10-02 09:53:41 +01:00
vorotamoroz 3bbd9c048d bump 2023-09-29 18:57:54 +09:00
vorotamoroz d91c4f50b4 - Improved:
- A New binary file handling implemented
  - A new encrypted format has been implemented
  - Now the chunk sizes will be adjusted for efficient sync
- Fixed:
  - levels of exception in some logs have been fixed
- Tidied:
  - Some Lint warnings have been suppressed.
2023-09-29 18:55:46 +09:00
vorotamoroz 395b7fbc42 bump 2023-09-22 18:03:09 +09:00
vorotamoroz 3773e57429 Improved:
- We can open the log pane also from the command palette now.
- Now, the hidden file scanning interval could be configured to 0.
- `Check database configuration` now points out that we do not have administrator permission.
2023-09-22 17:59:32 +09:00
vorotamoroz 4835fce62a bump 2023-09-21 09:44:50 +01:00
vorotamoroz ff814be4a0 Fixed:
- Now the synchronisation will begin without our interaction.
- No longer puts the configuration of the remote database into the log while checking configuration.
- Some outdated description notes have been removed.
- Options that are meaningless depending on other settings configured are now hidden.
2023-09-21 09:44:07 +01:00
vorotamoroz b271b63efa bump 2023-09-20 07:05:18 +01:00
vorotamoroz 23419e476a - Fixed:
- Hidden files are no longer handled in the initial replication.
  - Report from `Making report` fixed
2023-09-20 07:04:31 +01:00
vorotamoroz b9bd1f17b8 bump 2023-09-19 09:58:04 +01:00
vorotamoroz bcce277c36 New feature:
- `Sync on Editor save` has been implemented
- Now we can use the `Hidden file sync` and the `Customization sync` cooperatively.
- We can ignore specific plugins in Customization sync.
- Now the message of leftover conflicted files accepts our click.

Refactored:
- Parallelism functions made more explicit.
- Type errors have been reduced.

Fixed:
- Now documents would not be overwritten if they are conflicted.
- Some error messages have been fixed.
- Missing dialogue titles have been shown now.
2023-09-19 09:53:48 +01:00
vorotamoroz 5acbbe479e Merge pull request #276 from cgcel/main
Add Quick setup Chinese translation.
2023-09-13 17:13:55 +09:00
vorotamoroz c9f9d511e0 bump 2023-09-05 09:16:49 +01:00
vorotamoroz b8cb94c498 Fixed:
- Resolving conflicted revision has become more robust.
- LiveSync now try to keep local changes when fetching from the rebuilt remote database.
- Now, all files will be restored after performing `fetch` immediately.
2023-09-05 09:16:11 +01:00
cgcel 52c736f6b9 update: format markdown titles. 2023-09-01 11:01:06 +08:00
cgcel ebd1cb7777 add: Quick setup Chinese translation. 2023-09-01 10:58:07 +08:00
vorotamoroz 10decb7909 Merge pull request #259 from jt-wang/main
Upload colab notebook into the repo, and update setup_flyio.md to reference it
2023-08-24 13:04:02 +09:00
vorotamoroz e0aab8d69d bump 2023-08-24 04:03:03 +01:00
vorotamoroz 618600c753 Fixed:
- Now the empty (or deleted) file could be conflict-resolved.
2023-08-24 04:00:56 +01:00
Jingtao Wang d1aba87e37 Updated with latest changes 2023-08-23 19:22:07 -07:00
Jingtao Wang db889f635e Merge pull request #1 from jt-wang/move-colab-script-into-repo
Upload deploy_couchdb_to_flyio_v2_with_swap.ipynb into the repo, and reference it from fly.io setup doc.
2023-08-15 14:55:37 -07:00
Jingtao Wang dd80e634f5 Update setup_flyio.md to reference colab notebook within the repo 2023-08-15 14:54:43 -07:00
Jingtao Wang bec6fc1a74 Upload deploy_couchdb_to_flyio_v2_with_swap.ipynb
Upload https://gist.github.com/vrtmrz/37c3efd7842e49947aaaa7f665e5020a into the repo for unified management.
2023-08-15 14:49:24 -07:00
vorotamoroz 5c96c7f99b bump 2023-08-08 10:45:50 +01:00
vorotamoroz 7b9724f713 Fixed:
- Now nested ignore files could be parsed correctly.
- The unexpected deletion of hidden files in some cases has been corrected.
- Hidden file change is no longer reflected on the device which has made the change itself.
2023-08-08 10:42:07 +01:00
vorotamoroz 4cd12c85ed update the changelog. 2023-08-04 10:03:51 +01:00
vorotamoroz 90651540f9 Update release.yml 2023-08-04 17:52:13 +09:00
vorotamoroz 9e504d5002 bump 2023-08-04 09:45:14 +01:00
vorotamoroz faaa94423c New feature:
- (Beta) ignore files handling

Fixed:
- Buttons on lock-detected-dialogue now can be shown in narrow-width devices.

Improved:
- Some constant has been flattened to be evaluated.
- The usage of the deprecated API of obsidian has been reduced.
- Now the indexedDB adapter will be enabled while the importing configuration.

Misc:
- Compiler, framework, and dependencies have been upgraded.
- Due to standing for these impacts (especially in esbuild and svelte,) terser has been introduced.
  Feel free to notify your opinion to me! I do not like to obfuscate the code too.
2023-08-04 09:45:04 +01:00
vorotamoroz a7c179fc86 Merge pull request #247 from cgcel/patch-1
Update setup_own_server_cn.md
2023-07-31 12:49:50 +09:00
vorotamoroz ed1a670b9b bump 2023-07-26 17:35:06 +09:00
vorotamoroz 6c3c265bd6 Dependency updates 2023-07-26 17:32:07 +09:00
vorotamoroz 9d68025f2a Fixed:
- Now storing files after cleaning up is correct works.

Improved:
- Cleaning the local database up got incredibly fastened.
2023-07-26 17:31:55 +09:00
GC Chen e70972c8f9 Update setup_own_server_cn.md 2023-07-25 22:31:17 +08:00
vorotamoroz 7607be7729 bump 2023-07-25 19:20:18 +09:00
vorotamoroz db9d428ab4 Fixed:
- Internal documents are now ignored.
- Merge dialogue now respond immediately to button pressing.
- Periodic processing now works fine
- The checking interval of detecting conflicted has got shorter
- Replication is now cancelled while cleaning up
- The database locking by the cleaning up is now carefully unlocked
- Missing chunks message is correctly reported

New feature:
- Suspend database reflecting has been implemented
- Now fetch suspends the reflecting database and storage changes temporarily to improve the performance.
- We can choose the action when the remote database has been cleaned
- Merge dialogue now show `↲` before the new line.

Improved:
- Now progress is reported while the cleaning up and fetch process
- Cancelled replication is now detected
2023-07-25 19:16:39 +09:00
vorotamoroz 0a2caea3c7 bump 2023-07-25 00:30:17 +09:00
vorotamoroz b1d1ba0e6b - Implemented:
- Database clean-up is now in beta 2!
    We can shrink the remote database by deleting unused chunks, with keeping history.
    Note: Local database is not cleaned up totally. We have to `Fetch` again to let it done.
    **Note2**: Still in beta. Please back your vault up anything before.
- Fixed:
  - The log updates are not thinned out now.
2023-07-25 00:29:47 +09:00
vorotamoroz 5e844372cb Merge pull request #236 from bioluks/documentation-rproxy
CouchDB config corrections, reverse proxy documentation, other additions
2023-07-20 10:33:37 +09:00
Meriç Aşkın 99c6911e96 Merge branch 'vrtmrz:main' into documentation-rproxy 2023-07-18 04:25:53 +02:00
vorotamoroz dc880d7d4e Merge pull request #244 from samyarkd/patch-1
fix: separate languages
2023-07-18 09:24:04 +09:00
Samyar c157fef76c fix: separate languages
when i first saw it i thought it's one connected sentence
so, i thought it would be nice to separate them using a dash.
2023-07-14 22:14:51 +03:30
bioluks 2b2011dc49 Added docker-compose, table of contents, a new reverse proxies section populated with traefik for now 2023-07-04 01:52:48 +02:00
bioluks ae451e005e Moved enable_cors to the right section. Added explanation for difference of versions. Added bind_address for making sure the container uses all interfaces given. Added spaces between 'origins' and removed spaces between the 'methods' elements because it's like this in the official Documentation. Added a write permission warning since many newbies had this mistake with couchdb. 2023-07-04 00:15:00 +02:00
vorotamoroz 8a75d41cbb bump 2023-07-03 18:45:05 +09:00
vorotamoroz 5252cc0372 Improved:
- Boot-up performance has been improved.
- Customisation sync performance has been improved.
- Synchronising performance has been improved.
2023-07-03 18:44:02 +09:00
vorotamoroz 5022155317 Fix documentation 2023-06-19 16:31:52 +09:00
vorotamoroz d36f925c65 bump 2023-06-15 18:13:43 +09:00
vorotamoroz 3ae33e0500 Refactored: External dependency merged. 2023-06-15 18:07:11 +09:00
vorotamoroz 13e442a0c7 Improvements:
- Hashing ChunkID has been improved.
- Logging keeps 400 lines now.

Refactored:
- Import statement has been fixed about types.
2023-06-15 17:55:58 +09:00
vorotamoroz 6288716966 - Fixed
- Fixed the issue about fixing the database.
2023-06-09 19:28:29 +09:00
vorotamoroz 47d2cf9733 bump 2023-06-09 18:48:59 +09:00
vorotamoroz ae6a9ecee4 - New feature (For fixing a problem):
- We can fix the database obfuscated and plain paths that have been mixed up.
- Improvements
  - Customisation Sync performance has been improved.
2023-06-09 18:48:10 +09:00
vorotamoroz 2289bea8d9 bump 2023-06-07 17:32:28 +09:00
vorotamoroz cda90259c5 - New feature:
- Vault history: A tab has been implemented to give a birds-eye view of the changes that have occurred in the vault.
- Improved:
  - Log dialogue is now shown as one of tabs.
- Fixed:
  - Some minor issues has been fixed.
2023-06-07 17:29:53 +09:00
vorotamoroz 432a211f80 Merge pull request #224 from antoKeinanen/main
[Feature] Add password protection to askString function
2023-06-07 17:04:31 +09:00
antoKeinanen eaf8c4998e feat: add password protection for required inputs 2023-06-05 13:27:06 +03:00
antoKeinanen 55601f7910 feat: add option for password protection in askString function 2023-06-05 13:24:50 +03:00
vorotamoroz 13e70475d9 Add new documentation
Thanks for your discussion!!
2023-06-02 14:36:00 +09:00
vorotamoroz 2572177879 Merge pull request #222 from Hugo-Persson/add-troubleshooting-guide
Added troubleshooting guide
2023-06-02 09:25:18 +09:00
Hugo Persson e82a2560e4 Added troubleshooting guide 2023-06-01 19:54:42 +02:00
vorotamoroz 09146591eb bump 2023-06-01 17:06:23 +09:00
vorotamoroz 69c6e57df3 Fix:
- Fixed Setup wizard
- Set initial pane to General settings.
2023-06-01 17:01:42 +09:00
vorotamoroz 5e181a8ec4 Update docs 2023-06-01 16:19:14 +09:00
vorotamoroz 4354cc3054 bump 2023-06-01 13:05:29 +09:00
vorotamoroz 0664427c63 Refined:
- Configuration dialogue refined.
2023-06-01 13:02:56 +09:00
vorotamoroz 49c4736d69 Improved:
- Confirmation for new adapters while rebuilding.
- Batched file is now shown in digits.

Fixed:
- Some framework have been upgraded.
2023-06-01 12:47:41 +09:00
vorotamoroz f0ce8f0e05 Fixed:
- Import declarations
- Logging has been tweaked
Improved:
2023-06-01 12:36:10 +09:00
vorotamoroz 0a70afc5a3 Update issue templates 2023-05-24 11:51:53 +09:00
vorotamoroz 431239a736 Merge pull request #218 from garlic-hub/garlic-hub-patch-1
Update setup_own_server.md
2023-05-23 17:46:35 +09:00
vorotamoroz 1ceb671683 bump 2023-05-23 17:40:47 +09:00
vorotamoroz ea40e5918c Fixed:
- Now hidden file synchronisation would not be hanged, even if so many files exist.

Improved:
- Customisation sync works more smoothly.
2023-05-23 17:39:02 +09:00
garlic-hub 64681729ff Update setup_own_server.md 2023-05-23 04:49:50 +00:00
vorotamoroz 830f2f25d1 update a dependency. 2023-05-17 16:27:35 +09:00
vorotamoroz 05f0abebf0 bump 2023-05-17 16:26:46 +09:00
vorotamoroz 842da980d7 Improved:
- Reduced remote database checking to improve speed and reduce bandwidth.

Fixed:
- Chunks which previously misinterpreted are now interpreted correctly.
- Deleted file detection on hidden file synchronising now works fine.
- Now the Customisation sync is surely quiet while it has been disabled.
2023-05-17 16:20:07 +09:00
vorotamoroz d8ecbb593b bump 2023-05-09 18:03:57 +09:00
vorotamoroz 8d66c372e1 Improved:
- Now replication will be paced by collecting chunks.
2023-05-09 17:49:40 +09:00
vorotamoroz 7c06750d93 bump 2023-05-02 18:00:55 +09:00
vorotamoroz 808fdc0944 Fixed:
- Fixed garbage collection error while unreferenced chunks exist many.
- Fixed filename validation on Linux.

Improved:
- Showing status is now thinned for performance.
- Enhance caching while collecting chunks.
2023-05-02 17:59:58 +09:00
vorotamoroz ce25eee74b bump 2023-04-30 11:31:09 +09:00
vorotamoroz 146c170dec Fixed:
- Fixed hidden file handling on Linux

Improved:
- Now customization sync works more smoothly.
2023-04-30 11:28:39 +09:00
vorotamoroz cf06f878db bump 2023-04-28 14:24:37 +09:00
vorotamoroz e77031f1cd Implemented:
- New feature `Customization sync` has replaced `Plugin and their settings`
2023-04-28 13:32:58 +09:00
vorotamoroz 3f2224c3a6 Merge pull request #203 from garlic-hub/garlic-hub-patch-1
Update quick_setup.md
2023-04-21 17:15:31 +09:00
garlic-hub 2322b5bc34 Update quick_setup.md 2023-04-20 21:30:56 +00:00
vorotamoroz 83ac5e7086 bump 2023-04-14 17:39:37 +09:00
vorotamoroz 09f35a2af4 New features:
- Now remote database cleaning-up will be detected automatically.
- A solution selection dialogue will be shown if synchronisation is rejected after cleaning or rebuilding the remote database.
- During fetching or rebuilding, we can configure `Hidden file synchronisation` on the spot.
2023-04-14 17:39:09 +09:00
vorotamoroz fae0a9d76a bump 2023-04-13 17:33:28 +09:00
vorotamoroz 9a27c9bfe5 - Actions for maintaining databases moved to the 🎛️Maintain databases.
- Clean-up of unreferenced chunks has been implemented on an **experimental**.
2023-04-13 17:33:17 +09:00
vorotamoroz 5e75917b8d bump 2023-04-12 12:08:35 +09:00
vorotamoroz 3322d13b55 - Fixed:
- `Fetch` and `Rebuild database` will work more safely.
- Case-sensitive renaming now works fine.
  Revoked the logic which was made at #130, however, looks fine now.
2023-04-12 12:08:08 +09:00
vorotamoroz 851c9f8a71 Pop-up is now correctly shown after hidden file synchronisation. 2023-04-11 12:54:20 +09:00
vorotamoroz b02596dfa1 bump 2023-04-11 12:45:40 +09:00
vorotamoroz 02c69b202e Improved:
- The setting pane refined.
- We can enable `hidden files sync` with several initial behaviours: `Merge`, `Fetch` remote, and `Overwrite` remote.
- No longer `Touch hidden files`
2023-04-11 12:45:24 +09:00
vorotamoroz 6b2c7b56a5 add note. 2023-04-10 15:18:32 +09:00
vorotamoroz 820168a5ab bump. 2023-04-10 15:15:20 +09:00
vorotamoroz 40015642e4 Fixed
- fixed type annotation
- update lib
2023-04-10 15:14:47 +09:00
vorotamoroz 7a5cffb6a8 bump 2023-04-10 12:07:03 +09:00
vorotamoroz e395e53248 Implemented:
- Explicit types
- Path obfuscation.
- ... and minor changes.
2023-04-10 12:04:30 +09:00
vorotamoroz 97f91b1eb0 Update README.md 2023-03-30 18:23:52 +09:00
vorotamoroz 2f4159182e Update README.md 2023-03-30 18:23:30 +09:00
vorotamoroz 302a4024a8 Update README.md 2023-03-30 18:22:49 +09:00
vorotamoroz bc17f4f70d bump 2023-03-23 16:48:42 +09:00
vorotamoroz 6f33d23088 - Fixed: The Fetch that was broken at 0.17.33 has been fixed.
- Refactored again: Internal file sync, plug-in sync and Set up URI have been moved into each file.
2023-03-23 16:48:30 +09:00
vorotamoroz 4998e2ef0b bump 2023-03-22 15:04:57 +09:00
vorotamoroz f5e0b826a6 Refactored
- the responsibilities that `LocalDatabase` had were shared.
2023-03-22 15:04:26 +09:00
vorotamoroz 3a3f79bb99 bump 2023-03-17 17:50:53 +09:00
vorotamoroz 9efb6ed0c1 Fixed:
- Now periodic internal file scanning works well.
- The handler of Window-visibility-changed has been fixed.
- And minor fixes possibly included.
Refactored:
- Unused logic has been removed.
- Some utility functions have been moved into suitable files.
- Function names have been renamed.
2023-03-17 17:48:24 +09:00
vorotamoroz 6b7956ab67 bump 2023-03-14 19:03:28 +09:00
vorotamoroz 58196c2423 Fixed:
- Now `redflag3` can be run surely.
- Synchronisation can now be aborted.
2023-03-14 19:02:57 +09:00
vorotamoroz 3940260d42 bump 2023-03-02 12:56:59 +09:00
vorotamoroz b16333c604 Implemented:
- `Resolve all conflicted files` has been implemented.
Fixed:
- Fixed a problem about reading chunks online when a file has more chunks than the concurrency limit.
Rollbacked:
- Logs are kept only for 100 lines, again.
2023-03-02 12:54:41 +09:00
vorotamoroz 7bf6d1f663 update dependencies 2023-03-02 12:51:46 +09:00
vorotamoroz 7046928068 bump 2023-03-01 12:59:48 +09:00
vorotamoroz 333fcbaaeb - Fixed:
- Requests of reading chunks online are now split into a reasonable(and configurable) size.
    - No longer error message will be shown on Linux devices with hidden file synchronisation.
  - Improved:
    - The interval of reading chunks online is now configurable.
    - Boot sequence has been speeded up, more.
  - Misc:
    - Messages on the boot sequence will now be more detailed. If you want to see them, please enable the verbose log.
    - Logs became be kept for 1000 lines while the verbose log is enabled.
2023-03-01 12:58:29 +09:00
vorotamoroz 009f92c307 bump 2023-02-28 17:25:46 +09:00
vorotamoroz 3e541bd061 Fixed:
- Some messages have been refined.
- Boot sequence has been speeded up.
- Opening the local database multiple times in a short duration has been suppressed.
2023-02-28 17:15:43 +09:00
vorotamoroz 52d08301cc bump 2023-02-27 17:57:37 +09:00
vorotamoroz 49d4c239f2 Improved:
- Now, the filename of the conflicted settings will be shown on the merging dialogue
- The plugin data can be resolved when conflicted.
- The semaphore status display has been changed to count only.
- Applying to the storage will be concurrent with a few files.
2023-02-27 17:57:05 +09:00
vorotamoroz 748d031b36 bump 2023-02-21 09:13:19 +09:00
vorotamoroz dbe77718c8 Urgent:
- The modified document will be reflected in the storage now.
2023-02-21 09:12:14 +09:00
vorotamoroz f334974cc3 bump 2023-02-20 17:58:14 +09:00
vorotamoroz 8f2ae437c6 Fixed:
- Now reading error will be reported.
2023-02-20 17:54:57 +09:00
vorotamoroz a0efda9e71 bump 2023-02-17 17:37:15 +09:00
vorotamoroz be3d61c1c7 - New feature:
- If any conflicted files have been left, they will be reported.
- Fixed:
  - Now the name of the conflicting file is shown on the conflict-resolving dialogue.
  - Hidden files are now able to be merged again.
  - No longer error caused at plug-in being loaded.
- Improved:
  - Caching chunks are now limited in total size of cached chunks.
2023-02-17 17:35:06 +09:00
vorotamoroz b24c4ef55b bump 2023-02-13 15:17:23 +09:00
vorotamoroz ff850b48ca - Improved:
- Now we can preserve the logs into the file.
    - Note: This option will be enabled automatically also when we flagging a red flag.
  - File names can now be made platform-appropriate.
- Refactored:
  - Some redundant implementations have been sorted out.
2023-02-13 15:17:09 +09:00
vorotamoroz ad3860ac40 bump 2023-02-09 17:24:57 +09:00
vorotamoroz 437b7ebae1 - Fixed:
- Now hidden files will not be synchronised while we are not configured.
  - Some processes could start without waiting for synchronisation to complete, but now they will wait for.
- Improved
  - Now, by placing `redflag3.md`, we can discard the local database and fetch again.
2023-02-09 17:22:12 +09:00
vorotamoroz e3305c24e1 Merge pull request #170 from hilsonp/main
add tip : redflag.md can be a directory which is easier to create on iOS
2023-02-09 15:45:00 +09:00
Pierre Hilson d008e2a1d0 add tip : redflag.md can be a directory which is easier to create on iOS 2023-02-03 18:58:54 +01:00
vorotamoroz bb8c7eb043 bump 2023-02-03 18:36:33 +09:00
vorotamoroz e61bebd3ee - Fixed: Skip patterns now handle capital letters.
- Improved
  - New configuration to avoid exceeding throttle capacity.
  - The conflicted `data.json` is no longer merged automatically.
2023-02-03 18:30:40 +09:00
vorotamoroz 99594fe517 Merge pull request #169 from karasevm/feat-timeout
Allow switching CouchDB long polling from heartbeat to timeout
2023-02-03 17:41:54 +09:00
Maksim Karasev 972d208af4 Expose useTimeouts option in the settings tab 2023-02-02 02:24:32 +03:00
vorotamoroz 2c36ec497c bump 2023-01-30 19:56:46 +09:00
vorotamoroz 677895547c Ensure that Obsidian will be notified when hidden files have been changed 2023-01-30 19:48:09 +09:00
vorotamoroz aec0b2986b bump 2023-01-28 21:24:03 +09:00
vorotamoroz e6025b92d8 Ensure logging. 2023-01-28 21:20:26 +09:00
vorotamoroz fad9fed5ca bump 2023-01-27 21:47:04 +09:00
vorotamoroz e46246cd63 Fixed:
- Fixed lack of error handling.
2023-01-27 17:49:53 +09:00
vorotamoroz 0f3be19dd7 bump 2023-01-25 22:39:50 +09:00
vorotamoroz bc568ff479 Fixed:
- Now we can merge JSON files even if they have entries which cannot be compared.
2023-01-25 22:37:55 +09:00
vorotamoroz 2fdc7669f3 bump 2023-01-25 20:54:20 +09:00
vorotamoroz ec8d9785ed - Improved:
- Plugins and their settings no longer need scanning if changes are monitored.
  - Now synchronising plugins and their settings are performed parallelly and faster.
  - We can place `redflag2.md` to rebuild the database automatically while the boot sequence.
- Experimental:
  - We can use a new adapter on PouchDB. This will make us smoother.
    - Note: Not compatible with the older version.
- Fixed:
  - The default batch size is smaller again.
  - Plugins and their setting can be synchronised again.
  - Hidden files and plugins are correctly scanned while rebuilding.
  - Files with the name started `_` are also being performed conflict-checking.
2023-01-25 20:53:20 +09:00
vorotamoroz 71a80cacc3 bump again 2023-01-19 19:05:16 +09:00
vorotamoroz 38daeca89f fixed leaked logging 2023-01-19 19:03:57 +09:00
vorotamoroz 7ec64a6a93 bump 2023-01-19 18:55:18 +09:00
vorotamoroz c5c6deb742 Improved:
- Confidential information has no longer stored in data.json as is.
- Synchronising progress has been shown in the notification.
- We can commit passphrases with a keyboard.
- Configuration which had not been saved yet is marked now.

Fixed:
- Hidden files have been synchronised again.

And, minor changes have been included.
2023-01-19 18:50:06 +09:00
vorotamoroz ef57fbfdda Fixed:
- Now the filename is shown on the Conflict resolving dialog
- Rename of files has been improved again.
2023-01-19 13:11:30 +09:00
vorotamoroz bc158e9f2b bump 2023-01-17 17:46:06 +09:00
vorotamoroz 6513c53c7e Fixed:
- Document history is now displayed again.

Reorganised:
- Many files have been refactored.
2023-01-17 17:39:26 +09:00
vorotamoroz 5d1074065c bump 2023-01-16 17:33:31 +09:00
vorotamoroz b444082b0c Fixed:
- Performance improvement
- Now `Chunk size` can be set to under one hundred.

New feature:
- The number of transfers required before replication stabilises is now displayed.
2023-01-16 17:31:37 +09:00
vorotamoroz d5e6419504 bump 2023-01-15 11:17:08 +09:00
vorotamoroz 1bf1e1540d Fix diff check. 2023-01-15 11:09:23 +09:00
vorotamoroz be1e6b11ac Fixed
- Large files addressed.
2023-01-13 19:43:39 +09:00
vorotamoroz a486788572 bump 2023-01-06 16:33:54 +09:00
vorotamoroz e5784a1da6 Fixed:
- Conflict merge of internal files is no longer broken.
Improved:
- Smoother status display inside the editor.
2023-01-06 16:27:39 +09:00
vorotamoroz 2100e22276 bump 2022-12-27 18:12:00 +09:00
vorotamoroz ec08dc5fe8 Improved:
- Performance improved
  Prebuilt PouchDB is no longer used.

Fixed:
- Merging hidden files is also fixed.

New Feature:
- Now we can synchronise automatically after merging conflicts.
2022-12-27 18:09:51 +09:00
vorotamoroz c92e94e552 fix eslint configuration 2022-12-27 17:58:42 +09:00
vorotamoroz c7db8592c6 bump 2022-12-26 16:16:46 +09:00
vorotamoroz fc3617d9f9 Fixed:
- Fixed merging issues.
- Fixed button styling.

Changed:
- Default behaviour of conflict checking on synchronising.
2022-12-26 16:12:57 +09:00
vorotamoroz 34c1b040db bump 2022-12-24 21:05:32 +09:00
vorotamoroz 6b85aecafe Fixed:
- Now our renamed/deleted files have been surely deleted again.
2022-12-24 21:05:09 +09:00
vorotamoroz 4dabadd5ea A little better. 2022-12-22 18:02:12 +09:00
vorotamoroz 0619c96c48 bump 2022-12-22 17:59:30 +09:00
vorotamoroz b0f612b61c New feature:
- Use dynamic iteration count
Fixed:
- Read chunks online will fetch the remote chunks correctly.
- Read chunks online will save fetched chunks to the local database.
2022-12-22 17:58:52 +09:00
vorotamoroz 81caad8602 Canvases are now treated as a sort of plain text file. 2022-12-21 15:09:10 +09:00
vorotamoroz f5e28b5e1c bump 2022-12-21 14:51:59 +09:00
vorotamoroz 0c206226b1 New feature
- JSON merging for data and canvas.
2022-12-21 14:51:39 +09:00
vorotamoroz 1ad5dcc1cc bump 2022-12-16 18:56:28 +09:00
vorotamoroz a512566e5b New feature
- We can merge conflicted documents automatically if sensible.

Fixed:
- Writing to the storage will be pended while they have conflicts after replication.

Minor changes included.
2022-12-16 18:55:04 +09:00
vorotamoroz 02de82af46 bump 2022-12-06 18:03:31 +09:00
vorotamoroz 840e03a2d3 Fixed:
- Now we can verify and repair database again.
2022-12-06 17:59:48 +09:00
vorotamoroz 96b676caf3 bump 2022-12-05 19:53:24 +09:00
vorotamoroz a8219de375 Improved:
- Splitting markdown
- Saving chunks

Changed:
- Chunk ID numbering rules

Fixed:
- Just weed.
2022-12-05 19:37:24 +09:00
vorotamoroz db3eb7e1a0 bump 2022-11-24 14:14:27 +09:00
vorotamoroz 50f51393fc upgrade lib. 2022-11-24 14:14:17 +09:00
vorotamoroz 8a04e332d6 Fix check warning for max_document_size, max_http_request_size as like as #145 2022-11-23 15:41:09 +09:00
vorotamoroz 12ae17aa2f Merge pull request #145 from Bpazy/patch-1
Fix check warning for max_document_size, max_http_request_size
2022-11-23 15:37:32 +09:00
Ziyuan Han 657f12f966 Fix check warning 2022-11-23 14:12:50 +08:00
Ziyuan Han 15a7bed448 Fix check warning 2022-11-23 14:11:44 +08:00
vorotamoroz 420c3b94df bump 2022-11-23 10:34:04 +09:00
vorotamoroz 239c087132 framework and dependency upgraded. 2022-11-23 10:27:12 +09:00
vorotamoroz d1a633c799 bump 2022-11-07 17:26:40 +09:00
vorotamoroz 1c07cd92fc - Fixed
- Automatic (temporary) batch size adjustment has been restored to work correctly.
  - Chunk splitting has been backed to the previous behaviour for saving them correctly.
- Improved
  - Corrupted chunks will be detected automatically.
  - Now on the case-insensitive system, `aaa.md` and `AAA.md` will be treated as the same file or path at applying changesets.
2022-11-07 17:26:33 +09:00
vorotamoroz adc84d53b1 bump again 2022-10-27 17:43:00 +09:00
vorotamoroz c3a762ceed bump 2022-10-27 17:42:15 +09:00
vorotamoroz 5945638633 Fixed:
- Conflict detection and merging of deleted files.
- Fixed wrong logs.
- Fix redundant logs.

Implemented
- Automatically deletion of old metadata.
2022-10-27 17:41:26 +09:00
vorotamoroz 331acd463d bump 2022-10-25 11:48:21 +09:00
vorotamoroz 9d4f41bbf9 Fixed failure of detection 2022-10-25 11:47:02 +09:00
vorotamoroz 8831165965 bump 2022-10-25 11:34:09 +09:00
vorotamoroz ed62e9331b Implemented:
- A configuration information reporting tools has been implemented.

Improved:
- Fixed detection of IBM Cloudant
2022-10-25 11:33:37 +09:00
vorotamoroz 799e604eb2 bump 2022-10-21 18:22:02 +09:00
vorotamoroz d9b69d9a1b Fixed:
- Fixed the Infinity loop
2022-10-21 18:20:03 +09:00
vorotamoroz c18b5c24b4 bump 2022-10-14 17:39:16 +09:00
vorotamoroz 07f16e3d7d Added missing log updates. 2022-10-14 17:37:25 +09:00
vorotamoroz 486f1aa4a0 Bump 2022-10-05 17:14:52 +09:00
vorotamoroz 075c6beb68 New feature:
- Monitor hidden files, Now we can use internal file sync without scan.
Fixed:
- Periodic synchronisation sometimes failed.
- Status-display had not been cleared in some cases.
- `Skip patterns default` has been changed to more clear name.
2022-10-05 17:14:32 +09:00
vorotamoroz d6121b0c1e bump 2022-10-03 10:57:39 +09:00
vorotamoroz 3292a48054 Fixed
- The boot sequence has been corrected and now boots smoothly.
- Auto applying of batch save will be processed earlier than before.
2022-10-03 10:52:31 +09:00
vorotamoroz ee37764040 bump 2022-10-02 01:48:50 +09:00
vorotamoroz b6f7fced22 Use new library for batching the chunk retrieving 2022-10-02 01:45:44 +09:00
vorotamoroz 13456c0854 Fixed: deleted debug message 2022-10-02 01:44:39 +09:00
vorotamoroz 2663a52fd7 bump 2022-09-29 16:58:53 +09:00
vorotamoroz d4bbf79514 Fixed:
- Fixed a bug about deleting empty directory
- Weird behaviour on boot-sequence on mobile devices.
2022-09-29 16:58:39 +09:00
vorotamoroz 5f96cc6b82 bump 2022-09-28 17:57:23 +09:00
vorotamoroz 8c8f5d045f Fixed:
- Fixed bug about renaming file
2022-09-28 17:56:34 +09:00
vorotamoroz 40cf8be890 Bump 2022-09-28 16:17:11 +09:00
vorotamoroz 6b03dbbe75 Fixed:
- File tracking logic has been refined.
2022-09-28 16:17:04 +09:00
vorotamoroz 74425f75d2 bump 2022-09-27 17:59:05 +09:00
vorotamoroz ac7c622466 Fixed docs. 2022-09-27 17:58:31 +09:00
vorotamoroz 4b32365694 Implemented:
- Add new features for setting Self-hosted LiveSync up more easier.
2022-09-27 17:58:13 +09:00
vorotamoroz 728edac283 Merge pull request #114 from JEndler/main
Fixed Docker command in docs.
2022-09-15 17:45:38 +09:00
Jakob Endler ab9c0190bb Fixed Docker command in docs. 2022-09-12 18:36:50 +02:00
vorotamoroz 5a7610d411 bump 2022-09-12 11:16:41 +09:00
vorotamoroz 4691ae1463 Fixed:
- Now we can detect hidden files changes and morethings again.
2022-09-12 11:03:28 +09:00
vorotamoroz 0923ac3d85 Bump 2022-09-11 14:22:24 +09:00
vorotamoroz ca100d6d9d Fixed:
- Fixed the issue about lock/unlock remote database while rebuilding in wizard
2022-09-11 14:21:02 +09:00
vorotamoroz bc373d4359 Bump 2022-09-11 10:38:38 +09:00
vorotamoroz 4038b683fe Documentated! 2022-09-11 10:38:20 +09:00
vorotamoroz 5e7b44d35a Wizard behaviour has been improved 2022-09-11 10:37:46 +09:00
vorotamoroz d04be6813b bump again. 2022-09-11 03:02:44 +09:00
vorotamoroz 8e578e2100 missed the stylesheet 2022-09-11 03:02:34 +09:00
vorotamoroz 55fcdfe18f Bump 2022-09-11 02:56:41 +09:00
vorotamoroz 66f2fea2f4 Remove outdated configuration items. 2022-09-11 02:51:17 +09:00
vorotamoroz beb7bf6fb9 Implemented
- Configuration wizard.
Fixed
- Remove outdated configuration items.
2022-09-11 02:50:51 +09:00
vorotamoroz 34791114e5 Fixed
- Fix file extension
- Remove GC.
- Remove obsoluted methods.
2022-09-11 02:46:29 +09:00
vorotamoroz de5cdf507d bump 2022-09-06 17:13:53 +09:00
vorotamoroz 83209f3923 Refactored:
- PouchDB handling moved into Common lib.
2022-09-06 17:11:43 +09:00
vorotamoroz b14ecdb205 Bump 2022-09-06 17:02:58 +09:00
vorotamoroz 21362adb5b Typos 2022-09-06 14:32:09 +09:00
vorotamoroz f8c1474700 Refactored 2022-09-06 13:42:12 +09:00
vorotamoroz b35052a485 bump 2022-09-05 16:55:35 +09:00
vorotamoroz c367d35e09 Target ES2018 2022-09-05 16:55:29 +09:00
vorotamoroz 2a5078cdbb bump 2022-09-05 16:54:06 +09:00
vorotamoroz 8112a07210 Implemented:
- Auto chunk size adjusting.
  Now our large files are processed more efficiently
- These configuration has been removed.

Improved
- Remote chunk retrieving logic has been speeded up.

Fixed
- Fixed process handling of boot sequence
2022-09-05 16:53:22 +09:00
vorotamoroz c9daa1b47d Fixed issue of importing configurations. 2022-09-04 01:16:29 +09:00
vorotamoroz 73ac93e8c5 bump 2022-09-04 01:08:09 +09:00
vorotamoroz 8d2b9eff37 Improved:
- New test items have been added to `Check database configuration`
2022-09-04 01:08:02 +09:00
vorotamoroz 0ee32a2147 bump 2022-09-03 16:44:51 +09:00
vorotamoroz ac3c78e198 Fixed
- Could not retrieve files if synchronisation has been interrupted or failed
2022-09-03 16:43:59 +09:00
vorotamoroz 0da1e3d9c8 bump 2022-08-30 15:24:38 +09:00
vorotamoroz 8f021a3c93 Improved:
- Use local chunks in preference to remote them if present.
2022-08-30 15:24:26 +09:00
vorotamoroz 6db0743096 Update release.yml 2022-08-29 16:50:53 +09:00
820 changed files with 107569 additions and 12684 deletions
+31
View File
@@ -0,0 +1,31 @@
# Git history
.git/
.gitignore
# Dependencies — re-installed inside Docker
node_modules/
src/apps/cli/node_modules/
# Pre-built CLI output — rebuilt inside Docker
src/apps/cli/dist/
# Obsidian plugin build outputs
main.js
main_org.js
pouchdb-browser.js
production/
# Test coverage and reports
coverage/
# Local environment / secrets
.env
*.env
.test.env
# local config files
*.local
# OS artefacts
.DS_Store
Thumbs.db
-3
View File
@@ -1,3 +0,0 @@
npm node_modules
build
.eslintrc.js.bak
+46 -6
View File
@@ -1,19 +1,59 @@
{ {
"root": true, "root": true,
"parser": "@typescript-eslint/parser", "parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"], "plugins": [
"extends": ["eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended"], "@typescript-eslint",
"eslint-plugin-svelte",
"eslint-plugin-import"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended"
],
"parserOptions": { "parserOptions": {
"sourceType": "module" "sourceType": "module",
"project": [
"tsconfig.json"
]
}, },
"ignorePatterns": [
"**/node_modules/*",
"**/jest.config.js",
"src/lib/coverage",
"src/lib/browsertest",
"**/test.ts",
"**/tests.ts",
"**/**test.ts",
"**/**.test.ts",
"src/apps/**",
"esbuild.*.mjs",
"terser.*.mjs"
],
"rules": { "rules": {
"no-unused-vars": "off", "no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": ["error", { "args": "none" }], "@typescript-eslint/no-unused-vars": [
"error",
{
"args": "none"
}
],
"no-unused-labels": "off",
"@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/ban-ts-comment": "off",
"no-prototype-builtins": "off", "no-prototype-builtins": "off",
"@typescript-eslint/no-empty-function": "off", "@typescript-eslint/no-empty-function": "off",
"require-await": "warn", "require-await": "warn",
"no-async-promise-executor": "off", "@typescript-eslint/require-await": "warn",
"@typescript-eslint/no-explicit-any": "off" "@typescript-eslint/no-misused-promises": "warn",
"@typescript-eslint/no-floating-promises": "warn",
"no-async-promise-executor": "warn",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-unnecessary-type-assertion": "error",
"no-constant-condition": [
"error",
{
"checkLoops": false
}
]
} }
} }
+1
View File
@@ -0,0 +1 @@
*.sh text eol=lf
+84
View File
@@ -0,0 +1,84 @@
---
name: Issue report
about: Create a report to help us improve
title: ''
labels: 'uncategorised'
assignees: ''
---
Thank you for taking the time to report this issue!
Before filling in this form, please read: [How to report an issue](../docs/to_issue_reporting.md).
Issues with sufficient information will be prioritised.
---
## Required
### Abstract
<!-- Briefly describe the problem in one or two sentences. -->
### Expected behaviour
<!-- What did you expect to happen? -->
### Actually happened
<!-- What actually happened? Include any error messages. -->
### Reproducing procedure
<!-- Step-by-step instructions to reproduce the issue. If you cannot reproduce it reliably, please describe the frequency and any signs you noticed. -->
### Obsidian debug info
Please provide debug info for **each device involved**. The primary device (where the issue occurred) is required; others are strongly recommended. If your issue involves synchronisation between devices, debug info from relevant devices is very helpful.
To get it: open the command palette → "Show debug info".
<details>
<summary>Device 1 (primary)</summary>
```
<!-- paste here -->
```
</details>
<details>
<summary>Device 2 (if applicable)</summary>
```
<!-- paste here -->
```
</details>
### LiveSync version
The hatch report (below) includes version information. If you cannot provide the report, please fill in the version here.
- Self-hosted LiveSync version: <!-- e.g. 0.23.0 — find it in Obsidian Settings → Community Plugins -->
### Report and Logs from LiveSync
Perform a `Generate full report for opening the issue with debug info` command and provide the generated report. This contains detailed information and recent 1000 log lines, which is very helpful for debugging. **PLEASE AMEND THE REPORT TO REMOVE ANY SENSITIVE INFORMATION BEFORE PASTING.**
If too large to paste here, upload to [Gist](https://gist.github.com/) and share the link.
<details>
<summary>Report and Logs (primary)</summary>
```
<!-- paste here or link to Gist -->
```
</details>
<details>
<summary>Report and Logs (if applicable)</summary>
```
<!-- paste here or link to Gist -->
```
</details>
---
## Optional
### Screenshots
If applicable, please add screenshots to help explain your problem.
### Other information, insights and intuition
Please provide any additional context or information about the problem.
+157
View File
@@ -0,0 +1,157 @@
name: cli-deno-tests
on:
push:
branches:
- main
- beta
paths:
- '.github/workflows/cli-deno-tests.yml'
- 'src/apps/cli/**'
- 'src/lib/src/API/processSetting.ts'
- 'package.json'
- 'package-lock.json'
pull_request:
paths:
- '.github/workflows/cli-deno-tests.yml'
- 'src/apps/cli/**'
- 'src/lib/src/API/processSetting.ts'
- 'package.json'
- 'package-lock.json'
workflow_dispatch:
inputs:
test_task:
description: 'Deno test task to run'
type: choice
options:
- test:ci
- test:p2p
- test:all
- test:local
- test:e2e-matrix
default: test:ci
enable_debug:
description: 'Enable verbose and debug logging'
type: boolean
default: false
use_coturn:
description: 'Enable local coturn container for P2P tests'
type: boolean
default: false
permissions:
contents: read
jobs:
prepare:
runs-on: ubuntu-latest
outputs:
task_matrix: ${{ steps.select.outputs.task_matrix }}
steps:
- name: Select task matrix
id: select
shell: bash
run: |
set -euo pipefail
SELECTED_TASK="${{ github.event_name == 'workflow_dispatch' && inputs.test_task || 'test:ci' }}"
echo "[INFO] Selected task set: $SELECTED_TASK"
case "$SELECTED_TASK" in
test:ci)
TASK_MATRIX='["test:setup-put-cat","test:mirror","test:daemon","test:push-pull","test:decoupled-vault","test:sync-two-local","test:sync-locked-remote","test:remote-commands","test:e2e-matrix:couchdb-enc0","test:e2e-matrix:couchdb-enc1","test:e2e-matrix:minio-enc0","test:e2e-matrix:minio-enc1"]'
;;
test:p2p)
TASK_MATRIX='["test:p2p-host","test:p2p-peers","test:p2p-sync","test:p2p-three-nodes","test:p2p-upload-download"]'
;;
test:all)
TASK_MATRIX='["test:setup-put-cat","test:mirror","test:daemon","test:push-pull","test:decoupled-vault","test:sync-two-local","test:sync-locked-remote","test:remote-commands","test:p2p-host","test:p2p-peers","test:p2p-sync","test:p2p-three-nodes","test:p2p-upload-download","test:e2e-matrix:couchdb-enc0","test:e2e-matrix:couchdb-enc1","test:e2e-matrix:minio-enc0","test:e2e-matrix:minio-enc1"]'
;;
test:local)
TASK_MATRIX='["test:setup-put-cat","test:mirror","test:daemon"]'
;;
test:e2e-matrix)
TASK_MATRIX='["test:e2e-matrix:couchdb-enc0","test:e2e-matrix:couchdb-enc1","test:e2e-matrix:minio-enc0","test:e2e-matrix:minio-enc1"]'
;;
*)
echo "[ERROR] Unknown task set: $SELECTED_TASK" >&2
exit 1
;;
esac
echo "task_matrix=$TASK_MATRIX" >> "$GITHUB_OUTPUT"
test:
needs: prepare
runs-on: ubuntu-latest
timeout-minutes: 60
env:
DENO_DIR: ~/.cache/deno
strategy:
fail-fast: false
matrix:
task: ${{ fromJson(needs.prepare.outputs.task_matrix) }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24.x'
cache: 'npm'
cache-dependency-path: package-lock.json
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
- name: Cache Deno dependencies
uses: actions/cache@v4
with:
path: ~/.cache/deno
key: ${{ runner.os }}-deno-${{ hashFiles('src/apps/cli/testdeno/deno.lock', 'src/apps/cli/testdeno/deno.json') }}
restore-keys: |
${{ runner.os }}-deno-
- name: Install dependencies
run: npm ci
- name: Build CLI
working-directory: src/apps/cli
run: npm run build
- name: Create .test.env
working-directory: src/apps/cli
run: |
cat <<EOF > .test.env
hostname=http://127.0.0.1:5989/
dbname=livesync-test-db-ci
username=admin
password=testpassword
minioEndpoint=http://127.0.0.1:9000
accessKey=minioadmin
secretKey=minioadmin
bucketName=livesync-test-bucket-ci
EOF
- name: Run Deno tests
working-directory: src/apps/cli/testdeno
env:
LIVESYNC_DOCKER_MODE: native
LIVESYNC_CLI_RETRY: 3
LIVESYNC_CLI_DEBUG: ${{ inputs.enable_debug == true && '1' || '0' }}
LIVESYNC_CLI_VERBOSE: ${{ inputs.enable_debug == true && '1' || '0' }}
LIVESYNC_USE_COTURN: ${{ inputs.use_coturn == true && '1' || '0' }}
run: |
TASK="${{ matrix.task }}"
echo "[INFO] Running Deno task: $TASK"
deno task "$TASK"
- name: Stop leftover containers
if: always()
run: |
docker stop couchdb-test minio-test relay-test coturn-test >/dev/null 2>&1 || true
docker rm couchdb-test minio-test relay-test coturn-test >/dev/null 2>&1 || true
+101
View File
@@ -0,0 +1,101 @@
# Build and push the CLI Docker image to GitHub Container Registry (GHCR).#
# Image tag format: <manifest-version>-<unix-epoch>-cli
# Example: 0.25.56-1743500000-cli
#
# The image is also tagged 'latest' for convenience.
# Image name: ghcr.io/<owner>/livesync-cli
name: Build and Push CLI Docker Image
on:
push:
tags:
- "*.*.*-cli"
workflow_dispatch:
inputs:
dry_run:
description: Build only (do not push image to GHCR)
required: false
type: boolean
default: true
force:
description: Continue to build/push even if CLI E2E fails (workflow_dispatch only)
required: false
type: boolean
default: false
jobs:
build-and-push:
runs-on: ubuntu-latest
timeout-minutes: 90
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Derive image tag
id: meta
run: |
VERSION=$(jq -r '.version' manifest.json)
EPOCH=$(date +%s)
TAG="${VERSION}-${EPOCH}-cli"
IMAGE="ghcr.io/${{ github.repository_owner }}/livesync-cli"
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "image=${IMAGE}" >> $GITHUB_OUTPUT
echo "full=${IMAGE}:${TAG}" >> $GITHUB_OUTPUT
echo "version=${IMAGE}:${VERSION}-cli" >> $GITHUB_OUTPUT
echo "latest=${IMAGE}:latest" >> $GITHUB_OUTPUT
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "24.x"
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Run CLI E2E (docker)
id: e2e
continue-on-error: ${{ github.event_name == 'workflow_dispatch' && inputs.force }}
working-directory: src/apps/cli
env:
CI: true
run: npm run test:e2e:docker:all
- name: Stop test containers (safety net)
if: always()
working-directory: src/apps/cli
run: |
# Keep this as a safety net for future suites/steps that may leave containers running.
bash ./util/couchdb-stop.sh >/dev/null 2>&1 || true
bash ./util/minio-stop.sh >/dev/null 2>&1 || true
bash ./util/p2p-stop.sh >/dev/null 2>&1 || true
- name: Build and push
if: ${{ steps.e2e.outcome == 'success' || (github.event_name == 'workflow_dispatch' && inputs.force) }}
uses: docker/build-push-action@v6
with:
context: .
file: src/apps/cli/Dockerfile
push: ${{ !(github.event_name == 'workflow_dispatch' && inputs.dry_run) }}
tags: |
${{ steps.meta.outputs.full }}
${{ steps.meta.outputs.version }}
${{ steps.meta.outputs.latest }}
cache-from: type=gha
cache-to: type=gha,mode=max
+67
View File
@@ -0,0 +1,67 @@
# Run CLI E2E tests
name: cli-e2e
on:
workflow_dispatch:
inputs:
suite:
description: 'CLI E2E suite to run'
type: choice
options:
- two-vaults-matrix
- two-vaults-couchdb
- two-vaults-minio
default: two-vaults-matrix
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24.x'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run CLI E2E suite
working-directory: src/apps/cli
env:
CI: true
TEST_SUITE: ${{ github.event_name == 'workflow_dispatch' && inputs.suite || 'two-vaults-matrix' }}
run: |
set -euo pipefail
echo "[INFO] Running CLI E2E suite: $TEST_SUITE"
case "$TEST_SUITE" in
two-vaults-matrix)
npm run test:e2e:two-vaults:matrix
;;
two-vaults-couchdb)
REMOTE_TYPE=COUCHDB ENCRYPT=0 npm run test:e2e:two-vaults
;;
two-vaults-minio)
REMOTE_TYPE=MINIO ENCRYPT=0 npm run test:e2e:two-vaults
;;
*)
echo "[ERROR] Unknown suite: $TEST_SUITE" >&2
exit 1
;;
esac
- name: Stop test containers
if: always()
working-directory: src/apps/cli
run: |
bash ./util/couchdb-stop.sh >/dev/null 2>&1 || true
bash ./util/minio-stop.sh >/dev/null 2>&1 || true
+68
View File
@@ -0,0 +1,68 @@
# Run tests by Harnessed CI
name: harness-ci
on:
workflow_dispatch:
inputs:
testsuite:
description: 'Run specific test suite (leave empty to run all)'
type: choice
options:
- ''
- 'suite/'
- 'suitep2p/'
default: ''
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24.x'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Install test dependencies (Playwright Chromium)
run: npm run test:install-dependencies
- name: Start test services (CouchDB)
run: npm run test:docker-couchdb:start
if: ${{ inputs.testsuite == '' || inputs.testsuite == 'suite/' }}
- name: Start test services (MinIO)
run: npm run test:docker-s3:start
if: ${{ inputs.testsuite == '' || inputs.testsuite == 'suite/' }}
- name: Start test services (Nostr Relay + WebPeer)
run: npm run test:docker-p2p:start
if: ${{ inputs.testsuite == '' || inputs.testsuite == 'suitep2p/' }}
- name: Run tests suite
if: ${{ inputs.testsuite == '' || inputs.testsuite == 'suite/' }}
env:
CI: true
run: npm run test suite/
- name: Run P2P tests suite
if: ${{ inputs.testsuite == '' || inputs.testsuite == 'suitep2p/' }}
env:
CI: true
run: npm run test:p2p
- name: Stop test services (CouchDB)
run: npm run test:docker-couchdb:stop
if: ${{ inputs.testsuite == '' || inputs.testsuite == 'suite/' }}
- name: Stop test services (MinIO)
run: npm run test:docker-s3:stop
if: ${{ inputs.testsuite == '' || inputs.testsuite == 'suite/' }}
- name: Stop test services (Nostr Relay + WebPeer)
run: npm run test:docker-p2p:stop
if: ${{ inputs.testsuite == '' || inputs.testsuite == 'suitep2p/' }}
+25 -59
View File
@@ -9,86 +9,52 @@ on:
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
contents: write
id-token: write
attestations: write
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
with: with:
fetch-depth: 0 # otherwise, you will failed to push refs to dest repo fetch-depth: 0 # otherwise, you will failed to push refs to dest repo
submodules: recursive submodules: recursive
- name: Use Node.js - name: Use Node.js
uses: actions/setup-node@v1 uses: actions/setup-node@v4
with: with:
node-version: '14.x' # You might need to adjust this value to your own version node-version: '24.x' # You might need to adjust this value to your own version
# Get the version number and put it in a variable # Get the version number and put it in a variable
- name: Get Version - name: Get Version
id: version id: version
run: | run: |
echo "::set-output name=tag::$(git describe --abbrev=0)" echo "tag=$(git describe --abbrev=0 --tags)" >> $GITHUB_OUTPUT
# Build the plugin # Build the plugin
- name: Build - name: Build
id: build id: build
run: | run: |
npm ci npm ci
npm run build --if-present npm run build --if-present
# Attest
- name: Attest Plugin Artifacts
uses: actions/attest-build-provenance@v4
with:
subject-path: |
main.js
manifest.json
styles.css
# Package the required files into a zip # Package the required files into a zip
- name: Package - name: Package
run: | run: |
mkdir ${{ github.event.repository.name }} mkdir ${{ github.event.repository.name }}
cp main.js manifest.json styles.css README.md ${{ github.event.repository.name }} cp main.js manifest.json styles.css README.md ${{ github.event.repository.name }}
zip -r ${{ github.event.repository.name }}.zip ${{ github.event.repository.name }} zip -r ${{ github.event.repository.name }}.zip ${{ github.event.repository.name }}
# Create the release on github - name: Create Release and Upload Assets
- name: Create Release uses: softprops/action-gh-release@v2
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION: ${{ github.ref }}
with: with:
tag_name: ${{ github.ref }} files: |
release_name: ${{ github.ref }} ${{ github.event.repository.name }}.zip
main.js
manifest.json
styles.css
name: ${{ steps.version.outputs.tag }}
tag_name: ${{ steps.version.outputs.tag }}
draft: true draft: true
prerelease: false
# Upload the packaged release file
- name: Upload zip file
id: upload-zip
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./${{ github.event.repository.name }}.zip
asset_name: ${{ github.event.repository.name }}-${{ steps.version.outputs.tag }}.zip
asset_content_type: application/zip
# Upload the main.js
- name: Upload main.js
id: upload-main
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./main.js
asset_name: main.js
asset_content_type: text/javascript
# Upload the manifest.json
- name: Upload manifest.json
id: upload-manifest
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./manifest.json
asset_name: manifest.json
asset_content_type: application/json
# Upload the style.css
- name: Upload styles.css
id: upload-css
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./styles.css
asset_name: styles.css
asset_content_type: text/css
# TODO: release notes???
+68
View File
@@ -0,0 +1,68 @@
# Run Unit test without Harnesses
name: unit-ci
on:
workflow_dispatch:
push:
branches:
- main
- beta
paths:
- 'src/**'
- 'test/**'
- 'package.json'
- 'package-lock.json'
- 'tsconfig.json'
- 'vite.config.ts'
- 'vitest.config*.ts'
- 'esbuild.config.mjs'
- 'eslint.config.mjs'
- '.github/workflows/unit-ci.yml'
pull_request:
paths:
- 'src/**'
- 'test/**'
- 'package.json'
- 'package-lock.json'
- 'tsconfig.json'
- 'vite.config.ts'
- 'vitest.config*.ts'
- 'esbuild.config.mjs'
- 'eslint.config.mjs'
- '.github/workflows/unit-ci.yml'
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24.x'
cache: 'npm'
- name: Install dependencies
run: npm ci
# unit tests do not require Playwright, so we can skip installing its dependencies to save time
# - name: Install test dependencies (Playwright Chromium)
# run: npm run test:install-dependencies
- name: Run unit tests suite with coverage
run: npm run test:unit:coverage
- name: Upload coverage report
if: always()
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage/**
+20
View File
@@ -8,7 +8,27 @@ package-lock.json
# build # build
main.js main.js
main_org.js
main_org_*.js
*.js.map *.js.map
meta.json
meta-*.json
# obsidian # obsidian
data.json data.json
.vscode
# environment variables
.env
# local config files
*.local
cov_profile/**
coverage
src/apps/cli/dist/*
_testdata/**
utils/bench/splitResults.csv
.eslintcache
+2
View File
@@ -0,0 +1,2 @@
pouchdb-browser.js
main_org.js
+20
View File
@@ -0,0 +1,20 @@
import { readFileSync } from "fs";
let localPrettierConfig = {};
try {
const localConfig = readFileSync(".prettierrc.local", "utf-8");
localPrettierConfig = JSON.parse(localConfig);
console.log("Using local Prettier config from .prettierrc.local");
} catch (e) {
// no local config
}
const prettierConfig = {
trailingComma: "es5",
tabWidth: 4,
printWidth: 120,
semi: true,
endOfLine: "lf",
...localPrettierConfig,
};
export default prettierConfig;
+11
View File
@@ -0,0 +1,11 @@
hostname=http://localhost:5989/
dbname=livesync-test-db2
minioEndpoint=http://127.0.0.1:9000
username=admin
password=testpassword
accessKey=minioadmin
secretKey=minioadmin
bucketName=livesync-test-bucket
# ENABLE_DEBUGGER=true
# PRINT_LIVESYNC_LOGS=true
# ENABLE_UI=true
+68
View File
@@ -0,0 +1,68 @@
# AI Coding Assistant Instructions (AGENTS.md)
When working on this repository (writing code, comments, documentation, or commits), you MUST follow these guidelines to maintain consistency.
## Required Reference Files
Before making changes to documentation, user-facing text, or settings:
1. Read [docs/terms.md](file:///Users/vorotamoroz/dev/js/obsidian-livesync/docs/terms.md) for terminology, vocabulary conventions, and technical definitions.
2. Read [docs/settings.md](file:///Users/vorotamoroz/dev/js/obsidian-livesync/docs/settings.md) (and [docs/settings_ja.md](file:///Users/vorotamoroz/dev/js/obsidian-livesync/docs/settings_ja.md)) for UI settings and setting key mappings.
3. Read [docs/troubleshooting.md](file:///Users/vorotamoroz/dev/js/obsidian-livesync/docs/troubleshooting.md) for troubleshooting guidelines and common recovery steps (such as flag files and SCRAM state).
4. Read [devs.md](file:///Users/vorotamoroz/dev/js/obsidian-livesync/devs.md) for development workflows, module architecture, and testing infrastructure.
---
## Documentation and User-Facing Text Rules
Always adhere to the following stylistic and spelling rules:
1. **British English Spelling**:
- Write all documentation and user-facing messages in British English. If in doubt, the BBC News Styleguide may be useful as a reference.
- **Traditional Spelling (Trad-spelling)**: Use `-ise` and `-isation` suffixes instead of `-ize` and `-ization` (for example: 'initialisation', 'synchronisation', and 'organisation').
- **Oxford Comma**: Use the serial (Oxford) comma to separate items in lists of three or more (for example: 'settings, snippets, and themes' instead of 'settings, snippets and themes').
- **Logical Punctuation**: Place punctuation marks (such as commas and full stops) outside quotation marks unless they are part of the quoted text itself (for example: write 'dialogue', not 'dialogue,').
2. **No Contractions**:
- Do not use contractions in general text or documentation (for example: write "do not" instead of "don't", "cannot" instead of "can't", and "is not" instead of "isn't").
3. **Quotation Style**:
- Prefer single quotation marks (`'`) over double quotation marks (`"`) in general documentation text, unless the context requires double quotes (for example, inside JSON code blocks).
4. **Specific Terminology and Spelling**:
- Use **'dialogue'** in documentation, user-facing messages, and general text. Use **'dialog'** only inside source code (e.g. class names, methods).
- Use the hyphenated form **'plug-in'** in user-facing text. Use **'plugin'** only in codebase files, configuration settings, or technical contexts.
5. **User Communication Language**:
- Always reply to the user in the language in which they asked the question.
---
## Technical & Architecture Rules
1. **Database Structure**:
- Remember that Self-hosted LiveSync splits files into **Metadata** (file properties, size, paths) and **Chunks** (actual content). Do not store raw content in the metadata document directly.
2. **Setup and Recovery**:
- **Fast Setup (Simple Fetch)** is the preferred flow for initial replication on secondary devices. It utilises stream-based replication for high speed and delays local file reflection to suppress temporary synchronisation warnings.
- **Flag files** (such as `redflag.md`, `redflag2.md`, and `redflag3.md`) at the root of the vault control the boot-up sequence and trigger automated fetch/rebuild tasks.
3. **Subrepositories**:
- The directory [src/lib](file:///Users/vorotamoroz/dev/js/obsidian-livesync/src/lib) is a subrepository (Git submodule) pointing to the shared library `livesync-commonlib`. Do not make modifications inside this directory without careful consideration, as changes affect the shared library.
4. **Application Directories**:
- The directory [src/apps](file:///Users/vorotamoroz/dev/js/obsidian-livesync/src/apps) contains independent application modules:
- `cli`: A Command Line Interface application. Tests specifically for the CLI (both unit and End-to-End tests) are located and executed within [src/apps/cli](file:///Users/vorotamoroz/dev/js/obsidian-livesync/src/apps/cli) using its local `package.json` scripts.
- `webapp`: A Web-based application.
- `webpeer`: A Web-based peer utility.
---
## Development & Verification Commands
Before submitting code, you should run verification scripts locally to ensure correct syntax and function.
1. **Lint and Type Checking**:
- Run `npm run check` to perform code verification. This runs type-checking (`tsc-check`), ESLint (`lint`), and Svelte checks (`svelte-check`).
2. **Unit Tests**:
- Run `npm run test:unit` to execute fast local unit tests.
- Run `npm run test` or `npm run test:full` for full testing suites (including dockerised services).
3. **Build**:
- Run `npm run build` to compile the production bundle (`main.js`).
- Run `npm run dev` for the development watch/build task.
+76 -99
View File
@@ -1,129 +1,106 @@
# Self-hosted LiveSync # Self-hosted LiveSync
[Japanese docs](./README_ja.md) - [Chinese docs](./README_cn.md).
[Japanese docs](./README_ja.md) [Chinese docs](./README_cn.md).
Self-hosted LiveSync is a community implemented synchronization plugin. Self-hosted LiveSync is a community-developed synchronisation plug-in available on all Obsidian-compatible platforms. It leverages robust server solutions such as CouchDB or object storage systems (e.g., MinIO, S3, R2, etc.) to ensure reliable data synchronisation.
A self-hosted or purchased CouchDB acts as the intermediate server. Available on every obsidian-compatible platform.
Note: It has no compatibility with the official "Obsidian Sync". Additionally, it supports peer-to-peer synchronisation using WebRTC, enabling you to synchronise your notes directly between devices without relying on a server. Documentation is available for [Peer-to-Peer Synchronisation](./docs/p2p_sync_updates_2026.md).
![obsidian_live_sync_demo](https://user-images.githubusercontent.com/45774780/137355323-f57a8b09-abf2-4501-836c-8cb7d2ff24a3.gif) ![obsidian_live_sync_demo](https://user-images.githubusercontent.com/45774780/137355323-f57a8b09-abf2-4501-836c-8cb7d2ff24a3.gif)
Before installing or upgrading LiveSync, please back your vault up. >[!IMPORTANT]
> This plug-in is not compatible with the official "Obsidian Sync" and cannot synchronise with it.
## Features ## Features
- Synchronise vaults efficiently with minimal traffic.
- Handle conflicting modifications effectively.
- Automatically merge simple conflicts.
- Use open-source solutions for the server.
- Compatible solutions are supported.
- Support end-to-end encryption.
- Synchronise settings, snippets, themes, and plug-ins via [Customisation Sync (Beta)](docs/settings.md#6-customization-sync-advanced) or [Hidden File Sync](docs/settings.md#7-hidden-files-advanced).
- Enable WebRTC peer-to-peer synchronisation without requiring a `host` (Experimental).
- This feature is still in the experimental stage. Please exercise caution when using it.
- WebRTC is a peer-to-peer synchronisation method, so **at least one device must be online to synchronise**.
- Instead of keeping your device online as a stable peer, you can use two pseudo-peers:
- [livesync-serverpeer](https://github.com/vrtmrz/livesync-serverpeer): A pseudo-client running on the server for receiving and sending data between devices.
- [webpeer](https://github.com/vrtmrz/obsidian-livesync/tree/main/src/apps/webpeer): A pseudo-client for receiving and sending data between devices.
- A pre-built instance is available at [fancy-syncing.vrtmrz.net/webpeer](https://fancy-syncing.vrtmrz.net/webpeer/) (hosted on the vrtmrz's blog site). This is also peer-to-peer. Feel free to use it.
- For more information, refer to the [English explanatory article](https://fancy-syncing.vrtmrz.net/blog/0034-p2p-sync-en.html) or the [Japanese explanatory article](https://fancy-syncing.vrtmrz.net/blog/0034-p2p-sync).
- Visual conflict resolver included. This plug-in may be particularly useful for researchers, engineers, and developers who need to keep their notes fully self-hosted for security reasons. It is also suitable for anyone seeking the peace of mind that comes with knowing their notes remain entirely private.
- Bidirectional synchronization between devices nearly in real-time
- You can use CouchDB or its compatibles like IBM Cloudant.
- End-to-End encryption supported.
- Plugin synchronization(Beta)
- Receive WebClip from [obsidian-livesync-webclip](https://chrome.google.com/webstore/detail/obsidian-livesync-webclip/jfpaflmpckblieefkegjncjoceapakdf) (End-to-End encryption will not be applicable.)
Useful for researchers, engineers and developers with a need to keep their notes fully self-hosted for security reasons. Or just anyone who would like the peace of mind knowing that their notes are fully private. >[!IMPORTANT]
> - Before installing or upgrading this plug-in, please back up your vault.
> - Do not enable this plug-in alongside another synchronisation solution (including iCloud and Obsidian Sync).
> - For backups, we also provide a plug-in called [Differential ZIP Backup](https://github.com/vrtmrz/diffzip).
## IMPORTANT NOTICE ## How to Use
- Do not use in conjunction with another synchronization solution (including iCloud, Obsidian Sync). Before enabling this plugin, make sure to disable all the other synchronization methods to avoid content corruption or duplication. If you want to synchronize to two or more services, do them one by one and never enable two synchronization methods at the same time. ### 3-minute setup - CouchDB on fly.io
This includes not putting your vault inside a cloud-synchronized folder (eg. an iCloud folder or Dropbox folder)
- This is a synchronization plugin. Not a backup solutions. Do not rely on this for backup.
- If the device's storage runs out, database corruption may happen.
- Hidden files or any other invisible files wouldn't be kept in the database, thus won't be synchronized. (**and may also get deleted**)
## How to use **Recommended for beginners**
### Get your database ready. [![LiveSync Setup onto Fly.io SpeedRun 2024 using Google Colab](https://img.youtube.com/vi/7sa_I1832Xc/0.jpg)](https://www.youtube.com/watch?v=7sa_I1832Xc)
First, get your database ready. IBM Cloudant is preferred for testing. Or you can use your own server with CouchDB. For more information, refer below: 1. [Set up CouchDB on fly.io](docs/setup_flyio.md)
1. [Setup IBM Cloudant](docs/setup_cloudant.md) 2. Configure plug-in in [Quick Setup](docs/quick_setup.md)
2. [Setup your CouchDB](docs/setup_own_server.md)
Note: More information about alternative hosting methods needed! Currently, [using fly.io](https://github.com/vrtmrz/obsidian-livesync/discussions/85) is being discussed. ### Manual Setup
### First device 1. Set up the server
1. [Set up CouchDB on fly.io](docs/setup_flyio.md)
2. [Set up your CouchDB](docs/setup_own_server.md)
2. Configure plug-in in [Quick Setup](docs/quick_setup.md)
> [!TIP]
> Fly.io is no longer free. Fortunately, we can still use IBM Cloudant despite some limitations. Refer to [Set up IBM Cloudant](docs/setup_cloudant.md).
> We can also use peer-to-peer synchronisation without a server. Alternatively, cheap object storage like Cloudflare R2 can be used for free.
> However, most importantly, we can use a server that we trust. Therefore, please set up your own server.
> CouchDB can also be run on a Raspberry Pi (please be mindful of your server's security).
1. Install the plugin on your device.
2. Configure remote database infomation.
1. Fill your server's information into the `Remote Database configuration` pane.
2. Enabling `End to End Encryption` is recommended. After entering a passphrase, click `Apply`.
3. Click `Test Database Connection` and make sure that the plugin says `Connected to (your-database-name)`.
4. Click `Check database configuration` and make sure all tests have passed.
3. Configure when should the synchronization happen in `Sync Settings` tab. (You can also leave them for later)
1. If you want to synchronize in real-time, enable `LiveSync`.
2. Or, set up the synchronization as you like. By default, none of the settings are enabled, meaning you would need to manually trigger the synchronization process.
3. Additional configurations are also here. I recommend enabling `Use Trash for deleted files`, but you can also leave all configurations as-is.
4. Configure miscellaneous features.
1. Enabling `Show staus inside editor` shows status at the top-right corner of the editor while in editing mode. (Recommended)
5. Go back to the editor. Wait for the initial scan to complete.
6. When the status no longer changes and shows a ⏹️ for COMPLETED (No ⏳ and 🧩 icons), you are ready to synchronize with the server.
7. Press the replicate icon on the Ribbon or run `Replicate now` from the command palette. This will send all your data to the server.
8. Open command palette, run `Copy setup URI`, and set a passphrase. This will export your configuration to clipboard as a link for you to import into your other devices.
**IMPORTANT: BE CAREFUL NOT TO SHARE THIS LINK. THE URI CONTAINS ALL YOUR CREDENTIALS.** (even though nobody could read them without the passphrase) ## Information in the Status Bar
### Subsequent Devices Synchronisation status is shown in the status bar with the following icons.
Note: If we are going to synchronize with a non-empty vault, the modification dates and times of the files must match between them. Otherwise, extra transfers may occur or files may become corrupted.
For simplicity, we strongly recommend that we sync to an empty vault.
1. Install the plug-in.
2. Open the link that you have exported from the first device.
3. The plug-in will ask you whether you are sure to apply the configurations. Answer `Yes`, then follow these instructions:
1. Answer `Yes` to `Keep local DB?`.
*Note: If you start with an existing vault, you have to answer `No` to this question and also answer `No` to `Rebuild the database?`.*
2. Answer `Yes` to `Keep remote DB?`.
3. Answer `Yes` to `Replicate once?`.
Then, all your settings should be successfully imported from the first device.
4. Your notes should get synchronized soon.
## Something looks corrupted...
Please open the configuration link again and Answer as below:
- If your local database looks corrupted (in other words, when your Obsidian getting weird even standalone.)
- Answer `No` to `Keep local DB?`
- If your remote database looks corrupted (in other words, when something happens while replicating)
- Answer `No` to `Keep remote DB?`
If you answered `No` to both, your databases will be rebuilt by the content on your device. And the remote database will lock out other devices. You have to synchronize all your devices again. (When this time, almost all your files should be synchronized with a timestamp. So you can use a existed vault).
## Test Server
Setting up an instance of Cloudant or local CouchDB is a little complicated, so I set up a [Tasting server for self-hosted-livesync](https://olstaste.vrtmrz.net/). Try it out for free!
Note: Please read "Limitations" carefully. Do not send your private vault.
## Information in StatusBar
Synchronization status is shown in statusbar.
- Activity Indicator
- 📲 Network request
- Status - Status
- ⏹️ Stopped - ⏹️ Stopped
- 💤 LiveSync enabled. Waiting for changes. - 💤 LiveSync enabled. Waiting for changes
- ⚡️ Synchronization in progress. - ⚡️ Synchronisation in progress
- ⚠ An error occurred. - ⚠ An error occurred
- ↑ Uploaded chunks and metadata - Statistical Indicators
- ↓ Downloaded chunks and metadata - ↑ Uploaded chunks and metadata
- ⏳ Number of pending processes - ↓ Downloaded chunks and metadata
- 🧩 Number of files waiting for their chunks. - Progress Indicators
If you have deleted or renamed files, please wait until ⏳ icon disappeared. - 📥 Unprocessed transferred items
- 📄 Working database operation
- 💾 Working write storage processes
- ⏳ Working read storage processes
- 🛫 Pending read storage processes
- 📬 Batched read storage processes
- ⚙️ Working or pending storage processes for hidden files
- 🧩 Waiting chunks
- 🔌 Working customisation items (configuration, snippets, and plug-ins)
To prevent file and database corruption, please avoid closing Obsidian until all progress indicators have disappeared as much as possible (although the plug-in will attempt to resume if interrupted). This is especially important if you have deleted or renamed files.
## Hints ## Tips and Troubleshooting
- If a folder becomes empty after a replication, it will be deleted by default. But you can toggle this behaviour. Check the [Settings](docs/settings.md). - If you want a faster and simpler initial replication when setting up subsequent devices, see the [Fast Setup Guide](docs/tips/fast-setup.md).
- LiveSync mode drains more batteries in mobile devices. Periodic sync with some automatic sync is recommended. - If you are having problems getting the plug-in working, see [Tips and Troubleshooting](docs/troubleshooting.md).
- Mobile Obsidian can not connect to a non-secure (HTTP) or a locally-signed servers, even if the root certificate is installed on the device.
- There are no 'exclude_folders' like configurations.
- While synchronizing, files are compared by their modification time and the older ones will be overwritten by the newer ones. Then plugin checks for conflicts and if a merge is needed, a dialog will open.
- Rarely, a file in the database could be corrupted. The plugin will not write to local storage when a file looks corrupted. If a local version of the file is on your device, the corruption could be fixed by editing the local file and synchronizing it. But if the file does not exist on any of your devices, then it can not be rescued. In this case you can delete these items from the settings dialog.
- If your database looks corrupted, try "Drop History". Usually, It is the easiest way.
- To stop the bootup sequence (eg. for fixing problems on databases), you can put a `redflag.md` file at the root of your vault.
- Q: Database is growing, how can I shrink it down?
A: each of the docs is saved with their past 100 revisions for detecting and resolving conflicts. Picturing that one device has been offline for a while, and comes online again. The device has to compare its notes with the remotely saved ones. If there exists a historic revision in which the note used to be identical, it could be updated safely (like git fast-forward). Even if that is not in revision histories, we only have to check the differences after the revision that both devices commonly have. This is like git's conflict resolving method. So, We have to make the database again like an enlarged git repo if you want to solve the root of the problem.
- And more technical Information are in the [Technical Information](docs/tech_info.md)
- If you want to synchronize files without obsidian, you can use [filesystem-livesync](https://github.com/vrtmrz/filesystem-livesync).
- WebClipper is also available on Chrome Web Store:[obsidian-livesync-webclip](https://chrome.google.com/webstore/detail/obsidian-livesync-webclip/jfpaflmpckblieefkegjncjoceapakdf)
Repo is here: [obsidian-livesync-webclip](https://github.com/vrtmrz/obsidian-livesync-webclip). (Docs are work in progress.) ## Acknowledgements
The project has been in continual progress and harmony thanks to the following:
- Many [Contributors](https://github.com/vrtmrz/obsidian-livesync/graphs/contributors).
- Many [GitHub Sponsors](https://github.com/sponsors/vrtmrz#sponsors).
- JetBrains Community Programs / Support for Open-Source Projects. <img src="https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.png" alt="JetBrains logo" height="24">
May those who have contributed be honoured and remembered for their kindness and generosity.
## Development Guide
Please refer to the [Development Guide](devs.md) for development setup, testing infrastructure, code conventions, and more.
## License ## License
The source code is licensed under the MIT License. Licensed under the MIT License.
+74 -97
View File
@@ -1,9 +1,12 @@
# Self-hosted LiveSync # Self-hosted LiveSync
Self-hosted LiveSync (自搭建在线同步) 是一个社区实现的在线同步插件。 Self-hosted LiveSync (自搭建在线同步) 是一个社区实现的在线同步插件。
使用一个自搭建的或者购买的 CouchDB 作为中转服务器。兼容所有支持 Obsidian 的平台。 它利用诸如CouchDB或对象存储系统(例如MinIO、S3、R2等)等强大的服务器解决方案,以确保数据同步的可靠性。。兼容所有支持 Obsidian 的平台。
注意: 本插件与官方的 "Obsidian Sync" 服务不兼容 此外,它现在支持使用WebRTC进行点对点同步(实验性功能),使您无需依赖服务器即可直接在设备之间同步笔记
>[!IMPORTANT]
>本插件与官方的 "Obsidian Sync" 服务不兼容。
![obsidian_live_sync_demo](https://user-images.githubusercontent.com/45774780/137355323-f57a8b09-abf2-4501-836c-8cb7d2ff24a3.gif) ![obsidian_live_sync_demo](https://user-images.githubusercontent.com/45774780/137355323-f57a8b09-abf2-4501-836c-8cb7d2ff24a3.gif)
@@ -11,120 +14,94 @@ Self-hosted LiveSync (自搭建在线同步) 是一个社区实现的在线同
## 功能 ## 功能
- 可视化的冲突解决器 - 以最少流量高效同步vault
- 接近实时的多设备双向同步 - 有效处理冲突的修改。
- 可使用 CouchDB 以及兼容的服务,如 IBM Cloudant - 自动合并简单冲突。
- 支持端到端加密 - 服务端使用开源的解决方案
- 插件同步 (Beta) - 支持兼容的解决方案。
- 从 [obsidian-livesync-webclip](https://chrome.google.com/webstore/detail/obsidian-livesync-webclip/jfpaflmpckblieefkegjncjoceapakdf) 接收 WebClip (本功能不适用端到端加密) - 支持端到端加密
- 同步设置、代码片段、主题和插件,通过 [Customisation Sync (Beta)](docs/settings.md#6-customization-sync-advanced) 或者 [Hidden File Sync](docs/settings.md#7-hidden-files-advanced).
- 启用 WebRTC 点对点同步,无需指定 `host`(实验性)。
- 此功能仍处于试验阶段。请在使用时务必谨慎。
- WebRTC 是一种点对点同步方法,因此**至少有一台设备必须在线才能进行同步**。
- 与其让您的设备作为稳定的对等节点保持在线,您可以使用两个 pseudo-peers:
- [livesync-serverpeer](https://github.com/vrtmrz/livesync-serverpeer): 在服务器上运行的 pseudo-client 用于在设备之间接收和发送数据。
- [webpeer](https://github.com/vrtmrz/livesync-commonlib/tree/main/apps/webpeer): 用于在设备之间接收和发送数据的pseudo-client。
- 一个预构建的实例现已上线,地址为 [fancy-syncing.vrtmrz.net/webpeer](https://fancy-syncing.vrtmrz.net/webpeer/) (托管于vrtmrz博客网站). 这也是一个点对点的实例。可自由使用。
- 欲了解更多信息,请参阅[英文说明文章](https://fancy-syncing.vrtmrz.net/blog/0034-p2p-sync-en.html)或[日文说明文章](https://fancy-syncing.vrtmrz.net/blog/0034-p2p-sync)。
适用于出于安全原因需要将笔记完全自托管的研究人员、工程师或开发人员,以及任何喜欢笔记完全私密所带来的安全感的人。 此插件适用于出于安全原因需要将笔记完全自托管的研究人员、工程师或开发人员,以及任何喜欢笔记完全私密所带来的安全感的人。
## 重要提醒 >[!IMPORTANT]
> - 在安装或升级此插件之前,请务必备份您的保险库。
- 请勿与其同步解决方案(包括 iCloudObsidian Sync一起使用。在启用此插件之前,请确保禁用所有其他同步方法以避免内容损坏或重复。如果要同步到多个服务,请一一进行,切勿同时启用两种同步方法 > - 请勿同时启用此插件与其同步方案(包括iCloudObsidian Sync)。
这包括不能将您的保管库放在云同步文件夹中(例如 iCloud 文件夹或 Dropbox 文件夹) > - 对于备份,我们还提供了一款名为[Differential ZIP Backup](https://github.com/vrtmrz/diffzip)的插件。
- 这是一个同步插件,不是备份解决方案。不要依赖它进行备份。
- 如果设备的存储空间耗尽,可能会发生数据库损坏。
- 隐藏文件或任何其他不可见文件不会保存在数据库中,因此不会被同步。(**并且可能会被删除**)
## 如何使用 ## 如何使用
### 准备好你的数据库 ### 3分钟搞定——在fly.io上部署CouchDB
首先,准备好你的数据库。IBM Cloudant 是用于测试的首选。或者,您也可以在自己的服务器上安装 CouchDB。有关更多信息,请参阅以下内容: **推荐初学者第一次使用此方法**
1. [Setup IBM Cloudant](docs/setup_cloudant.md) [![LiveSync Setup onto Fly.io SpeedRun 2024 using Google Colab](https://img.youtube.com/vi/7sa_I1832Xc/0.jpg)](https://www.youtube.com/watch?v=7sa_I1832Xc)
2. [Setup your CouchDB](docs/setup_own_server_cn.md)
Note: 正在征集更多搭建方法!目前在讨论的有 [使用 fly.io](https://github.com/vrtmrz/obsidian-livesync/discussions/85) 1. [Setup CouchDB on fly.io](docs/setup_flyio.md)
2. 在 [Quick Setup](docs/quick_setup.md) 中配置插件。
### 第一个设备 ### 手动设置
1. 在您的设备上安装插件。 1. 配置服务器
2. 配置远程数据库信息。 1. [在fly.io上快速搭建CouchDB](docs/setup_flyio.md)
1. 将您的服务器信息填写到 `Remote Database configuration`(远程数据库配置)设置页中。 2. [自行搭建CouchDB](docs/setup_own_server.md)
2. 建议启用 `End to End Encryption`(端到端加密)。输入密码后,单击“应用”。 2. 在[快速设置](docs/quick_setup.md)中配置插件
3. 点击 `Test Database Connection` 并确保插件显示 `Connected to (你的数据库名称)`
4. 单击 `Check database configuration`(检查数据库配置)并确保所有测试均已通过。
3.`Sync Settings`(同步设置)选项卡中配置何时进行同步。(您也可以稍后再设置)
1. 如果要实时同步,请启用 `LiveSync`
2. 或者,根据您的需要设置同步方式。默认情况下,不会启用任何自动同步,这意味着您需要手动触发同步过程。
3. 其他配置也在这里。建议启用 `Use Trash for deleted files`(删除文件到回收站),但您也可以保持所有配置不变。
4. 配置杂项功能。
1. 启用 `Show staus inside editor` 会在编辑器右上角显示状态。(推荐开启)
5. 回到编辑器。等待初始扫描完成。
6. 当状态不再变化并显示 ⏹️ 图标表示 COMPLETED(没有 ⏳ 和 🧩 图标)时,您就可以与服务器同步了。
7. 按功能区上的复制图标或从命令面板运行 `Replicate now`(立刻复制)。这会将您的所有数据发送到服务器。
8. 打开命令面板,运行 `Copy setup URI`(复制设置链接),并设置密码。这会将您的配置导出到剪贴板,作为您导入其他设备的链接。
**重要: 不要公开本链接,这个链接包含了你的所有认证信息!** (即使没有密码别人读不了) > [!提示]
> Fly.io现已不再免费。不过,尽管存在一些问题,我们仍可使用IBM Cloudant。请参考[搭建IBM Cloudant](docs/setup_cloudant.md)。
> 此外,我们还可以采用点对点同步方式,无需搭建服务器;或者选用价格极低的对象存储——Cloudflare R2可免费使用。
> 但最重要的是,我们可以选择自己信任的服务器。因此,建议您搭建自有服务器
> CouchDB可在树莓派上运行。(但请务必注意服务器的安全性)。
### 后续设备
注意:如果要与非空的 vault 进行同步,文件的修改日期和时间必须互相匹配。否则,可能会发生额外的传输或文件可能会损坏。
为简单起见,我们强烈建议同步到一个全空的 vault。
1. 安装插件。 ## 状态栏中的信息
2. 打开您从第一台设备导出的链接。
3. 插件会询问您是否确定应用配置。 回答 `Yes`,然后按照以下说明进行操作:
1.`Keep local DB?` 回答 `Yes`
*注意:如果您希望保留本地现有 vault,则必须对此问题回答 `No`,并对 `Rebuild the database?` 回答 `No`。*
2.`Keep remote DB?` 回答 `Yes`
3.`Replicate once?` 回答 `Yes`
完成后,您的所有设置将会从第一台设备成功导入。
4. 你的笔记应该很快就会同步。
## 文件看起来有损坏... 同步状态显示在状态栏中,采用以下图标。
请再次打开配置链接并回答如下:
- 如果您的本地数据库看起来已损坏(当你的本地 Obsidian 文件看起来很奇怪)
-`Keep local DB?` 回答 `No`
- 如果您的远程数据库看起来已损坏(当复制时发生中断)
-`Keep remote DB?` 回答 `No`
如果您对两者都回答“否”,您的数据库将根据您设备上的内容重建。并且远程数据库将锁定其他设备,您必须再次同步所有设备。(此时,几乎所有文件都会与时间戳同步。因此您可以安全地使用现有的 vault)。
## 测试服务器
设置 Cloudant 或本地 CouchDB 实例有点复杂,所以我搭建了一个 [self-hosted-livesync 尝鲜服务器](https://olstaste.vrtmrz.net/)。欢迎免费尝试!
注意:请仔细阅读“限制”条目。不要发送您的私人 vault。
## 状态栏信息
同步状态将显示在状态栏。
- 活动指示器
- 📲 网络请求
- 状态 - 状态
- ⏹️ 就绪 - ⏹️ 已停止
- 💤 LiveSync 已启用,正在等待更改 - 💤 LiveSync已启用,正在等待更改
- ⚡️ 同步中 - ⚡️ 同步中
-一个错误出现了。 -发生了错误
- ↑ 上传的 chunk 和元数据数量 - 统计指标
- ↓ 下载的 chunk 和元数据数量 - ↑ 上传的分块与元数据
- ⏳ 等待的过程的数量 - ↓ 下载的分块与元数据
- 🧩 正在等待 chunk 的文件数量 - 进度指示器
如果你删除或更名了文件,请等待 ⏳ 图标消失。 - 📥 未处理的传输项
- 📄 正在进行的数据库操作
- 💾 正在进行的写入存储进程
- ⏳ 正在进行的读取存储进程
- 🛫 待处理的读取存储进程
- 📬 批量处理的读取存储进程
- ⚙️ 正在进行或待处理的隐藏文件存储进程
- 🧩 等待中的分块
- 🔌 正在进行的自定义项(配置、代码片段和插件)
为避免文件和数据库损坏,请等待所有进度指示器尽可能消失后再关闭 Obsidian(插件也会尝试恢复同步进度)。特别是在您已删除或重命名文件的情况下,请务必遵守此操作。
## 提示 ## 使用技巧与故障排除
如果您在配置插件时遇到问题,请参阅:[Tips and Troubleshooting](docs/troubleshooting.md).
- 如果文件夹在复制后变为空,则默认情况下该文件夹会被删除。您可以关闭此行为。检查 [设置](docs/settings.md)。
- LiveSync 模式在移动设备上可能导致耗电量增加。建议使用定期同步 + 条件自动同步。
- 移动平台上的 Obsidian 无法连接到非安全 (HTTP) 或本地签名的服务器,即使设备上安装了根证书。
- 没有类似“exclude_folders”的配置。
- 同步时,文件按修改时间进行比较,较旧的将被较新的文件覆盖。然后插件检查冲突,如果需要合并,将打开一个对话框。
- 数据库中的文件在罕见情况下可能会损坏。当接收到的文件看起来已损坏时,插件不会将其写入本地存储。如果您的设备上有文件的本地版本,则可以通过编辑本地文件并进行同步来覆盖损坏的版本。但是,如果您的任何设备上都不存在该文件,则无法挽救该文件。在这种情况下,您可以从设置对话框中删除这些损坏的文件。
- 如果您的数据库看起来已损坏,请尝试 "Drop History"(“删除历史记录”)。通常,这是最简单的方法。
- 要阻止插件的启动流程(例如,为了修复数据库问题),您可以在 vault 的根目录创建一个 "redflag.md" 文件。
- 问:数据库在增长,我该如何缩小它?
答:每个文档都保存了过去 100 次修订,用于检测和解决冲突。想象一台设备已经离线一段时间,然后再次上线。设备必须将其笔记与远程保存的笔记进行比较。如果存在曾经相同的历史修订,则可以安全地直接更新这个文件(和 git 的快进原理一样)。即使文件不在修订历史中,我们也只需检查两个设备上该文件的公有修订版本之后的差异。这就像 git 的冲突解决方法。所以,如果想从根本上解决数据库太大的问题,我们像构建一个扩大版的 git repo 一样去重新设计数据库。
- 更多技术信息在 [技术信息](docs/tech_info.md)
- 如果你想在没有黑曜石的情况下同步文件,你可以使用[filesystem-livesync](https://github.com/vrtmrz/filesystem-livesync)。
- WebClipper 也可在 Chrome Web Store 上使用:[obsidian-livesync-webclip](https://chrome.google.com/webstore/detail/obsidian-livesync-webclip/jfpaflmpckblieefkegjncjoceapakdf)
仓库地址:[obsidian-livesync-webclip](https://github.com/vrtmrz/obsidian-livesync-webclip) (文档施工中) ## 致谢
本项目得以持续顺利推进,离不开以下各方的贡献:
- 众多[贡献者](https://github.com/vrtmrz/obsidian-livesync/graphs/contributors)。
- 许多[GitHub 赞助人](https://github.com/sponsors/vrtmrz#sponsors)。
- JetBrains 社区计划/对开源项目的支持。<img src="https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.png" alt="JetBrains logo" height="24">
## License 愿所有作出贡献的人士因其善良与慷慨而受到尊敬与铭记。
The source code is licensed under the MIT License. ## 许可协议
本源代码使用 MIT 协议授权。
本项目采用 MIT 许可协议授权。
+93
View File
@@ -0,0 +1,93 @@
<!-- For translation: 20240227r0 -->
# Self-hosted LiveSync
[Documentación en inglés](./README_ja.md) - [Documentación en japonés](./README_ja.md) - [Documentación en chino](./README_cn.md).
Self-hosted LiveSync es un plugin de sincronización implementado por la comunidad, disponible en todas las plataformas compatibles con Obsidian y utiliza CouchDB o Almacenamiento de Objetos (por ejemplo, MinIO, S3, R2, etc.) como servidor.
![Demostración de Obsidian Live Sync](https://user-images.githubusercontent.com/45774780/137355323-f57a8b09-abf2-4501-836c-8cb7d2ff24a3.gif)
Nota: Este plugin no puede sincronizarse con el "Obsidian Sync" oficial.
## Características
- Sincroniza bóvedas de manera eficiente con menos tráfico.
- Buen manejo de modificaciones en conflicto.
- Fusión automática para conflictos simples.
- Uso de soluciones de código abierto para el servidor.
- Pueden usarse soluciones compatibles.
- Soporte de cifrado de extremo a extremo.
- Sincronización de configuraciones, fragmentos, temas y complementos a través de [Sincronización de personalización \(Beta\)](#customization-sync) o [Sincronización de archivos ocultos](#hiddenfilesync)
- WebClip de [obsidian-livesync-webclip](https://chrome.google.com/webstore/detail/obsidian-livesync-webclip/jfpaflmpckblieefkegjncjoceapakdf)
Este plugin puede ser útil para investigadores, ingenieros y desarrolladores que necesitan mantener sus notas totalmente autoalojadas por razones de seguridad, o para aquellos que deseen tener la tranquilidad de saber que sus notas son totalmente privadas.
>[!IMPORTANTE]
> - Antes de instalar o actualizar este plugin, realice un respaldo de su bóveda.
> - No active este plugin junto con otra solución de sincronización al mismo tiempo (incluyendo iCloud y Obsidian Sync).
> - Este es un plugin de sincronización, no una solución de respaldo. No confíe en él para realizar respaldos.
## Cómo usar
### Configuración en 3 minutos - CouchDB en fly.io
**Recomendado para principiantes**
[![Configuración de LiveSync en Fly.io 2024 usando Google Colab](https://img.youtube.com/vi/7sa_I1832Xc/0.jpg)](https://www.youtube.com/watch?v=7sa_I1832Xc)
1. [Configurar CouchDB en fly.io](docs/setup_flyio_es.md)
2. Configurar el plugin en [Configuración rápida](docs/quick_setup_es.md)
### Configuración manual
1. Configurar el servidor
1. [Configurar CouchDB en fly.io](docs/setup_flyio_es.md)
2. [Configurar su CouchDB](docs/setup_own_server_es.md)
2. Configura el plugin en [Configuración rápida](docs/quick_setup_es.md)
> [!CONSEJO]
> Actualmente, fly.io ya no es gratuito. Afortunadamente, aunque hay algunos problemas, aún podemos usar IBM Cloudant. Aquí está como [Configurar IBM Cloudant](docs/setup_cloudant.md). ¡Se actualizará pronto!
## Información en la barra de estado
El estado de sincronización se muestra en la barra de estado con los siguientes iconos.
- Indicador de actividad
- 📲 Solicitud de red
- Estado
- ⏹️ Detenido
- 💤 LiveSync activado. Esperando cambios
- ⚡️ Sincronización en progreso
- ⚠ Ocurrió un error
- Indicador estadístico
- ↑ Chunks y metadatos subidos
- ↓ Chunks y metadatos descargados
- Indicador de progreso
- 📥 Elementos transferidos sin procesar
- 📄 Operación de base de datos en curso
- 💾 Procesos de escritura en almacenamiento en curso
- ⏳ Procesos de lectura en almacenamiento en curso
- 🛫 Procesos de lectura en almacenamiento pendientes
- 📬 Procesos de lectura en almacenamiento por lotes
- ⚙️ Procesos de almacenamiento de archivos ocultos en curso o pendientes
- 🧩 Chunks en espera
- 🔌 Elementos de personalización en curso (Configuración, fragmentos y plugins)
Para prevenir la corrupción de archivos y bases de datos, antes de detener Obsidian espere hasta que todos los indicadores de progreso hayan desaparecido (el plugin también intentará reanudar, sin embargo). Especialmente en caso de que haya eliminado o renombrado archivos.
## Consejos y Solución de Problemas
Si tienes problemas para hacer funcionar el plugin, consulta: [Consejos y solución de problemas](docs/troubleshooting_es.md).
## Agradecimientos
El proyecto ha progresado y mantenido en armonía gracias a:
- Muchos [Colaboradores](https://github.com/vrtmrz/obsidian-livesync/graphs/contributors)
- Muchos [Patrocinadores de GitHub](https://github.com/sponsors/vrtmrz#sponsors)
- Programas comunitarios de JetBrains / Soporte para Proyectos de Código Abierto <img src="https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.png" alt="JetBrains logo." height="24">
Que aquellos que han contribuido sean honrados y recordados por su amabilidad y generosidad.
## Licencia
Licenciado bajo la Licencia MIT.
+65 -75
View File
@@ -1,96 +1,86 @@
<!-- For translation: 20240227r0 -->
# Self-hosted LiveSync # Self-hosted LiveSync
[英語版ドキュメント](./README.md) - [中国語版ドキュメント](./README_cn.md).
**旧): obsidian-livesync** Obsidianで利用可能なすべてのプラットフォームで使える、CouchDBをサーバに使用する、コミュニティ版の同期プラグイン
セルフホストしたデータベースを使って、双方向のライブシンクするObsidianのプラグイン。
**公式のSyncとは互換性はありません**
![obsidian_live_sync_demo](https://user-images.githubusercontent.com/45774780/137355323-f57a8b09-abf2-4501-836c-8cb7d2ff24a3.gif) ![obsidian_live_sync_demo](https://user-images.githubusercontent.com/45774780/137355323-f57a8b09-abf2-4501-836c-8cb7d2ff24a3.gif)
**ほぼ動くようになってきましたが、Vaultのバックアップは確実に取得してください** ※公式のSyncと同期することはできません。
[英語版](./README.md)
## こんなことができるプラグインです。 ## 機能
- Windows, Mac, iPad, iPhone, Android, Chromebookで動く - 高効率・低トラフィックでVault同士を同期
- セルフホストしたデータベースに同期して - 競合解決がいい感じ
- 複数端末で同時にその変更をほぼリアルタイムで配信し - 単純な競合なら自動マージします
- さらに、他の端末での変更も別の端末に配信する、双方向リアルタイムなLiveSyncを実現でき、 - OSSソリューションを同期サーバに使用
- 発生した変更の衝突はその場で解決できます。 - 互換ソリューションも使用可能です
- 同期先のホストにはCouchDBまたはその互換DBaaSのIBM Cloudantをサーバーに使用できます。あなたのデータは、あなたのものです。 - End-to-End暗号化実装済み
- もちろんLiveではない同期もできます。 - 設定・スニペット・テーマ、プラグインの同期が可能
- 万が一のために、サーバーに送る内容を暗号化できます(betaです)。 - [Webクリッパー](https://chrome.google.com/webstore/detail/obsidian-livesync-webclip/jfpaflmpckblieefkegjncjoceapakdf) もあります
- [Webクリッパー](https://chrome.google.com/webstore/detail/obsidian-livesync-webclip/jfpaflmpckblieefkegjncjoceapakdf) もあります(End-to-End暗号化対象外です)
NDAや類似の契約や義務、倫理を守る必要のある、研究者、設計者、開発者のような方に特にオススメです。 NDAや類似の契約や義務、倫理を守る必要のある、研究者、設計者、開発者のような方に特にオススメです。
特にエンタープライズでは、たとえEnd to Endの暗号化が行われていても、管理下にあるサーバーにのみデータを格納することが求められる場合があります。
# 重要なお知らせ
- ❌ファイルの重複や破損を避けるため、複数の同期手段を同時に使用しないでください。
これは、Vaultをクラウド管理下のフォルダに置くことも含みます。(例えば、iCloudの管理フォルダ内に入れたり)。
- ⚠️このプラグインは、端末間でのノートの反映を目的として作成されました。バックアップ等が目的ではありません。そのため、バックアップは必ず別のソリューションで行うようにしてください。
- ストレージの空き容量が枯渇した場合、データベースが破損することがあります。
- 隠しファイルやObsidisanが認識できないファイルを編集した場合、そのファイルは削除されることがあります。
# 補足 >[!IMPORTANT]
> - インストール・アップデート前には必ずVaultをバックアップしてください
- レプリケーションなどでファイルがリモートデバイスから削除された場合、受信したデバイスでも、ファイルの削除が反映されます。 > - 複数の同期ソリューションを同時に有効にしないでください(これはiCloudや公式のSyncも含みます)
- その際、Self-hosted LiveSyncは、フォルダが空になった際に、フォルダをデフォルトでは残しません。残す場合はオプションから設定してください > - このプラグインは同期プラグインです。バックアップとして使用しないでください
- LiveSyncはモバイルではバッテリーをかなり消費します。
- モバイル端末からは、非httpsのエンドポイント、または独自CAが発行した証明書でホストされているhttpsのサーバーには接続できません。
- 除外フォルダのような設定はありません。
# このプラグインの使い方 ## このプラグインの使い方
1. Community Pluginsから、Self-holsted LiveSyncと検索しインストールするか、このリポジトリのReleasesから`main.js`, `manifest.json`, `style.css` をダウンロードしvaultの中の`.obsidian/plugins/obsidian-livesync`に入れて、Obsidianを再起動してください。 ### 3分セットアップ - CouchDB on fly.io
2. サーバーを確保します。IBM Cloudantがお手軽かつ堅牢で便利です。完全にセルフホストする際にはお持ちのサーバーにCouchDBをインストールする必要があります。詳しくは下記を参照してください
1. [IBM Cloudantのセットアップ](docs/setup_cloudant_ja.md)
2. [独自のCouchDBのセットアップ](docs/setup_own_server_ja.md)
3. サーバー情報を入力します。初回のみ、Obsidianを再起動することをオススメします。
設定内容の詳細は[このプラグインの設定](docs/settings_ja.md)を参照してください。
4. お好きな同期方法を選んで、利用を開始してください。 **はじめての方におすすめ**
# テストサーバー [![LiveSync Setup onto Fly.io SpeedRun 2024 using Google Colab](https://img.youtube.com/vi/7sa_I1832Xc/0.jpg)](https://www.youtube.com/watch?v=7sa_I1832Xc)
もし、CouchDBをインストールしたり、Cloudantのインスタンスをセットアップしたりするのに気が引ける場合、[Self-hosted LiveSyncのテストサーバー](https://olstaste.vrtmrz.net/)を作りましたので、使ってみてください。 1. [Fly.ioにCouchDBをセットアップする](docs/setup_flyio.md)
2. [Quick Setup](docs/quick_setup_ja.md)でプラグインを設定する
備考: 制限事項をよく確認して使用してください。くれぐれも、本当に使用している自分のVaultを同期しないようにしてください。
# WebClipperあります
Self-hosted LiveSync用にWebClipperも作りました。Chrome Web Storeからダウンロードできます。
[obsidian-livesync-webclip](https://chrome.google.com/webstore/detail/obsidian-livesync-webclip/jfpaflmpckblieefkegjncjoceapakdf)
リポジトリはこちらです: [obsidian-livesync-webclip](https://github.com/vrtmrz/obsidian-livesync-webclip)。
相変わらずドキュメントは間に合っていません。
# ステータスバーの情報
右下のステータスバーに、同期の状態が表示されます
- 同期状態
- ⏹️ 同期は停止しています
- 💤 同期はLiveSync中で、なにか起こるのを待っています
- ⚡️ 同期中です
- ⚠ エラーが発生しています
- ↑ 送信したデータ数
- ↓ 受信したデータ数
- ⏳ 保留している処理の数です
ファイルを削除したりリネームした場合、この表示が消えるまでお待ちください。
# さらなる補足
- ファイルは同期された後、タイムスタンプを比較して新しければいったん新しい方で上書きされます。その後、衝突が発生したかによって、マージが行われます。
- まれにファイルが破損することがあります。破損したファイルに関してはディスクへの反映を試みないため、実際には使用しているデバイスには少し古いファイルが残っていることが多いです。そのファイルを再度更新してもらうと、データベースが更新されて問題なくなるケースがあります。ファイルがどの端末にも存在しない場合は、設定画面から、削除できます。
- データベースが変。そういうときは、いったんデータベースをDrop Historyのapply and sendで再初期化してみてください。だいたい直ります。
- データベースの復旧中に再起動した場合など、うまくローカルデータベースを修正できない際には、Vaultのトップに`redflag.md`というファイルを置いてください。起動時のシーケンスがスキップされます。
- データベースが大きくなってきてるんだけど、小さくできる?→各ノートは、それぞれの古い100リビジョンとともに保存されています。例えば、しばらくオフラインだったあるデバイスが、久しぶりに同期したと想定してみてください。そのとき、そのデバイスは最新とは少し異なるリビジョンを持ってるはずです。その場合でも、リモートのリビジョン履歴にリモートのものが存在した場合、安全にマージできます。もしリビジョン履歴に存在しなかった場合、確認しなければいけない差分も、対象を存在して持っている共通のリビジョン以降のみに絞れます。ちょうどGitのような方法で、衝突を解決している形になるのです。そのため、肥大化したリポジトリの解消と同様に、本質的にデータベースを小さくしたい場合は、データベースの作り直しが必要です。
- その他の技術的なお話は、[技術的な内容](docs/tech_info_ja.md)に書いてあります。
# ライセンス ### Manually Setup
The source code is licensed MIT. 1. サーバのセットアップ
1. [Fly.ioにCouchDBをセットアップする](docs/setup_flyio.md)
2. [CouchDBをセットアップする](docs/setup_own_server_ja.md)
2. [Quick Setup](docs/quick_setup_ja.md)でプラグインを設定する
> [!TIP]
> IBM Cloudantもまだ使用できますが、いくつかの理由で現在はおすすめしていません。[IBM Cloudantのセットアップ](docs/setup_cloudant_ja.md)はまだあります。
## ステータスバーの説明
同期ステータスはステータスバーに、下記のアイコンとともに表示されます
- アクティビティー
- 📲 ネットワーク接続中
- 同期ステータス
- ⏹️ 停止中
- 💤 変更待ち(LiveSync中)
- ⚡️ 同期の進行中
- ⚠ エラー
- 統計情報
- ↑ アップロードしたチャンクとメタデータ数
- ↓ ダウンロードしたチャンクとメタデータ数
- 進捗情報
- 📥 転送後、未処理の項目数
- 📄 稼働中データベース操作数
- 💾 稼働中のストレージ書き込み数操作数
- ⏳ 稼働中のストレージ読み込み数操作数
- 🛫 待機中のストレージ読み込み数操作数
- ⚙️ 隠しファイルの操作数(待機・稼働中合計)
- 🧩 取得待ちを行っているチャンク数
- 🔌 設定同期関連の操作数
データベースやファイルの破損を避けるため、Obsidianの終了は進捗情報が表示されなくなるまで待ってください(プラグインも復帰を試みますが)。特にファイルを削除やリネームした場合は気をつけてください。
## Tips and Troubleshooting
- 2台目以降のセットアップ時に、初期同期をより迅速かつ簡単に行うには、[ファストセットアップガイド](docs/tips/fast-setup_ja.md)をご参照ください。
- 何かこまったら、[Tips and Troubleshooting](docs/troubleshooting.md)をご参照ください。
## License
Licensed under the MIT License.
+134
View File
@@ -0,0 +1,134 @@
import type { SimpleStore } from "octagonal-wheels/databases/SimpleStoreBase";
import type { HasSettings, ObsidianLiveSyncSettings } from "@lib/common/models/setting.type";
import type { EntryDoc } from "@lib/common/models/db.definition";
import type { Confirm } from "@lib/interfaces/Confirm";
import type { DatabaseFileAccess } from "@lib/interfaces/DatabaseFileAccess";
import type { Rebuilder } from "@lib/interfaces/DatabaseRebuilder";
import type { IFileHandler } from "@lib/interfaces/FileHandler";
import type { StorageAccess } from "@lib/interfaces/StorageAccess";
import type { LiveSyncLocalDBEnv } from "@lib/pouchdb/LiveSyncLocalDB";
import type { LiveSyncCouchDBReplicatorEnv } from "@lib/replication/couchdb/LiveSyncReplicator";
import type { CheckPointInfo } from "@lib/replication/journal/JournalSyncTypes";
import type { LiveSyncJournalReplicatorEnv } from "@lib/replication/journal/LiveSyncJournalReplicatorEnv";
import type { LiveSyncReplicatorEnv } from "@lib/replication/LiveSyncAbstractReplicator";
import type { ServiceContext } from "@lib/services/base/ServiceBase";
import type { InjectableServiceHub } from "@lib/services/InjectableServices";
import { AbstractModule } from "./modules/AbstractModule";
import type { ServiceModules } from "@lib/interfaces/ServiceModule";
export declare class LiveSyncBaseCore<T extends ServiceContext = ServiceContext, TCommands extends IMinimumLiveSyncCommands = IMinimumLiveSyncCommands> implements LiveSyncLocalDBEnv, LiveSyncReplicatorEnv, LiveSyncJournalReplicatorEnv, LiveSyncCouchDBReplicatorEnv, HasSettings<ObsidianLiveSyncSettings> {
addOns: TCommands[];
/**
* register an add-onn to the plug-in.
* Add-ons are features that are not essential to the core functionality of the plugin,
* @param addOn
*/
private _registerAddOn;
/**
* Get an add-on by its class name. Returns undefined if not found.
* @param cls
* @returns
*/
getAddOn<T extends TCommands>(cls: string): T | undefined;
constructor(serviceHub: InjectableServiceHub<T>, serviceModuleInitialiser: (core: LiveSyncBaseCore<T, TCommands>, serviceHub: InjectableServiceHub<T>) => ServiceModules, extraModuleInitialiser: (core: LiveSyncBaseCore<T, TCommands>) => AbstractModule[], addOnsInitialiser: (core: LiveSyncBaseCore<T, TCommands>) => TCommands[], featuresInitialiser: (core: LiveSyncBaseCore<T, TCommands>) => void);
/**
* The service hub for managing all services.
*/
_services: InjectableServiceHub<T> | undefined;
get services(): InjectableServiceHub<T>;
/**
* Service Modules
*/
protected _serviceModules: ServiceModules;
get serviceModules(): ServiceModules;
/**
* The modules of the plug-in. Modules are responsible for specific features or functionalities of the plug-in, such as file handling, conflict resolution, replication, etc.
*/
private modules;
/**
* Get a module by its class. Throws an error if not found.
* Mostly used for getting SetupManager.
* @param constructor
* @returns
*/
getModule<T extends AbstractModule>(constructor: new (...args: any[]) => T): T;
/**
* Register a module to the plug-in.
* @param module The module to register.
*/
private _registerModule;
registerModules(extraModules?: AbstractModule[]): void;
/**
* Bind module functions to services.
*/
bindModuleFunctions(): void;
/**
* @obsolete Use services.UI.confirm instead. The confirm function to show a confirmation dialog to the user.
*/
get confirm(): Confirm;
/**
* @obsolete Use services.setting.currentSettings instead. The current settings of the plug-in.
*/
get settings(): ObsidianLiveSyncSettings;
/**
* @obsolete Use services.setting.settings instead. Set the settings of the plug-in.
*/
set settings(value: ObsidianLiveSyncSettings);
/**
* @obsolete Use services.setting.currentSettings instead. Get the settings of the plug-in.
* @returns The current settings of the plug-in.
*/
getSettings(): ObsidianLiveSyncSettings;
/**
* @obsolete Use services.database.localDatabase instead. The local database instance.
*/
get localDatabase(): import("@lib/pouchdb/LiveSyncLocalDB").LiveSyncLocalDB;
/**
* @obsolete Use services.database.localDatabase instead. Get the PouchDB database instance. Note that this is not the same as the local database instance, which is a wrapper around the PouchDB database.
* @returns The PouchDB database instance.
*/
getDatabase(): PouchDB.Database<EntryDoc>;
/**
* @obsolete Use services.keyValueDB.simpleStore instead. A simple key-value store for storing non-file data, such as checkpoints, sync status, etc.
*/
get simpleStore(): SimpleStore<CheckPointInfo>;
/**
* @obsolete Use services.replication.getActiveReplicator instead. Get the active replicator instance. Note that there can be multiple replicators, but only one can be active at a time.
*/
get replicator(): import("@lib/replication/LiveSyncAbstractReplicator").LiveSyncAbstractReplicator;
/**
* @obsolete Use services.keyValueDB.kvDB instead. Get the key-value database instance. This is used for storing large data that cannot be stored in the simple store, such as file metadata, etc.
*/
get kvDB(): import("./lib/src/interfaces/KeyValueDatabase").KeyValueDatabase;
/**
* Storage Accessor for handling file operations.
* @obsolete Use serviceModules.storageAccess instead.
*/
get storageAccess(): StorageAccess;
/**
* Database File Accessor for handling file operations related to the database, such as exporting the database, importing from a file, etc.
* @obsolete Use serviceModules.databaseFileAccess instead.
*/
get databaseFileAccess(): DatabaseFileAccess;
/**
* File Handler for handling file operations related to replication, such as resolving conflicts, applying changes from replication, etc.
* @obsolete Use serviceModules.fileHandler instead.
*/
get fileHandler(): IFileHandler;
/**
* Rebuilder for handling database rebuilding operations.
* @obsolete Use serviceModules.rebuilder instead.
*/
get rebuilder(): Rebuilder;
/**
* Initialise ServiceFeatures.
* (Please refer `serviceFeatures` for more details)
*/
initialiseServiceFeatures(): void;
}
export interface IMinimumLiveSyncCommands {
onunload(): void;
onload(): void | Promise<void>;
constructor: {
name: string;
};
}
+3
View File
@@ -0,0 +1,3 @@
import type { KeyValueDatabase } from "@lib/interfaces/KeyValueDatabase.ts";
export { OpenKeyValueDatabase } from "./KeyValueDBv2.ts";
export declare const _OpenKeyValueDatabase: (dbKey: string) => Promise<KeyValueDatabase>;
+24
View File
@@ -0,0 +1,24 @@
import type { KeyValueDatabase } from "@lib/interfaces/KeyValueDatabase";
import { type IDBPDatabase } from "idb";
export declare function OpenKeyValueDatabase(dbKey: string): Promise<KeyValueDatabase>;
export declare class IDBKeyValueDatabase implements KeyValueDatabase {
protected _dbPromise: Promise<IDBPDatabase<unknown>> | null;
protected dbKey: string;
protected storeKey: string;
protected _isDestroyed: boolean;
protected destroyedPromise: Promise<void> | null;
get isDestroyed(): boolean;
get ensuredDestroyed(): Promise<void>;
getIsReady(): Promise<boolean>;
protected ensureDB(): Promise<IDBPDatabase<unknown>>;
protected closeDB(setDestroyed?: boolean): Promise<void>;
get DB(): Promise<IDBPDatabase<unknown>>;
constructor(dbKey: string);
get<U>(key: IDBValidKey): Promise<U>;
set<U>(key: IDBValidKey, value: U): Promise<IDBValidKey>;
del(key: IDBValidKey): Promise<void>;
clear(): Promise<void>;
keys(query?: IDBValidKey | IDBKeyRange, count?: number): Promise<IDBValidKey[]>;
close(): Promise<void>;
destroy(): Promise<void>;
}
+12
View File
@@ -0,0 +1,12 @@
import type { NecessaryServices } from "@lib/interfaces/ServiceModule";
type PeriodicProcessorHost = NecessaryServices<"API" | "control", never>;
export declare class PeriodicProcessor {
_process: () => Promise<unknown>;
_timer?: number;
_core: PeriodicProcessorHost;
constructor(core: PeriodicProcessorHost, process: () => Promise<unknown>);
process(): Promise<void>;
enable(interval: number): void;
disable(): void;
}
export {};
+9
View File
@@ -0,0 +1,9 @@
import { ItemView } from "@/deps.ts";
import { type mount } from "svelte";
export declare abstract class SvelteItemView extends ItemView {
abstract instantiateComponent(target: HTMLElement): ReturnType<typeof mount> | Promise<ReturnType<typeof mount>>;
component?: ReturnType<typeof mount>;
onOpen(): Promise<void>;
_dismountComponent(): Promise<void>;
onClose(): Promise<void>;
}
+36
View File
@@ -0,0 +1,36 @@
import { eventHub } from "@lib/hub/hub";
export declare const EVENT_PLUGIN_LOADED = "plugin-loaded";
export declare const EVENT_PLUGIN_UNLOADED = "plugin-unloaded";
export declare const EVENT_FILE_SAVED = "file-saved";
export declare const EVENT_LEAF_ACTIVE_CHANGED = "leaf-active-changed";
export declare const EVENT_REQUEST_OPEN_SETTINGS = "request-open-settings";
export declare const EVENT_REQUEST_OPEN_SETTING_WIZARD = "request-open-setting-wizard";
export declare const EVENT_REQUEST_OPEN_SETUP_URI = "request-open-setup-uri";
export declare const EVENT_REQUEST_COPY_SETUP_URI = "request-copy-setup-uri";
export declare const EVENT_REQUEST_SHOW_SETUP_QR = "request-show-setup-qr";
export declare const EVENT_REQUEST_RELOAD_SETTING_TAB = "reload-setting-tab";
export declare const EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG = "request-open-plugin-sync-dialog";
export declare const EVENT_REQUEST_RUN_DOCTOR = "request-run-doctor";
export declare const EVENT_REQUEST_RUN_FIX_INCOMPLETE = "request-run-fix-incomplete";
export declare const EVENT_ANALYSE_DB_USAGE = "analyse-db-usage";
export declare const EVENT_REQUEST_PERFORM_GC_V3 = "request-perform-gc-v3";
declare global {
interface LSEvents {
[EVENT_PLUGIN_LOADED]: undefined;
[EVENT_PLUGIN_UNLOADED]: undefined;
[EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG]: undefined;
[EVENT_REQUEST_OPEN_SETTINGS]: undefined;
[EVENT_REQUEST_OPEN_SETTING_WIZARD]: undefined;
[EVENT_REQUEST_RELOAD_SETTING_TAB]: undefined;
[EVENT_LEAF_ACTIVE_CHANGED]: undefined;
[EVENT_REQUEST_OPEN_SETUP_URI]: undefined;
[EVENT_REQUEST_COPY_SETUP_URI]: undefined;
[EVENT_REQUEST_SHOW_SETUP_QR]: undefined;
[EVENT_REQUEST_RUN_DOCTOR]: string;
[EVENT_REQUEST_RUN_FIX_INCOMPLETE]: undefined;
[EVENT_ANALYSE_DB_USAGE]: undefined;
[EVENT_REQUEST_PERFORM_GC_V3]: undefined;
}
}
export * from "@lib/events/coreEvents.ts";
export { eventHub };
+14
View File
@@ -0,0 +1,14 @@
import type { TFile } from "@/deps";
import type { FilePathWithPrefix, LoadedEntry } from "@lib/common/models/db.type";
export declare const EVENT_REQUEST_SHOW_HISTORY = "show-history";
declare global {
interface LSEvents {
[EVENT_REQUEST_SHOW_HISTORY]: {
file: TFile;
fileOnDB: LoadedEntry;
} | {
file: FilePathWithPrefix;
fileOnDB: LoadedEntry;
};
}
}
+12
View File
@@ -0,0 +1,12 @@
import type { ObsidianLiveSyncSettings } from "@lib/common/models/setting.type";
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore";
export declare function generateReport(settings: ObsidianLiveSyncSettings, core: LiveSyncBaseCore): Promise<{
obsidianInfo: {
navigator: string;
fileSystem: string;
};
responseConfig: Record<string, unknown>;
pluginConfig: ObsidianLiveSyncSettings;
manifestVersion: string;
packageVersion: string;
}>;
+3
View File
@@ -0,0 +1,3 @@
import { PersistentMap } from "octagonal-wheels/dataobject/PersistentMap";
export declare let sameChangePairs: PersistentMap<number[]>;
export declare function initializeStores(vaultName: string): void;
+47
View File
@@ -0,0 +1,47 @@
import { type PluginManifest, TFile } from "@/deps.ts";
import type { DatabaseEntry, FilePath } from "@lib/common/models/db.type";
import type { EntryBody } from "@lib/common/models/db.definition";
export type { CacheData, FileEventItem } from "@lib/common/types.ts";
export interface PluginDataEntry extends DatabaseEntry {
deviceVaultName: string;
mtime: number;
manifest: PluginManifest;
mainJs: string;
manifestJson: string;
styleCss?: string;
dataJson?: string;
_conflicts?: string[];
type: "plugin";
}
export interface PluginList {
[key: string]: PluginDataEntry[];
}
export interface DevicePluginList {
[key: string]: PluginDataEntry;
}
export declare const PERIODIC_PLUGIN_SWEEP = 60;
export interface InternalFileInfo {
path: FilePath;
mtime: number;
ctime: number;
size: number;
deleted?: boolean;
}
export interface FileInfo {
path: FilePath;
mtime: number;
ctime: number;
size: number;
deleted?: boolean;
file: TFile;
}
export type queueItem = {
entry: EntryBody;
missingChildren: string[];
timeout?: number;
done?: boolean;
warned?: boolean;
};
export declare const FileWatchEventQueueMax = 10;
export { configURIBase, configURIBaseQR } from "@lib/common/types.ts";
export { CHeader, PSCHeader, PSCHeaderEnd, ICHeader, ICHeaderEnd, ICHeaderLength, ICXHeader, } from "@lib/common/models/fileaccess.const.ts";
+61
View File
@@ -0,0 +1,61 @@
import { TAbstractFile } from "@/deps.ts";
import type { AnyEntry, DocumentID, EntryHasPath, FilePath, FilePathWithPrefix } from "@lib/common/models/db.type";
import type { CouchDBCredentials } from "@lib/common/models/auth.type";
import type { UXFileInfo, UXFileInfoStub } from "@lib/common/models/fileaccess.type";
export { ICHeader, ICXHeader } from "./types.ts";
import type { KeyValueDatabase } from "@lib/interfaces/KeyValueDatabase.ts";
export { scheduleTask, cancelTask, cancelAllTasks } from "octagonal-wheels/concurrency/task";
export declare function path2id(filename: FilePathWithPrefix | FilePath, obfuscatePassphrase: string | false, caseInsensitive: boolean): Promise<DocumentID>;
export declare function id2path(id: DocumentID, entry?: EntryHasPath): FilePathWithPrefix;
export declare function getPathFromTFile(file: TAbstractFile): FilePath;
import { isInternalFile, getPathFromUXFileInfo, getStoragePathFromUXFileInfo, getDatabasePathFromUXFileInfo } from "@lib/common/typeUtils.ts";
export { isInternalFile, getPathFromUXFileInfo, getStoragePathFromUXFileInfo, getDatabasePathFromUXFileInfo };
export declare function memoObject<T>(key: string, obj: T): T;
export declare function memoIfNotExist<T>(key: string, func: () => T | Promise<T>): Promise<T>;
export declare function retrieveMemoObject<T>(key: string): T | false;
export declare function disposeMemoObject(key: string): void;
export declare function isValidPath(filename: string): boolean;
export declare function trimPrefix(target: string, prefix: string): string;
export { isInternalMetadata, id2InternalMetadataId, isChunk, isCustomisationSyncMetadata, isPluginMetadata, stripInternalMetadataPrefix, } from "@lib/common/typeUtils.ts";
export declare const _requestToCouchDBFetch: (baseUri: string, username: string, password: string, path?: string, body?: unknown, method?: string) => Promise<Response>;
export declare const _requestToCouchDB: (baseUri: string, credentials: CouchDBCredentials, origin: string, path?: string, body?: unknown, method?: string, customHeaders?: Record<string, string>) => Promise<import("obsidian").RequestUrlResponse>;
/**
* @deprecated Use requestToCouchDBWithCredentials instead.
*/
export declare const requestToCouchDB: (baseUri: string, username: string, password: string, origin?: string, key?: string, body?: string, method?: string, customHeaders?: Record<string, string>) => Promise<import("obsidian").RequestUrlResponse>;
export declare function requestToCouchDBWithCredentials(baseUri: string, credentials: CouchDBCredentials, origin?: string, key?: string, body?: string, method?: string, customHeaders?: Record<string, string>): Promise<import("obsidian").RequestUrlResponse>;
import { BASE_IS_NEW, EVEN, TARGET_IS_NEW } from "@lib/common/models/shared.const.symbols.ts";
export { BASE_IS_NEW, EVEN, TARGET_IS_NEW };
import { compareMTime } from "@lib/common/utils.database.ts";
export { compareMTime };
export declare function markChangesAreSame(file: AnyEntry | string | UXFileInfoStub, mtime1: number, mtime2: number): true | undefined;
export declare function unmarkChanges(file: AnyEntry | string | UXFileInfoStub): void;
export declare function isMarkedAsSameChanges(file: UXFileInfoStub | AnyEntry | string, mtimes: number[]): typeof EVEN | undefined;
export declare function compareFileFreshness(baseFile: UXFileInfoStub | AnyEntry | undefined, checkTarget: UXFileInfo | AnyEntry | undefined): typeof BASE_IS_NEW | typeof TARGET_IS_NEW | typeof EVEN;
export type MemoOption = {
key: string;
forceUpdate?: boolean;
validator?: (context: Map<string, unknown>) => boolean;
};
export declare function useMemo<T>({ key, forceUpdate, validator }: MemoOption, updateFunc: (context: Map<string, unknown>, prev: T) => T): T;
export declare function useStatic<T>(key: string): {
value: T | undefined;
};
export declare function useStatic<T>(key: string, initial: T): {
value: T;
};
export declare function disposeMemo(key: string): void;
export declare function disposeAllMemo(): void;
export declare function getLogLevel(showNotice: boolean): 32 | 64;
export type MapLike<K, V> = {
set(key: K, value: V): Map<K, V>;
clear(): void;
delete(key: K): boolean;
get(key: K): V | undefined;
has(key: K): boolean;
keys: () => IterableIterator<K>;
get size(): number;
};
export declare function autosaveCache<K, V>(db: KeyValueDatabase, mapKey: string): Promise<MapLike<K, V>>;
export declare function onlyInNTimes(n: number, proc: (progress: number) => unknown): () => void;
export { displayRev } from "@lib/common/utils.ts";
+6
View File
@@ -0,0 +1,6 @@
import type { FilePath } from "@lib/common/models/db.type";
export { addIcon, App, debounce, Editor, FuzzySuggestModal, MarkdownRenderer, MarkdownView, Modal, Notice, Platform, Plugin, PluginSettingTab, requestUrl, sanitizeHTMLToDom, Setting, stringifyYaml, TAbstractFile, TextAreaComponent, TFile, TFolder, parseYaml, ItemView, WorkspaceLeaf, Menu, request, getLanguage, ButtonComponent, TextComponent, ToggleComponent, DropdownComponent, } from "obsidian";
export type { DataWriteOptions, PluginManifest, RequestUrlParam, RequestUrlResponse, MarkdownFileInfo, ListedFiles, ValueComponent, Stat, } from "obsidian";
declare const normalizePath: <T extends string | FilePath>(from: T) => T;
export { normalizePath };
export { type Diff, DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diff_match_patch } from "diff-match-patch";
+147
View File
@@ -0,0 +1,147 @@
import { type PluginManifest, type App } from "@/deps.ts";
import type { EntryDoc } from "@lib/common/models/db.definition";
import type { LoadedEntry, FilePathWithPrefix, FilePath, AnyEntry } from "@lib/common/models/db.type";
import { LiveSyncCommands } from "@/features/LiveSyncCommands.ts";
import { PeriodicProcessor } from "@/common/PeriodicProcessor.ts";
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
import type ObsidianLiveSyncPlugin from "@/main.ts";
import type { PluginDialogModal } from "./PluginDialogModal.ts";
import type { InjectableServiceHub } from "@lib/services/InjectableServices.ts";
import type { LiveSyncCore } from "@/main.ts";
declare global {
interface OPTIONAL_SYNC_FEATURES {
DISABLE: "DISABLE";
CUSTOMIZE: "CUSTOMIZE";
DISABLE_CUSTOM: "DISABLE_CUSTOM";
}
}
export declare const pluginList: import("svelte/store").Writable<PluginDataExDisplay[]>;
export declare const pluginIsEnumerating: import("svelte/store").Writable<boolean>;
export declare const pluginV2Progress: import("svelte/store").Writable<number>;
export type PluginDataExFile = {
filename: string;
data: string[];
mtime: number;
size: number;
version?: string;
hash?: string;
displayName?: string;
};
export interface IPluginDataExDisplay {
documentPath: FilePathWithPrefix;
category: string;
name: string;
term: string;
displayName?: string;
files: (LoadedEntryPluginDataExFile | PluginDataExFile)[];
version?: string;
mtime: number;
}
export type PluginDataExDisplay = {
documentPath: FilePathWithPrefix;
category: string;
name: string;
term: string;
displayName?: string;
files: PluginDataExFile[];
version?: string;
mtime: number;
};
type LoadedEntryPluginDataExFile = LoadedEntry & PluginDataExFile;
export declare const pluginManifests: Map<string, PluginManifest>;
export declare const pluginManifestStore: import("svelte/store").Writable<Map<string, PluginManifest>>;
export declare class PluginDataExDisplayV2 {
documentPath: FilePathWithPrefix;
category: string;
term: string;
files: LoadedEntryPluginDataExFile[];
name: string;
confKey: string;
constructor(data: IPluginDataExDisplay);
setFile(file: LoadedEntryPluginDataExFile): Promise<void>;
deleteFile(filename: string): void;
_displayName: string | undefined;
_version: string | undefined;
applyLoadedManifest(): void;
get displayName(): string;
get version(): string | undefined;
get mtime(): number;
}
export type PluginDataEx = {
documentPath?: FilePathWithPrefix;
category: string;
name: string;
displayName?: string;
term: string;
files: PluginDataExFile[];
version?: string;
mtime: number;
};
export declare class ConfigSync extends LiveSyncCommands {
pluginDialogClass: new (app: App, plugin: ObsidianLiveSyncPlugin) => PluginDialogModal;
constructor(plugin: ObsidianLiveSyncPlugin, core: LiveSyncCore, pluginDialogClass: new (app: App, plugin: ObsidianLiveSyncPlugin) => PluginDialogModal);
get configDir(): string;
get kvDB(): import("../../lib/src/interfaces/KeyValueDatabase.ts").KeyValueDatabase;
get useV2(): boolean;
get useSyncPluginEtc(): boolean;
isThisModuleEnabled(): boolean;
pluginDialog?: PluginDialogModal;
periodicPluginSweepProcessor: PeriodicProcessor;
pluginList: IPluginDataExDisplay[];
showPluginSyncModal(): void;
hidePluginSyncModal(): void;
onunload(): void;
addRibbonIcon: (icon: string, title: string, callback: (evt: MouseEvent) => any) => HTMLElement;
onload(): void;
getFileCategory(filePath: string): "CONFIG" | "THEME" | "SNIPPET" | "PLUGIN_MAIN" | "PLUGIN_ETC" | "PLUGIN_DATA" | "";
isTargetPath(filePath: string): boolean;
private _everyOnDatabaseInitialized;
_everyBeforeReplicate(showNotice: boolean): Promise<boolean>;
_everyOnResumeProcess(): Promise<boolean>;
_everyAfterResumeProcess(): Promise<boolean>;
reloadPluginList(showMessage: boolean): Promise<void>;
loadPluginData(path: FilePathWithPrefix): Promise<PluginDataExDisplay | false>;
pluginScanProcessor: QueueProcessor<AnyEntry, never>;
pluginScanProcessorV2: QueueProcessor<AnyEntry, never>;
filenameToUnifiedKey(path: string, termOverRide?: string): FilePathWithPrefix;
filenameWithUnifiedKey(path: string, termOverRide?: string): FilePathWithPrefix;
unifiedKeyPrefixOfTerminal(termOverRide?: string): FilePathWithPrefix;
parseUnifiedPath(unifiedPath: FilePathWithPrefix): {
category: string;
device: string;
key: string;
filename: string;
pathV1: FilePathWithPrefix;
};
loadedManifest_mTime: Map<string, number>;
createPluginDataExFileV2(unifiedPathV2: FilePathWithPrefix, loaded?: LoadedEntry): Promise<false | LoadedEntryPluginDataExFile>;
createPluginDataFromV2(unifiedPathV2: FilePathWithPrefix): PluginDataExDisplayV2 | undefined;
updatingV2Count: number;
updatePluginListV2(showMessage: boolean, unifiedFilenameWithKey: FilePathWithPrefix): Promise<void>;
migrateV1ToV2(showMessage: boolean, entry: AnyEntry): Promise<void>;
updatePluginList(showMessage: boolean, updatedDocumentPath?: FilePathWithPrefix): Promise<void>;
compareUsingDisplayData(dataA: IPluginDataExDisplay, dataB: IPluginDataExDisplay, compareEach?: boolean): Promise<boolean>;
applyDataV2(data: PluginDataExDisplayV2, content?: string): Promise<boolean>;
applyData(data: IPluginDataExDisplay, content?: string): Promise<boolean>;
deleteData(data: PluginDataEx): Promise<boolean>;
_anyModuleParsedReplicationResultItem(docs: PouchDB.Core.ExistingDocument<EntryDoc>): Promise<boolean>;
_everyRealizeSettingSyncMode(): Promise<boolean>;
recentProcessedInternalFiles: string[];
makeEntryFromFile(path: FilePath): Promise<false | PluginDataExFile>;
storeCustomisationFileV2(path: FilePath, term: string, force?: boolean): Promise<boolean | PouchDB.Core.Response | undefined>;
storeCustomizationFiles(path: FilePath, termOverRide?: string): Promise<boolean | PouchDB.Core.Response | undefined>;
_anyProcessOptionalFileEvent(path: FilePath): Promise<boolean>;
watchVaultRawEventsAsync(path: FilePath): Promise<boolean>;
scanAllConfigFiles(showMessage: boolean): Promise<void>;
deleteConfigOnDatabase(prefixedFileName: FilePathWithPrefix, forceWrite?: boolean): Promise<boolean>;
scanInternalFiles(): Promise<FilePath[]>;
private _allAskUsingOptionalSyncFeature;
private __askHiddenFileConfiguration;
_anyGetOptionalConflictCheckMethod(path: FilePathWithPrefix): Promise<boolean | "newer">;
private _allSuspendExtraSync;
private _allConfigureOptionalSyncFeature;
configureHiddenFileSync(mode: keyof OPTIONAL_SYNC_FEATURES): Promise<void>;
getFiles(path: string, lastDepth: number): Promise<string[]>;
onBindFunction(core: LiveSyncCore, services: InjectableServiceHub): void;
}
export {};
+11
View File
@@ -0,0 +1,11 @@
import { mount } from "svelte";
import { App, Modal } from "@/deps.ts";
import type ObsidianLiveSyncPlugin from "@/main.ts";
export declare class PluginDialogModal extends Modal {
plugin: ObsidianLiveSyncPlugin;
component: ReturnType<typeof mount> | undefined;
isOpened(): boolean;
constructor(app: App, plugin: ObsidianLiveSyncPlugin);
onOpen(): void;
onClose(): void;
}
@@ -0,0 +1,19 @@
import { App, Modal } from "@/deps.ts";
import type { FilePath, LoadedEntry } from "@lib/common/models/db.type";
import { mount } from "svelte";
export declare class JsonResolveModal extends Modal {
filename: FilePath;
callback?: (keepRev?: string, mergedStr?: string) => Promise<void>;
docs: LoadedEntry[];
component?: ReturnType<typeof mount>;
nameA: string;
nameB: string;
defaultSelect: string;
keepOrder: boolean;
hideLocal: boolean;
title: string;
constructor(app: App, filename: FilePath, docs: LoadedEntry[], callback: (keepRev?: string, mergedStr?: string) => Promise<void>, nameA?: string, nameB?: string, defaultSelect?: string, keepOrder?: boolean, hideLocal?: boolean, title?: string);
UICallback(keepRev?: string, mergedStr?: string): Promise<void>;
onOpen(): void;
onClose(): void;
}
@@ -0,0 +1,153 @@
import type { LoadedEntry, FilePathWithPrefix, FilePath, DocumentID, MetaEntry } from "@lib/common/models/db.type";
import type { UXFileInfo, UXStat, UXDataWriteOptions } from "@lib/common/models/fileaccess.type";
import { type InternalFileInfo } from "@/common/types.ts";
import type { CustomRegExp } from "@lib/common/utils.regexp.ts";
import { type MapLike } from "@/common/utils.ts";
import { PeriodicProcessor } from "@/common/PeriodicProcessor.ts";
import { LiveSyncCommands } from "@/features/LiveSyncCommands.ts";
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
import type { LiveSyncCore } from "@/main.ts";
type SyncDirection = "push" | "pull" | "safe" | "pullForce" | "pushForce";
declare global {
interface OPTIONAL_SYNC_FEATURES {
FETCH: "FETCH";
OVERWRITE: "OVERWRITE";
MERGE: "MERGE";
DISABLE: "DISABLE";
DISABLE_HIDDEN: "DISABLE_HIDDEN";
}
}
export declare class HiddenFileSync extends LiveSyncCommands {
isThisModuleEnabled(): boolean;
periodicInternalFileScanProcessor: PeriodicProcessor;
get kvDB(): import("../../lib/src/interfaces/KeyValueDatabase").KeyValueDatabase;
getConflictedDoc(path: FilePathWithPrefix, rev: string): Promise<false | import("../../lib/src/common/types").diff_result_leaf>;
onunload(): void;
onload(): void;
private _everyOnDatabaseInitialized;
_everyBeforeReplicate(showNotice: boolean): Promise<boolean>;
private _everyOnloadAfterLoadSettings;
updateSettingCache(): void;
isReady(): boolean;
performStartupScan(showNotice: boolean): Promise<void>;
_everyOnResumeProcess(): Promise<boolean>;
_everyRealizeSettingSyncMode(): Promise<boolean>;
_anyProcessOptionalFileEvent(path: FilePath): Promise<boolean>;
_anyGetOptionalConflictCheckMethod(path: FilePathWithPrefix): Promise<boolean | "newer">;
_anyProcessOptionalSyncFiles(doc: LoadedEntry): Promise<boolean>;
loadFileWithInfo(path: FilePath): Promise<UXFileInfo>;
_fileInfoLastProcessed: MapLike<string, string>;
_fileInfoLastKnown: MapLike<string, number>;
_databaseInfoLastProcessed: MapLike<string, string>;
statToKey(stat: UXStat | null): string;
docToKey(doc: LoadedEntry | MetaEntry): string;
fileToStatKey(file: FilePath, stat?: UXStat | null): Promise<string>;
updateLastProcessedFile(file: FilePath, keySrc: string | UXStat): void;
updateLastProcessedAsActualFile(file: FilePath, stat?: UXStat | null): Promise<void>;
resetLastProcessedFile(targetFiles: FilePath[] | false): void;
getLastProcessedFileMTime(file: FilePath): number;
getLastProcessedFileKey(file: FilePath): string | undefined;
getLastProcessedDatabaseKey(file: FilePath): string | undefined;
updateLastProcessedDatabase(file: FilePath, keySrc: string | MetaEntry | LoadedEntry): void;
updateLastProcessed(path: FilePath, db: MetaEntry | LoadedEntry, stat: UXStat): void;
updateLastProcessedDeletion(path: FilePath, db: MetaEntry | LoadedEntry | false): void;
ensureDir(path: FilePath): Promise<void>;
writeFile(path: FilePath, data: string | ArrayBuffer, opt?: UXDataWriteOptions): Promise<UXStat | null>;
__removeFile(path: FilePath): Promise<"OK" | "ALREADY" | false>;
triggerEvent(path: FilePath): Promise<void>;
updateLastProcessedAsActualDatabase(file: FilePath, doc?: MetaEntry | LoadedEntry | null | false): Promise<void>;
resetLastProcessedDatabase(targetFiles: FilePath[] | false): void;
adoptCurrentStorageFilesAsProcessed(targetFiles: FilePath[] | false): Promise<void>;
adoptCurrentDatabaseFilesAsProcessed(targetFiles: FilePath[] | false): Promise<void>;
semaphore: import("octagonal-wheels/concurrency/semaphore_v2").SemaphoreObject;
serializedForEvent<T>(file: FilePath, fn: () => Promise<T>): Promise<T>;
useStorageFiles(files: FilePath[], showNotice?: boolean, onlyNew?: boolean): Promise<void>;
trackScannedStorageChanges(processFiles: FilePath[], showNotice?: boolean, onlyNew?: boolean, forceWriteAll?: boolean, includeDeleted?: boolean): Promise<void>;
scanAllStorageChanges(showNotice?: boolean, onlyNew?: boolean, forceWriteAll?: boolean, includeDeleted?: boolean): Promise<void | null>;
/**
* check the file is changed or not, and if changed, process it.
*/
trackStorageFileModification(path: FilePath, onlyNew?: boolean, forceWrite?: boolean, includeDeleted?: boolean): Promise<boolean | undefined>;
pendingConflictChecks: Set<FilePathWithPrefix>;
queueConflictCheck(path: FilePathWithPrefix): void;
finishConflictCheck(path: FilePathWithPrefix): void;
requeueConflictCheck(path: FilePathWithPrefix): void;
resolveConflictOnInternalFiles(): Promise<void>;
resolveByNewerEntry(id: DocumentID, path: FilePathWithPrefix, currentDoc: MetaEntry, currentRev: string, conflictedRev: string): Promise<void>;
conflictResolutionProcessor: QueueProcessor<FilePathWithPrefix, {
path: FilePathWithPrefix;
revA: string;
revB: string;
id: DocumentID;
doc: MetaEntry & PouchDB.Core.IdMeta & PouchDB.Core.GetMeta;
}>;
showJSONMergeDialogAndMerge(docA: LoadedEntry, docB: LoadedEntry): Promise<boolean>;
getDocProps(doc: LoadedEntry): {
id: DocumentID;
rev: string | undefined;
revDisplay: string;
prefixedPath: FilePathWithPrefix;
path: FilePath;
isDeleted: boolean;
shortenedId: string;
shortenedPath: string;
};
processReplicationResult(doc: LoadedEntry): Promise<boolean>;
cacheFileRegExps: Map<string, CustomRegExp[][]>;
/**
* Parses the regular expression settings for hidden file synchronization.
* @returns An object containing the ignore and target filters.
*/
parseRegExpSettings(): {
ignoreFilter: CustomRegExp[];
targetFilter: CustomRegExp[];
};
/**
* Checks if the target file path matches the defined patterns.
*/
isTargetFileInPatterns(path: string): boolean;
cacheCustomisationSyncIgnoredFiles: Map<string, string[]>;
/**
* Gets the list of files ignored for customization synchronization.
* @returns An array of ignored file paths (lowercase).
*/
getCustomisationSynchronizationIgnoredFiles(): string[];
/**
* Checks if the given path is not ignored by customization synchronization.
* @param path The file path to check.
* @returns True if the path is not ignored; otherwise, false.
*/
isNotIgnoredByCustomisationSync(path: string): boolean;
isHiddenFileSyncHandlingPath(path: FilePath): boolean;
isTargetFile(path: FilePath): Promise<boolean>;
trackScannedDatabaseChange(processFiles: MetaEntry[], showNotice?: boolean, onlyNew?: boolean, forceWriteAll?: boolean, includeDeletion?: boolean): Promise<void>;
applyOfflineChanges(showNotice: boolean): Promise<void>;
scanAllDatabaseChanges(showNotice?: boolean, onlyNew?: boolean, forceWriteAll?: boolean, includeDeletion?: boolean): Promise<void | null>;
useDatabaseFiles(files: MetaEntry[], showNotice?: boolean, onlyNew?: boolean): Promise<boolean>;
trackDatabaseFileModification(path: FilePath, headerLine: string, preventDoubleProcess?: boolean, onlyNew?: boolean, meta?: MetaEntry | false, includeDeletion?: boolean): Promise<boolean>;
queuedNotificationFiles: Set<string>;
notifyConfigChange(): void;
queueNotification(key: FilePath): void;
rebuildMerging(showNotice: boolean, targetFiles?: FilePath[] | false): Promise<FilePath[]>;
rebuildFromStorage(showNotice: boolean, targetFiles?: FilePath[] | false, onlyNew?: boolean): Promise<FilePath[]>;
getAllDatabaseFiles(): Promise<MetaEntry[]>;
rebuildFromDatabase(showNotice: boolean, targetFiles?: FilePath[] | false, onlyNew?: boolean): Promise<MetaEntry[]>;
initialiseInternalFileSync(direction: SyncDirection, showMessage: boolean, targetFilesSrc?: string[] | false): Promise<void>;
__loadBaseSaveData(file: FilePath, includeContent?: boolean): Promise<LoadedEntry | false>;
storeInternalFileToDatabase(file: InternalFileInfo | UXFileInfo, forceWrite?: boolean): Promise<boolean | undefined>;
deleteInternalFileOnDatabase(filenameSrc: FilePath, forceWrite?: boolean): Promise<boolean | undefined>;
extractInternalFileFromDatabase(storageFilePath: FilePath, force?: boolean, metaEntry?: MetaEntry | LoadedEntry, preventDoubleProcess?: boolean, onlyNew?: boolean, includeDeletion?: boolean): Promise<boolean | undefined>;
__checkIsNeedToWriteFile(storageFilePath: FilePath, content: string | ArrayBuffer): Promise<boolean>;
__writeFile(storageFilePath: FilePath, fileOnDB: LoadedEntry, force: boolean): Promise<false | UXStat>;
__deleteFile(storageFilePath: FilePath): Promise<false | "OK" | "ALREADY">;
private _allAskUsingOptionalSyncFeature;
private __askHiddenFileConfiguration;
private _allSuspendExtraSync;
private _allConfigureOptionalSyncFeature;
configureHiddenFileSync(mode: keyof OPTIONAL_SYNC_FEATURES): Promise<void>;
scanInternalFileNames(): Promise<FilePath[]>;
scanInternalFiles(): Promise<InternalFileInfo[]>;
getFiles(path: string, checkFunction: (path: FilePath) => Promise<boolean> | boolean): Promise<string[]>;
onBindFunction(core: LiveSyncCore, services: typeof core.services): void;
}
export {};
+35
View File
@@ -0,0 +1,35 @@
import type { AnyEntry, DocumentID, FilePath, FilePathWithPrefix } from "@lib/common/models/db.type";
import type { LOG_LEVEL } from "@lib/common/logger";
import type ObsidianLiveSyncPlugin from "@/main.ts";
import type { LiveSyncCore } from "@/main.ts";
import { createInstanceLogFunction } from "@lib/services/lib/logUtils.ts";
export declare abstract class LiveSyncCommands {
/**
* @deprecated This class is deprecated. Please use core
*/
plugin: ObsidianLiveSyncPlugin;
core: LiveSyncCore;
get app(): import("obsidian").App;
get settings(): import("../lib/src/common/types").ObsidianLiveSyncSettings;
get localDatabase(): import("../lib/src/pouchdb/LiveSyncLocalDB").LiveSyncLocalDB;
get services(): import("../lib/src/services/InjectableServices").InjectableServiceHub<import("../lib/src/services/implements/obsidian/ObsidianServiceContext").ObsidianServiceContext>;
path2id(filename: FilePathWithPrefix | FilePath, prefix?: string): Promise<DocumentID>;
getPath(entry: AnyEntry): FilePathWithPrefix;
constructor(plugin: ObsidianLiveSyncPlugin, core: LiveSyncCore);
abstract onunload(): void;
abstract onload(): void | Promise<void>;
_isMainReady(): boolean;
_isMainSuspended(): boolean;
_isDatabaseReady(): boolean;
_log: ReturnType<typeof createInstanceLogFunction>;
_verbose: (msg: unknown, key?: string) => void;
_info: (msg: unknown, key?: string) => void;
_notice: (msg: unknown, key?: string) => void;
_progress: (prefix?: string, level?: LOG_LEVEL) => {
log: (msg: unknown) => void;
once: (msg: unknown) => void;
done: (msg?: string) => void;
};
_debug: (msg: unknown, key?: string) => void;
onBindFunction(core: LiveSyncCore, services: typeof core.services): void;
}
@@ -0,0 +1,58 @@
import type { DocumentID, EntryLeaf } from "@lib/common/models/db.type";
import type { EntryDoc } from "@lib/common/models/db.definition";
import { LiveSyncCommands } from "@/features/LiveSyncCommands";
type ChunkID = DocumentID;
type NoteDocumentID = DocumentID;
type Rev = string;
type ChunkUsageMap = Map<NoteDocumentID, Map<Rev, Set<ChunkID>>>;
export declare class LocalDatabaseMaintenance extends LiveSyncCommands {
onunload(): void;
onload(): void | Promise<void>;
allChunks(includeDeleted?: boolean): Promise<{
used: Set<string>;
existing: Map<string, EntryLeaf>;
}>;
get database(): PouchDB.Database<EntryDoc>;
clearHash(): void;
confirm(title: string, message: string, affirmative?: string, negative?: string): Promise<boolean>;
isAvailable(): boolean;
/**
* Resurrect deleted chunks that are still used in the database.
*/
resurrectChunks(): Promise<void>;
/**
* Commit deletion of files that are marked as deleted.
* This method makes the deletion permanent, and the files will not be recovered.
* After this, chunks that are used in the deleted files become ready for compaction.
*/
commitFileDeletion(): Promise<void>;
/**
* Commit deletion of chunks that are not used in the database.
* This method makes the deletion permanent, and the chunks will not be recovered if the database run compaction.
* After this, the database can shrink the database size by compaction.
* It is recommended to compact the database after this operation (History should be kept once before compaction).
*/
commitChunkDeletion(): Promise<void>;
/**
* Compact the database.
* This method removes all deleted chunks that are not used in the database.
* Make sure all devices are synchronized before running this method.
*/
markUnusedChunks(): Promise<void>;
removeUnusedChunks(): Promise<void>;
scanUnusedChunks(): Promise<{
chunkSet: Set<DocumentID>;
chunkUsageMap: ChunkUsageMap;
unusedSet: Set<DocumentID>;
}>;
/**
* Track changes in the database and update the chunk usage map for garbage collection.
* Note that this only able to perform without Fetch chunks on demand.
*/
trackChanges(fromStart?: boolean, showNotice?: boolean): Promise<void>;
performGC(showingNotice?: boolean): Promise<void>;
analyseDatabase(): Promise<void>;
compactDatabase(): Promise<void>;
gcv3(): Promise<void>;
}
export {};
@@ -0,0 +1,21 @@
import { App, Modal } from "@/deps.ts";
import { mount } from "svelte";
import type { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
export type P2POpenReplicationModalCallback = {
onSync: (peerId: string) => Promise<void>;
onSyncAndClose: (peerId: string) => Promise<void>;
};
export declare class P2POpenReplicationModal extends Modal {
liveSyncReplicator: LiveSyncTrysteroReplicator;
callback?: P2POpenReplicationModalCallback;
component?: ReturnType<typeof mount>;
showResult: boolean;
title: string;
onClosed?: () => void;
rebuildMode: boolean;
constructor(app: App, liveSyncReplicator: LiveSyncTrysteroReplicator, callback?: P2POpenReplicationModalCallback, showResult?: boolean, title?: string, onClosed?: () => void, rebuildMode?: boolean);
onSync(peerId: string): Promise<void>;
onSyncAndClose(peerId: string): Promise<void>;
onOpen(): void;
onClose(): void;
}
@@ -0,0 +1,22 @@
import { App } from "@/deps.ts";
import type { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
/**
* Creates an openReplicationUI factory for Obsidian environments.
* Returns a per-replicator closure that opens the P2P Replication modal
* and performs bidirectional sync (pull then push on success).
*
* Usage:
* const factory = createOpenReplicationUI(app);
* useP2PReplicatorFeature(core, factory);
*/
export declare function createOpenReplicationUI(app: App): (replicator: LiveSyncTrysteroReplicator) => (showResult: boolean) => Promise<boolean | void>;
/**
* Creates an openRebuildUI factory for Obsidian environments.
* Opens the P2P Replication modal in "rebuild" mode — one-way pull only,
* with setOnSetup / clearOnSetup bracketing the replicateFrom call.
*
* Usage:
* const factory = createOpenRebuildUI(app);
* useP2PReplicatorFeature(core, createOpenReplicationUI(app), factory);
*/
export declare function createOpenRebuildUI(app: App): (replicator: LiveSyncTrysteroReplicator) => (showResult: boolean) => Promise<boolean | void>;
@@ -0,0 +1,28 @@
import { Menu, WorkspaceLeaf } from "@/deps.ts";
import { SvelteItemView } from "@/common/SvelteItemView.ts";
import { type PeerStatus } from "@lib/replication/trystero/P2PReplicatorPaneCommon.ts";
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
import type { P2PPaneParams } from "@lib/replication/trystero/UseP2PReplicatorResult";
export declare const VIEW_TYPE_P2P = "p2p-replicator";
export declare class P2PReplicatorPaneView extends SvelteItemView {
core: LiveSyncBaseCore;
private _p2pResult;
icon: string;
title: string;
navigation: boolean;
getIcon(): string;
get replicator(): import("../../../lib/src/replication/trystero/LiveSyncTrysteroReplicator").LiveSyncTrysteroReplicator;
replicateFrom(peer: PeerStatus): Promise<void>;
replicateTo(peer: PeerStatus): Promise<void>;
getRemoteConfig(peer: PeerStatus): Promise<void>;
toggleProp(peer: PeerStatus, prop: "syncOnConnect" | "watchOnConnect" | "syncOnReplicationCommand"): Promise<void>;
m?: Menu;
constructor(leaf: WorkspaceLeaf, core: LiveSyncBaseCore, p2pResult: P2PPaneParams);
getViewType(): string;
getDisplayText(): string;
onClose(): Promise<void>;
instantiateComponent(target: HTMLElement): {
$on?(type: string, callback: (e: any) => void): () => void;
$set?(props: Partial<Record<string, any>>): void;
} & Record<string, any>;
}
@@ -0,0 +1,19 @@
import { WorkspaceLeaf } from "@/deps.ts";
import { SvelteItemView } from "@/common/SvelteItemView.ts";
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
import type { P2PPaneParams } from "@lib/replication/trystero/UseP2PReplicatorResult";
export declare const VIEW_TYPE_P2P_SERVER_STATUS = "p2p-server-status";
export declare class P2PServerStatusPaneView extends SvelteItemView {
core: LiveSyncBaseCore;
private _p2pResult;
icon: string;
navigation: boolean;
constructor(leaf: WorkspaceLeaf, core: LiveSyncBaseCore, p2pResult: P2PPaneParams);
getIcon(): string;
getViewType(): string;
getDisplayText(): string;
instantiateComponent(target: HTMLElement): {
$on?(type: string, callback: (e: any) => void): () => void;
$set?(props: Partial<Record<string, any>>): void;
} & Record<string, any>;
}
+2
View File
@@ -0,0 +1,2 @@
export { DirectFileManipulator } from "./DirectFileManipulatorV2.ts";
export type { DirectFileManipulatorOptions } from "./DirectFileManipulatorV2.ts";
+41
View File
@@ -0,0 +1,41 @@
import type { ObsidianLiveSyncSettings } from "@lib/common/models/setting.type";
/**
* Encode settings to a tiny array to encode in QRCode,
* Due to size limitation of QR code, we encode settings as an array instead of object.
* @param settings settings to encode
*/
export declare function encodeSettingsToQRCodeData(settings: ObsidianLiveSyncSettings): string;
/**
* Decode settings from QR code data string
* @param qr data string from QR code
* @returns Decoded settings
*/
export declare function decodeSettingsFromQRCodeData(qr: string): ObsidianLiveSyncSettings;
export declare const enum OutputFormat {
SVG = 0,
ASCII = 1
}
export interface SplitQRCodeData {
total: number;
parts: string[];
}
/**
* Encode setting string to QR code in specified format
* @param settingString Setting string to encode
* @param format Output format
*/
export declare function encodeQR(settingString: string, format: OutputFormat): string | SplitQRCodeData;
type ErasureProperties = keyof ObsidianLiveSyncSettings;
/**
* Generate setup URI with encrypted settings
* @param settingString Settings to encode
* @param passphrase Passphrase to encrypt the settings
* @param removeProperties Properties to remove from the settings
* Means these properties will not be included in the generated setup URI,
* See also necessaryErasureProperties for properties that will always be removed.
* @param skipDefaultValue Whether to skip default values
* @returns Generated setup URI
*/
export declare function encodeSettingsToSetupURI(settingString: ObsidianLiveSyncSettings, passphrase: string, removeProperties?: ErasureProperties[], skipDefaultValue?: boolean): Promise<string>;
export declare function decodeSettingsFromSetupURI(uri: string, passphrase: string): Promise<false | ObsidianLiveSyncSettings>;
export {};
+24
View File
@@ -0,0 +1,24 @@
import type { FilePathWithPrefix } from "@lib/common/models/db.type";
import type { ISettingService } from "@lib/services/base/IService.ts";
/**
* ContentSplitter interface for splitting content into chunks.
*/
export type SplitOptions = {
blob: Blob;
path: FilePathWithPrefix;
pieceSize: number;
plainSplit: boolean;
minimumChunkSize: number;
useWorker: boolean;
useSegmenter: boolean;
};
/**
* The maximum size, in bytes, of a document to be processed by the content splitter in the foreground.
*/
export declare const MAX_CHUNKS_SIZE_ON_UI = 1024;
/**
* Options for the content splitter.
*/
export type ContentSplitterOptions = {
settingService: ISettingService;
};
@@ -0,0 +1,51 @@
import type { SavingEntry } from "@lib/common/models/db.type";
import { type ContentSplitterOptions, type SplitOptions } from "./ContentSplitter.ts";
export declare abstract class ContentSplitterCore {
/**
* Options for the content splitter.
* These settings include the chunk splitter version and other configurations.
*/
options: ContentSplitterOptions;
/**
* Task for initialising the content splitter.
* This ensures that the splitter is initialised before any operations are performed.
*/
initialised: Promise<boolean> | undefined;
/**
* Constructor for the content splitter core.
* @param params Content splitter options
*/
constructor(params: ContentSplitterOptions);
/**
* Initialise the content splitter with the provided options.
* @param options Content splitter options
*/
abstract initialise(options: ContentSplitterOptions): Promise<boolean>;
/**
* Split the content of the loaded entry into chunks.
* @param entry The loaded entry to be split into chunks
*/
abstract splitContent(entry: SavingEntry): Promise<AsyncGenerator<string, void, unknown> | Generator<string, void, unknown>>;
}
export declare abstract class ContentSplitterBase extends ContentSplitterCore {
initialise(_options: ContentSplitterOptions): Promise<boolean>;
/**
* Check whether the content splitter is available for the given settings.
* @param setting Content splitter options
* @returns True if the content splitter is available; false otherwise
*/
static isAvailableFor(setting: ContentSplitterOptions): boolean;
/**
* Process the content and split it into chunks.
* @param options Blob content to be split into chunks
*/
abstract processSplit(options: SplitOptions): Promise<AsyncGenerator<string, void, unknown> | Generator<string, void, unknown>>;
getParamsFor(entry: SavingEntry): SplitOptions;
/**
* Split the content of the loaded entry into chunks.
* This method waits for the initialisation task to complete before proceeding.
* @param entry The loaded entry to be split into chunks
* @returns A generator that yields the split chunks
*/
splitContent(entry: SavingEntry): Promise<AsyncGenerator<string, void, unknown> | Generator<string, void, unknown>>;
}
@@ -0,0 +1,9 @@
import type { ContentSplitterOptions, SplitOptions } from "./ContentSplitter.ts";
import { ContentSplitterBase } from "./ContentSplitterBase.ts";
/**
* Rabin-Karp content splitter for efficient chunking
*/
export declare class ContentSplitterRabinKarp extends ContentSplitterBase {
static isAvailableFor(setting: ContentSplitterOptions): boolean;
processSplit(options: SplitOptions): Promise<AsyncGenerator<string, void, unknown> | Generator<string, void, unknown>>;
}
@@ -0,0 +1,9 @@
import type { ContentSplitterOptions, SplitOptions } from "./ContentSplitter";
import { ContentSplitterBase } from "./ContentSplitterBase";
/**
* Legacy content splitter for version 1.
*/
export declare class ContentSplitterV1 extends ContentSplitterBase {
static isAvailableFor(setting: ContentSplitterOptions): boolean;
processSplit(options: SplitOptions): Promise<AsyncGenerator<string, void, unknown> | Generator<string, void, unknown>>;
}
@@ -0,0 +1,9 @@
import type { ContentSplitterOptions, SplitOptions } from "./ContentSplitter.ts";
import { ContentSplitterBase } from "./ContentSplitterBase.ts";
/**
* Content splitter for version 2, which supports segmenter-based splitting.
*/
export declare class ContentSplitterV2 extends ContentSplitterBase {
static isAvailableFor(setting: ContentSplitterOptions): boolean;
processSplit(options: SplitOptions): Promise<AsyncGenerator<string, void, unknown> | Generator<string, void, unknown>>;
}
@@ -0,0 +1,12 @@
import type { SavingEntry } from "@lib/common/models/db.type";
import type { ContentSplitterOptions } from "./ContentSplitter";
import { ContentSplitterCore, type ContentSplitterBase } from "./ContentSplitterBase";
/**
* ContentSplitter class that manages the active content splitter based on the provided settings.
*/
export declare class ContentSplitter extends ContentSplitterCore {
_activeSplitter: ContentSplitterBase;
constructor(options: ContentSplitterOptions);
initialise(options: ContentSplitterOptions): Promise<boolean>;
splitContent(entry: SavingEntry): Promise<AsyncGenerator<string, void, unknown> | Generator<string, void, unknown>>;
}
+2
View File
@@ -0,0 +1,2 @@
export type { HasSetResult, HasGetInitialData, ComponentHasResult, GuestDialogProps, DialogSvelteComponentBaseProps, DialogControlBase, } from "@lib/services/implements/base/SvelteDialog.ts";
export { CONTEXT_DIALOG_CONTROLS, setupDialogContext, getDialogContext, SvelteDialogManagerBase, } from "@lib/services/implements/base/SvelteDialog.ts";
+7
View File
@@ -0,0 +1,7 @@
import { type SlipBoard } from "octagonal-wheels/bureau/SlipBoard";
declare global {
interface Slips extends LSSlips {
_dummy: undefined;
}
}
export declare const globalSlipBoard: SlipBoard<Slips>;
+30
View File
@@ -0,0 +1,30 @@
import type { CouchDBConnection, BucketSyncSetting, P2PConnectionInfo } from "./models/setting.type";
export type RemoteConfigurationResult = {
type: "couchdb";
settings: CouchDBConnection;
} | {
type: "s3";
settings: BucketSyncSetting;
} | {
type: "p2p";
settings: P2PConnectionInfo;
} | {
type: "webdav";
settings: any;
};
export declare class ConnectionStringParser {
/**
* Restore settings from URI
*/
static parse(uriString: string): RemoteConfigurationResult;
/**
* 設定からURIを生成する
*/
static serialize(config: RemoteConfigurationResult): string;
private static parseCouchDB;
private static serializeCouchDB;
private static parseS3;
private static serializeS3;
private static parseP2P;
private static serializeP2P;
}
+47
View File
@@ -0,0 +1,47 @@
interface ErrorWithCause extends Error {
cause?: unknown;
}
/**
* Error class for Self-hosted LiveSync errors.
* This class extends the base LiveSyncError class and provides additional context for errors related to LiveSync operations.
* It includes a name property and a cause property to capture the original error.
* The status property returns the HTTP status code if available, defaulting to 500 for internal server errors.
* The class also includes static methods to check whether an error is caused by a specific error class.
*/
export declare class LiveSyncError extends Error implements ErrorWithCause {
name: string;
cause?: Error | object | string;
overrideStatus?: number;
/**
* Returns the HTTP status code associated with the error, if available.
* If the error has a status property, it returns that; otherwise, it defaults to 500 (Internal Server Error).
* @returns {number} The HTTP status code.
*/
get status(): number;
/**
* Constructs a new LiveSyncError instance.
* @param message The error message to be displayed.
*/
constructor(message: string, options?: {
cause?: unknown;
status?: number;
});
/**
* Determines whether an error is caused by a specific error class.
* @param error The error to examine.
* @param errorClass The error class to compare against.
* @returns True if the error is caused by the specified error class; otherwise, false.
* @example
* LiveSyncError.isCausedBy(someSyncParamsFetchError, SyncParamsNotFoundError); // Returns true if the error is caused by SyncParamsNotFoundError; this is usually represented as SyncParamsFetchError at the uppermost layer.
*/
static isCausedBy<T extends LiveSyncError>(error: unknown, errorClass: new (...args: any[]) => T): boolean;
/**
* Creates a new instance of the error class from an existing error.
* @param error The error to wrap.
* @returns A new instance of the error class with the original error's message and stack trace.
*/
static fromError<T extends typeof LiveSyncError>(this: T, error: unknown): InstanceType<T>;
}
export declare class LiveSyncFatalError extends LiveSyncError {
}
export {};
+78
View File
@@ -0,0 +1,78 @@
import type { Confirm } from "@lib/interfaces/Confirm";
import type { ObsidianLiveSyncSettings } from "@lib/common/models/setting.type";
declare enum ConditionType {
PLATFORM_CASE_INSENSITIVE = "platform-case-insensitive",
PLATFORM_CASE_SENSITIVE = "platform-case-sensitive",
REMOTE_CASE_SENSITIVE = "remote-case-sensitive"
}
export declare enum RuleLevel {
Must = 0,
Necessary = 1,
Recommended = 2,
Optional = 3
}
type BaseRule<TType extends string, TValue> = {
level?: RuleLevel;
requireRebuild?: boolean;
requireRebuildLocal?: boolean;
recommendRebuild?: boolean;
reason?: string;
reasonFunc?: (settings: Partial<ObsidianLiveSyncSettings>) => string;
condition?: ConditionType[];
detectionFunc?: (settings: Partial<ObsidianLiveSyncSettings>) => boolean;
value?: TValue;
valueDisplay?: string;
valueDisplayFunc?: (settings: Partial<ObsidianLiveSyncSettings>) => string;
obsoleteValues?: TValue[];
};
type NumberRuleExact = BaseRule<"number", number> & {};
type NumberRuleRange = BaseRule<"number", number> & {
min?: number;
max?: number;
step?: number;
};
type StringRangeRule = BaseRule<"string", string> & {
minLength?: number;
maxLength?: number;
regexp?: string;
};
type StringRule = BaseRule<"string", string> & {};
type BooleanRule = BaseRule<"boolean", boolean> & {};
export type RuleForType<T> = T extends number ? NumberRuleExact | NumberRuleRange : T extends string ? StringRule | StringRangeRule : T extends boolean ? BooleanRule : never;
export type AnyRule = NumberRuleExact | NumberRuleRange | StringRule | StringRangeRule | BooleanRule;
type DoctorCheckSettings = Omit<Partial<ObsidianLiveSyncSettings>, "remoteConfigurations" | "pluginSyncExtendedSetting">;
export type DoctorRegulation = {
version: string;
rules: {
[P in keyof DoctorCheckSettings]: RuleForType<DoctorCheckSettings[P]>;
};
};
export declare const DoctorRegulationV0_24_16: DoctorRegulation;
export declare const DoctorRegulationV0_24_30: DoctorRegulation;
export declare const DoctorRegulationV0_25_0: DoctorRegulation;
export declare const DoctorRegulationV0_25_27: DoctorRegulation;
export declare const DoctorRegulation: DoctorRegulation;
export declare function checkUnsuitableValues(setting: Partial<ObsidianLiveSyncSettings>, regulation?: DoctorRegulation): DoctorRegulation;
export declare const RebuildOptions: {
readonly AutomaticAcceptable: 0;
readonly ConfirmIfRequired: 1;
readonly SkipEvenIfRequired: 2;
};
export type RebuildOptionsType = (typeof RebuildOptions)[keyof typeof RebuildOptions];
export type DoctorOptions = {
localRebuild: RebuildOptionsType;
remoteRebuild: RebuildOptionsType;
activateReason?: string;
forceRescan?: boolean;
};
export type DoctorResult = {
settings: ObsidianLiveSyncSettings;
shouldRebuild: boolean;
shouldRebuildLocal: boolean;
isModified: boolean;
};
export type HasConfirm = {
confirm: Confirm;
};
export declare function performDoctorConsultation(env: HasConfirm, settings: ObsidianLiveSyncSettings, { localRebuild, remoteRebuild, activateReason, forceRescan, }: DoctorOptions): Promise<DoctorResult>;
export {};
+16
View File
@@ -0,0 +1,16 @@
declare class Context<T extends Record<string | number | symbol, any> = object> {
_data: Partial<T>;
children: WeakRef<Context<T>>[];
parent?: Context<T>;
constructor(base?: Context<T>, data?: Partial<T>);
set<V extends keyof T>(key: V, value: T[V]): void;
get<V extends keyof T>(key: V): T[V] | undefined;
setInGlobalContext<V extends keyof T>(key: V, value: T[V]): void;
setInNearestContext<V extends keyof T>(key: V, value: T[V]): void;
spawnContext<V extends Record<string, any>>(data?: V): Context<V & T>;
_disposeChild(child: Context<any>): void;
dispose(): void;
}
export declare function getContext<T extends U, U extends Record<string, any> = object>(data?: T): Context<T & object>;
export declare function getIndependentContext<T extends U, U extends Record<string, any> = object>(data?: T): Context<T>;
export {};
+21
View File
@@ -0,0 +1,21 @@
import type { getLanguage as ObsidianGetLanguage } from "obsidian";
export declare function setGetLanguage(func: typeof ObsidianGetLanguage): void;
export declare function getLanguage(): string;
export declare const compatGlobal: typeof window;
export type CompatTimeoutHandle = ReturnType<typeof setTimeout> | number;
export type CompatIntervalHandle = ReturnType<typeof setInterval> | number;
/**
* A wrapper around the global fetch function to ensure compatibility across different environments.
* In Obsidian, they recommend using their own requestUrl for better performance and reliability.
* However, at least for now, requestUrl cannot handle multiple concurrent requests, which causes
* problems for synchronise lively. So we will use the global fetch for now.
* If the situation changes in the future, change this function to use requestUrl.
* @param {RequestInfo} input The resource that you wish to fetch. Can be either a string or a Request object.
* @param {RequestInit} [init] An options object containing any custom settings that you want to apply to the request.
* @returns {Promise<Response>} A Promise that resolves to the Response to that request, whether it is successful or not.
*/
export declare const _fetch: {
(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
} & typeof fetch;
export declare const _activeDocument: Document;
+3
View File
@@ -0,0 +1,3 @@
declare const manifestVersion: string;
declare const packageVersion: string;
export { manifestVersion, packageVersion };
+18
View File
@@ -0,0 +1,18 @@
import type { AllMessageKeys, I18N_LANGS } from "./rosetta";
import type { TaggedType } from "@lib/common/models/shared.type.util";
export declare let currentLang: I18N_LANGS;
export declare function getResolvedLang(lang?: I18N_LANGS): I18N_LANGS;
export declare function isAutoDisplayLanguage(lang: I18N_LANGS): boolean;
export declare function __getMissingTranslations(): string[];
export declare function __onMissingTranslation(callback: (key: string) => void): void;
export declare function setLang(lang: I18N_LANGS): void;
export declare function $t(message: string, lang?: I18N_LANGS): string;
export declare function translateIfAvailable(message: string, lang?: I18N_LANGS): string;
/**
* TagFunction to Automatically translate.
* @param strings
* @param values
* @returns
*/
export declare function $f(strings: TemplateStringsArray, ...values: string[]): string;
export declare function $msg<T extends AllMessageKeys>(key: T, params?: Record<string, string>, lang?: I18N_LANGS): TaggedType<string, T>;
+2
View File
@@ -0,0 +1,2 @@
export * from "octagonal-wheels/common/logger";
export type * from "octagonal-wheels/common/logger";
@@ -0,0 +1,7 @@
import { PartialMessages as def } from "./def.ts";
import { type MESSAGE } from "@lib/common/rosetta.ts";
type MessageKeys = keyof typeof def.def;
export declare const allMessages: {
[key: string]: MESSAGE;
};
export { type MessageKeys };
File diff suppressed because it is too large Load Diff
+297
View File
@@ -0,0 +1,297 @@
export declare const PartialMessages: {
readonly de: {
"(Active)": string;
"(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.": string;
"(RegExp) If this is set, any changes to local and remote files that match this will be skipped.": string;
"(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"> [!INFO]- The connected devices have been detected as follows:\n${devices}": string;
"A Setup URI is a single string of text containing your server address and authentication details. Using a URI, if one was generated by your server installation script, provides a simple and secure configuration.": string;
Activate: string;
"Add default patterns": string;
"Add new connection": string;
"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": string;
Back: string;
"Back to non-configured": string;
Cancel: string;
"Cancel Garbage Collection": string;
"Check and convert non-path-obfuscated files": string;
"Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": string;
"cmdConfigSync.showCustomizationSync": string;
"Compaction in progress on remote database...": string;
"Compaction on remote database completed successfully.": string;
"Compaction on remote database failed.": string;
"Compaction on remote database timed out.": string;
"Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.": string;
"Compatibility (Conflict Behaviour)": string;
"Compatibility (Database structure)": string;
"Compatibility (Internal API Usage)": string;
"Compatibility (Metadata)": string;
"Compatibility (Remote Database)": string;
"Compatibility (Trouble addressed)": string;
Configure: string;
"Configure And Change Remote": string;
"Configure E2EE": string;
"Configure Remote": string;
"Configure the same server information as your other devices again, manually, very advanced users only.": string;
"Connection Method": string;
"Continue to CouchDB setup": string;
"Continue to Peer-to-Peer only setup": string;
"Continue to S3/MinIO/R2 setup": string;
Copy: string;
"Cross-platform": string;
"Current adapter: {adapter}": string;
"Customization Sync (Beta3)": string;
"Database Adapter": string;
Default: string;
Delete: string;
"Delete all customization sync data": string;
"Delete all data on the remote server.": string;
"Delete local database to reset or uninstall Self-hosted LiveSync": string;
"Delete Remote Configuration": string;
"Delete remote configuration '{name}'?": string;
desktop: string;
Device: string;
"Device name": string;
"Device Setup Method": string;
"Disables all synchronization and restart.": string;
"Display name": string;
Duplicate: string;
"Duplicate remote": string;
"E2EE Configuration": string;
"Edge case addressing (Behaviour)": string;
"Edge case addressing (Database)": string;
"Edge case addressing (Processing)": string;
"Emergency restart": string;
"Encrypting sensitive configuration items": string;
"Enter Server Information": string;
"Enter the server information manually": string;
Export: string;
"Failed to connect to remote for compaction.": string;
"Failed to connect to remote for compaction. ${reason}": string;
"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": string;
"Failed to start replication after Garbage Collection.": string;
"Fetch remote settings": string;
"File to resolve conflict": string;
"First, please select the option that best describes your current situation.": string;
"Flag and restart": string;
"Fresh Start Wipe": string;
"Garbage Collection cancelled by user.": string;
"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": string;
"Garbage Collection Confirmation": string;
"Garbage Collection V3 (Beta)": string;
"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": string;
"Garbage Collection: Scanned ${scanned} / ~${docCount}": string;
"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": string;
"Hidden Files": string;
"Hide completely": string;
"How to display network errors when the sync server is unreachable.": string;
"How would you like to configure the connection to your server?": string;
"I am adding a device to an existing synchronisation setup": string;
"I am setting this up for the first time": string;
"I know my server details, let me enter them": string;
"If enabled, the \u26D4 icon will be shown inside the status instead of the file warnings banner. No details will be shown.": string;
"Ignore and Proceed": string;
"Ignore patterns": string;
"Import connection": string;
"Initialise all journal history, On the next sync, every item will be received and sent.": string;
Later: string;
"Limit: {datetime} ({timestamp})": string;
Lock: string;
"Lock Server": string;
"Lock the remote server to prevent synchronization with other devices.": string;
"More actions": string;
"Network warning style": string;
"New Remote": string;
"No connected device information found. Cancelling Garbage Collection.": string;
"No limit configured": string;
"No, please take me back": string;
"Node ID": string;
"Node Information Missing": string;
"Non-Synchronising files": string;
"Normal Files": string;
"Obsidian version": string;
"obsidianLiveSyncSettingTab.btnApply": string;
"obsidianLiveSyncSettingTab.btnDisable": string;
"obsidianLiveSyncSettingTab.btnNext": string;
"obsidianLiveSyncSettingTab.buttonNext": string;
"obsidianLiveSyncSettingTab.defaultLanguage": string;
"obsidianLiveSyncSettingTab.labelDisabled": string;
"obsidianLiveSyncSettingTab.labelEnabled": string;
"obsidianLiveSyncSettingTab.logConfiguredDisabled": string;
"obsidianLiveSyncSettingTab.logConfiguredLiveSync": string;
"obsidianLiveSyncSettingTab.logConfiguredPeriodic": string;
"obsidianLiveSyncSettingTab.logSelectAnyPreset": string;
"obsidianLiveSyncSettingTab.msgConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": string;
"obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.msgGenerateSetupURI": string;
"obsidianLiveSyncSettingTab.msgInvalidPassphrase": string;
"obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": string;
"obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": string;
"obsidianLiveSyncSettingTab.optionDisableAllAutomatic": string;
"obsidianLiveSyncSettingTab.optionLiveSync": string;
"obsidianLiveSyncSettingTab.optionOnEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicAndEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicWithBatch": string;
"obsidianLiveSyncSettingTab.titleAppearance": string;
"obsidianLiveSyncSettingTab.titleConflictResolution": string;
"obsidianLiveSyncSettingTab.titleCongratulations": string;
"obsidianLiveSyncSettingTab.titleCouchDB": string;
"obsidianLiveSyncSettingTab.titleDeletionPropagation": string;
"obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": string;
"obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.titleFetchConfig": string;
"obsidianLiveSyncSettingTab.titleHiddenFiles": string;
"obsidianLiveSyncSettingTab.titleLogging": string;
"obsidianLiveSyncSettingTab.titleMinioS3R2": string;
"obsidianLiveSyncSettingTab.titleNotification": string;
"obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.titleRemoteServer": string;
"obsidianLiveSyncSettingTab.titleSynchronizationMethod": string;
"obsidianLiveSyncSettingTab.titleSynchronizationPreset": string;
"obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": string;
"obsidianLiveSyncSettingTab.titleUpdateThinning": string;
Ok: string;
"Old Algorithm": string;
"Older fallback (Slow, W/O WebAssembly)": string;
"Overwrite patterns": string;
"Overwrite remote": string;
"Overwrite remote with local DB and passphrase.": string;
"Overwrite Server Data with This Device's Files": string;
"paneMaintenance.markDeviceResolvedAfterBackup": string;
"paneMaintenance.remoteLockedAndDeviceNotAccepted": string;
"paneMaintenance.remoteLockedResolvedDevice": string;
"paneMaintenance.unlockDatabaseReady": string;
"Paste a connection string": string;
"Paste the Setup URI generated from one of your active devices.": string;
"Patterns to match files for overwriting instead of merging": string;
"Patterns to match files for syncing": string;
"Peer-to-Peer only": string;
"Peer-to-Peer Synchronisation": string;
Perform: string;
"Perform cleanup": string;
"Perform Garbage Collection": string;
"Perform Garbage Collection to remove unused chunks and reduce database size.": string;
"Pick a file to resolve conflict": string;
"Please disable 'Read chunks online' in settings to use Garbage Collection.": string;
"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": string;
"Please select 'Cancel' explicitly to cancel this operation.": string;
"Please select a method to import the settings from another device.": string;
"Please select an option to proceed": string;
"Please select the type of server to which you are connecting.": string;
"Please set this device name": string;
"Plug-in version": string;
"Proceed Garbage Collection": string;
"Proceed with Setup URI": string;
"Proceeding with Garbage Collection, ignoring missing nodes.": string;
"Proceeding with Garbage Collection.": string;
Progress: string;
"PureJS fallback (Fast, W/O WebAssembly)": string;
"Purge all download/upload cache.": string;
"Purge all journal counter": string;
"Rebuild local and remote database with local files.": string;
"Rebuilding Operations (Remote Only)": string;
"Recreate all": string;
"Recreate missing chunks for all files": string;
Remediation: string;
"Remediation Setting Changed": string;
"Remote Database Tweak (In sunset)": string;
"Remote Databases": string;
"Remote name": string;
Rename: string;
Resend: string;
"Resend all chunks to the remote.": string;
Reset: string;
"Reset all": string;
"Reset all journal counter": string;
"Reset journal received history": string;
"Reset journal sent history": string;
"Reset received": string;
"Reset sent history": string;
"Reset Synchronisation information": string;
"Reset Synchronisation on This Device": string;
"Resolve All": string;
"Resolve all conflicted files": string;
"Resolve All conflicted files by the newer one": string;
"Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.": string;
"Restart Now": string;
"Restore or reconstruct local database from remote.": string;
"S3/MinIO/R2 Object Storage": string;
"Scan a QR Code (Recommended for mobile)": string;
"Scan the QR code displayed on an active device using this device's camera.": string;
"Schedule and Restart": string;
"Scram!": string;
"Select the database adapter to use.": string;
Send: string;
"Send chunks": string;
"Setting.GenerateKeyPair.Desc": string;
"Setting.GenerateKeyPair.Title": string;
"Setup URI dialog cancelled.": string;
"Setup.RemoteE2EE.AdvancedTitle": string;
"Setup.RemoteE2EE.AlgorithmWarning": string;
"Setup.RemoteE2EE.ButtonCancel": string;
"Setup.RemoteE2EE.ButtonProceed": string;
"Setup.RemoteE2EE.DefaultAlgorithmDesc": string;
"Setup.RemoteE2EE.Guidance": string;
"Setup.RemoteE2EE.LabelEncrypt": string;
"Setup.RemoteE2EE.LabelEncryptionAlgorithm": string;
"Setup.RemoteE2EE.LabelObfuscateProperties": string;
"Setup.RemoteE2EE.MultiDestinationWarning": string;
"Setup.RemoteE2EE.ObfuscatePropertiesDesc": string;
"Setup.RemoteE2EE.PassphraseValidationLine1": string;
"Setup.RemoteE2EE.PassphraseValidationLine2": string;
"Setup.RemoteE2EE.PlaceholderPassphrase": string;
"Setup.RemoteE2EE.StronglyRecommendedLine1": string;
"Setup.RemoteE2EE.StronglyRecommendedLine2": string;
"Setup.RemoteE2EE.StronglyRecommendedTitle": string;
"Setup.RemoteE2EE.Title": string;
"Setup.ScanQRCode.ButtonClose": string;
"Setup.ScanQRCode.Guidance": string;
"Setup.ScanQRCode.Step1": string;
"Setup.ScanQRCode.Step2": string;
"Setup.ScanQRCode.Step3": string;
"Setup.ScanQRCode.Step4": string;
"Setup.ScanQRCode.Title": string;
"Setup.UseSetupURI.ButtonCancel": string;
"Setup.UseSetupURI.ButtonProceed": string;
"Setup.UseSetupURI.ErrorFailedToParse": string;
"Setup.UseSetupURI.ErrorPassphraseRequired": string;
"Setup.UseSetupURI.GuidanceLine1": string;
"Setup.UseSetupURI.GuidanceLine2": string;
"Setup.UseSetupURI.InvalidInfo": string;
"Setup.UseSetupURI.LabelPassphrase": string;
"Setup.UseSetupURI.LabelSetupURI": string;
"Setup.UseSetupURI.PlaceholderPassphrase": string;
"Setup.UseSetupURI.Title": string;
"Setup.UseSetupURI.ValidInfo": string;
"Show full banner": string;
"Show icon only": string;
"Show status icon instead of file warnings banner": string;
"Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.": string;
"Switch to IDB": string;
"Switch to IndexedDB": string;
"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": string;
"Synchronising files": string;
Syncing: string;
"Target patterns": string;
"The following accepted nodes are missing its node information:\n- ${missingNodes}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.": string;
"This feature enables direct synchronisation between devices. No server is required, but both devices must be online at the same time for synchronisation to occur, and some features may be limited. Internet connection is only required to signalling (detecting peers) and not for data transfer.": string;
"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": string;
"This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": string;
"This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": string;
"Use a Setup URI (Recommended)": string;
"Verify all": string;
"Verify and repair all files": string;
"We will now guide you through a few questions to simplify the synchronisation setup.": string;
"We will now proceed with the server configuration.": string;
"Welcome to Self-hosted LiveSync": string;
"xxhash32 (Fast but less collision resistance)": string;
"xxhash64 (Fastest)": string;
"Yes, I want to add this device to my existing synchronisation": string;
"Yes, I want to set up a new synchronisation": string;
"You are adding this device to an existing synchronisation setup.": string;
};
};
File diff suppressed because it is too large Load Diff
+689
View File
@@ -0,0 +1,689 @@
export declare const PartialMessages: {
readonly es: {
"(Active)": string;
"(BETA) Always overwrite with a newer file": string;
"(Beta) Use ignore files": string;
"(Days passed, 0 to disable automatic-deletion)": string;
"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.": string;
"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.": string;
"(Mega chars)": string;
"(Not recommended) If set, credentials will be stored in the file.": string;
"(Obsolete) Use an old adapter for compatibility": string;
"(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.": string;
"(RegExp) If this is set, any changes to local and remote files that match this will be skipped.": string;
"(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"A Setup URI is a single string of text containing your server address and authentication details. Using a URI, if one was generated by your server installation script, provides a simple and secure configuration.": string;
"Access Key": string;
Activate: string;
"Add default patterns": string;
"Add new connection": string;
"Always prompt merge conflicts": string;
"Apply Latest Change if Conflicting": string;
"Apply preset configuration": string;
"Ask a passphrase at every launch": string;
"Automatically Sync all files when opening Obsidian.": string;
Back: string;
"Back to non-configured": string;
"Batch database update": string;
"Batch limit": string;
"Batch size": string;
"Batch size of on-demand fetching": string;
"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.": string;
"Bucket Name": string;
Cancel: string;
"Check and convert non-path-obfuscated files": string;
"Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": string;
"cmdConfigSync.showCustomizationSync": string;
"Comma separated `.gitignore, .dockerignore`": string;
"Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.": string;
"Compatibility (Conflict Behaviour)": string;
"Compatibility (Database structure)": string;
"Compatibility (Internal API Usage)": string;
"Compatibility (Metadata)": string;
"Compatibility (Remote Database)": string;
"Compatibility (Trouble addressed)": string;
"Compute revisions for chunks (Previous behaviour)": string;
"Configuration Encryption": string;
Configure: string;
"Configure And Change Remote": string;
"Configure E2EE": string;
"Configure Remote": string;
"Configure the same server information as your other devices again, manually, very advanced users only.": string;
"Connection Method": string;
"Continue to CouchDB setup": string;
"Continue to Peer-to-Peer only setup": string;
"Continue to S3/MinIO/R2 setup": string;
Copy: string;
"CouchDB Connection Tweak": string;
"Cross-platform": string;
"Current adapter: {adapter}": string;
"Customization Sync": string;
"Customization Sync (Beta3)": string;
"Data Compression": string;
"Database Adapter": string;
"Database Name": string;
"Database suffix": string;
Default: string;
"Delay conflict resolution of inactive files": string;
"Delay merge conflict prompt for inactive files.": string;
Delete: string;
"Delete all customization sync data": string;
"Delete all data on the remote server.": string;
"Delete local database to reset or uninstall Self-hosted LiveSync": string;
"Delete old metadata of deleted files on start-up": string;
"Delete Remote Configuration": string;
"Delete remote configuration '{name}'?": string;
desktop: string;
Developer: string;
"Device name": string;
"Device Setup Method": string;
"Disables all synchronization and restart.": string;
"Disables logging, only shows notifications. Please disable if you report an issue.": string;
"Display Language": string;
"Display name": string;
"Do not check configuration mismatch before replication": string;
"Do not keep metadata of deleted files.": string;
"Do not split chunks in the background": string;
"Do not use internal API": string;
Duplicate: string;
"Duplicate remote": string;
"E2EE Configuration": string;
"Edge case addressing (Behaviour)": string;
"Edge case addressing (Database)": string;
"Edge case addressing (Processing)": string;
"Emergency restart": string;
"Enable advanced features": string;
"Enable customization sync": string;
"Enable Developers' Debug Tools.": string;
"Enable edge case treatment features": string;
"Enable poweruser features": string;
"Enable this if your Object Storage doesn't support CORS": string;
"Enable this option to automatically apply the most recent change to documents even when it conflicts": string;
"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": string;
"Encrypting sensitive configuration items": string;
"Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": string;
"End-to-End Encryption": string;
"Endpoint URL": string;
"Enhance chunk size": string;
"Enter Server Information": string;
"Enter the server information manually": string;
Export: string;
Fetch: string;
"Fetch chunks on demand": string;
"Fetch database with previous behaviour": string;
"Fetch remote settings": string;
"File to resolve conflict": string;
Filename: string;
"First, please select the option that best describes your current situation.": string;
"Flag and restart": string;
"Forces the file to be synced when opened.": string;
"Fresh Start Wipe": string;
"Garbage Collection V3 (Beta)": string;
"Handle files as Case-Sensitive": string;
"Hidden Files": string;
"How to display network errors when the sync server is unreachable.": string;
"How would you like to configure the connection to your server?": string;
"I am adding a device to an existing synchronisation setup": string;
"I am setting this up for the first time": string;
"I know my server details, let me enter them": string;
"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": string;
"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.": string;
"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": string;
"If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": string;
"If enabled, the \u26D4 icon will be shown inside the status instead of the file warnings banner. No details will be shown.": string;
"If enabled, the file under 1kb will be processed in the UI thread.": string;
"If enabled, the notification of hidden files change will be suppressed.": string;
"If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": string;
"If this enabled, All files are handled as case-Sensitive (Previous behaviour).": string;
"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": string;
"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.": string;
"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.": string;
"Ignore files": string;
"Ignore patterns": string;
"Import connection": string;
"Incubate Chunks in Document": string;
"Initialise all journal history, On the next sync, every item will be received and sent.": string;
"Interval (sec)": string;
"Keep empty folder": string;
"lang-de": string;
"lang-es": string;
"lang-fr": string;
"lang-ja": string;
"lang-ru": string;
"lang-zh": string;
"lang-zh-tw": string;
Later: string;
"Limit: {datetime} ({timestamp})": string;
"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": string;
"liveSyncReplicator.beforeLiveSync": string;
"liveSyncReplicator.cantReplicateLowerValue": string;
"liveSyncReplicator.checkingLastSyncPoint": string;
"liveSyncReplicator.couldNotConnectTo": string;
"liveSyncReplicator.couldNotConnectToRemoteDb": string;
"liveSyncReplicator.couldNotConnectToServer": string;
"liveSyncReplicator.couldNotConnectToURI": string;
"liveSyncReplicator.couldNotMarkResolveRemoteDb": string;
"liveSyncReplicator.liveSyncBegin": string;
"liveSyncReplicator.lockRemoteDb": string;
"liveSyncReplicator.markDeviceResolved": string;
"liveSyncReplicator.oneShotSyncBegin": string;
"liveSyncReplicator.remoteDbCorrupted": string;
"liveSyncReplicator.remoteDbCreatedOrConnected": string;
"liveSyncReplicator.remoteDbDestroyed": string;
"liveSyncReplicator.remoteDbDestroyError": string;
"liveSyncReplicator.remoteDbMarkedResolved": string;
"liveSyncReplicator.replicationClosed": string;
"liveSyncReplicator.replicationInProgress": string;
"liveSyncReplicator.retryLowerBatchSize": string;
"liveSyncReplicator.unlockRemoteDb": string;
"liveSyncSetting.errorNoSuchSettingItem": string;
"liveSyncSetting.originalValue": string;
"liveSyncSetting.valueShouldBeInRange": string;
"liveSyncSettings.btnApply": string;
"Local Database Tweak": string;
Lock: string;
"Lock Server": string;
"Lock the remote server to prevent synchronization with other devices.": string;
"logPane.autoScroll": string;
"logPane.logWindowOpened": string;
"logPane.pause": string;
"logPane.title": string;
"logPane.wrap": string;
"Maximum delay for batch database updating": string;
"Maximum file size": string;
"Maximum Incubating Chunk Size": string;
"Maximum Incubating Chunks": string;
"Maximum Incubation Period": string;
"MB (0 to disable).": string;
"Memory cache": string;
"Memory cache size (by total characters)": string;
"Memory cache size (by total items)": string;
Merge: string;
"Minimum delay for batch database updating": string;
"moduleCheckRemoteSize.logCheckingStorageSizes": string;
"moduleCheckRemoteSize.logCurrentStorageSize": string;
"moduleCheckRemoteSize.logExceededWarning": string;
"moduleCheckRemoteSize.logThresholdEnlarged": string;
"moduleCheckRemoteSize.msgConfirmRebuild": string;
"moduleCheckRemoteSize.msgDatabaseGrowing": string;
"moduleCheckRemoteSize.msgSetDBCapacity": string;
"moduleCheckRemoteSize.option2GB": string;
"moduleCheckRemoteSize.option800MB": string;
"moduleCheckRemoteSize.optionAskMeLater": string;
"moduleCheckRemoteSize.optionDismiss": string;
"moduleCheckRemoteSize.optionIncreaseLimit": string;
"moduleCheckRemoteSize.optionNoWarn": string;
"moduleCheckRemoteSize.optionRebuildAll": string;
"moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": string;
"moduleCheckRemoteSize.titleDatabaseSizeNotify": string;
"moduleInputUIObsidian.defaultTitleConfirmation": string;
"moduleInputUIObsidian.defaultTitleSelect": string;
"moduleInputUIObsidian.optionNo": string;
"moduleInputUIObsidian.optionYes": string;
"moduleLiveSyncMain.logAdditionalSafetyScan": string;
"moduleLiveSyncMain.logLoadingPlugin": string;
"moduleLiveSyncMain.logPluginInitCancelled": string;
"moduleLiveSyncMain.logPluginVersion": string;
"moduleLiveSyncMain.logReadChangelog": string;
"moduleLiveSyncMain.logSafetyScanCompleted": string;
"moduleLiveSyncMain.logSafetyScanFailed": string;
"moduleLiveSyncMain.logUnloadingPlugin": string;
"moduleLiveSyncMain.logVersionUpdate": string;
"moduleLiveSyncMain.msgScramEnabled": string;
"moduleLiveSyncMain.optionKeepLiveSyncDisabled": string;
"moduleLiveSyncMain.optionResumeAndRestart": string;
"moduleLiveSyncMain.titleScramEnabled": string;
"moduleLocalDatabase.logWaitingForReady": string;
"moduleLog.showLog": string;
"moduleMigration.docUri": string;
"moduleMigration.logBulkSendCorrupted": string;
"moduleMigration.logFetchRemoteTweakFailed": string;
"moduleMigration.logLocalDatabaseNotReady": string;
"moduleMigration.logMigratedSameBehaviour": string;
"moduleMigration.logMigrationFailed": string;
"moduleMigration.logRedflag2CreationFail": string;
"moduleMigration.logRemoteTweakUnavailable": string;
"moduleMigration.logSetupCancelled": string;
"moduleMigration.msgFetchRemoteAgain": string;
"moduleMigration.msgInitialSetup": string;
"moduleMigration.msgRecommendSetupUri": string;
"moduleMigration.msgSinceV02321": string;
"moduleMigration.optionAdjustRemote": string;
"moduleMigration.optionDecideLater": string;
"moduleMigration.optionEnableBoth": string;
"moduleMigration.optionEnableFilenameCaseInsensitive": string;
"moduleMigration.optionEnableFixedRevisionForChunks": string;
"moduleMigration.optionHaveSetupUri": string;
"moduleMigration.optionKeepPreviousBehaviour": string;
"moduleMigration.optionManualSetup": string;
"moduleMigration.optionNoAskAgain": string;
"moduleObsidianMenu.replicate": string;
"More actions": string;
"Move remotely deleted files to the trash, instead of deleting.": string;
"Network warning style": string;
"New Remote": string;
"No limit configured": string;
"No, please take me back": string;
"Non-Synchronising files": string;
"Normal Files": string;
"Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": string;
"Notify all setting files": string;
"Notify customized": string;
"Notify when other device has newly customized.": string;
"Notify when the estimated remote storage size exceeds on start up": string;
"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.": string;
"Number of changes to sync at a time. Defaults to 50. Minimum is 2.": string;
"obsidianLiveSyncSettingTab.btnApply": string;
"obsidianLiveSyncSettingTab.btnCheck": string;
"obsidianLiveSyncSettingTab.btnCopy": string;
"obsidianLiveSyncSettingTab.btnDisable": string;
"obsidianLiveSyncSettingTab.btnDiscard": string;
"obsidianLiveSyncSettingTab.btnEnable": string;
"obsidianLiveSyncSettingTab.btnFix": string;
"obsidianLiveSyncSettingTab.btnGotItAndUpdated": string;
"obsidianLiveSyncSettingTab.btnNext": string;
"obsidianLiveSyncSettingTab.btnStart": string;
"obsidianLiveSyncSettingTab.btnTest": string;
"obsidianLiveSyncSettingTab.btnUse": string;
"obsidianLiveSyncSettingTab.buttonFetch": string;
"obsidianLiveSyncSettingTab.buttonNext": string;
"obsidianLiveSyncSettingTab.defaultLanguage": string;
"obsidianLiveSyncSettingTab.descConnectSetupURI": string;
"obsidianLiveSyncSettingTab.descCopySetupURI": string;
"obsidianLiveSyncSettingTab.descEnableLiveSync": string;
"obsidianLiveSyncSettingTab.descFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.descManualSetup": string;
"obsidianLiveSyncSettingTab.descTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.descValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.errAccessForbidden": string;
"obsidianLiveSyncSettingTab.errCannotContinueTest": string;
"obsidianLiveSyncSettingTab.errCorsCredentials": string;
"obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": string;
"obsidianLiveSyncSettingTab.errCorsOrigins": string;
"obsidianLiveSyncSettingTab.errEnableCors": string;
"obsidianLiveSyncSettingTab.errMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.errMaxRequestSize": string;
"obsidianLiveSyncSettingTab.errMissingWwwAuth": string;
"obsidianLiveSyncSettingTab.errRequireValidUser": string;
"obsidianLiveSyncSettingTab.errRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.labelDisabled": string;
"obsidianLiveSyncSettingTab.labelEnabled": string;
"obsidianLiveSyncSettingTab.levelAdvanced": string;
"obsidianLiveSyncSettingTab.levelEdgeCase": string;
"obsidianLiveSyncSettingTab.levelPowerUser": string;
"obsidianLiveSyncSettingTab.linkOpenInBrowser": string;
"obsidianLiveSyncSettingTab.linkPageTop": string;
"obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": string;
"obsidianLiveSyncSettingTab.linkTroubleshooting": string;
"obsidianLiveSyncSettingTab.logCannotUseCloudant": string;
"obsidianLiveSyncSettingTab.logCheckingConfigDone": string;
"obsidianLiveSyncSettingTab.logCheckingConfigFailed": string;
"obsidianLiveSyncSettingTab.logCheckingDbConfig": string;
"obsidianLiveSyncSettingTab.logCheckPassphraseFailed": string;
"obsidianLiveSyncSettingTab.logConfiguredDisabled": string;
"obsidianLiveSyncSettingTab.logConfiguredLiveSync": string;
"obsidianLiveSyncSettingTab.logConfiguredPeriodic": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigFail": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigSet": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": string;
"obsidianLiveSyncSettingTab.logDatabaseConnected": string;
"obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": string;
"obsidianLiveSyncSettingTab.logEncryptionNoSupport": string;
"obsidianLiveSyncSettingTab.logErrorOccurred": string;
"obsidianLiveSyncSettingTab.logEstimatedSize": string;
"obsidianLiveSyncSettingTab.logPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.logPassphraseNotCompatible": string;
"obsidianLiveSyncSettingTab.logRebuildNote": string;
"obsidianLiveSyncSettingTab.logSelectAnyPreset": string;
"obsidianLiveSyncSettingTab.msgAreYouSureProceed": string;
"obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": string;
"obsidianLiveSyncSettingTab.msgConfigCheck": string;
"obsidianLiveSyncSettingTab.msgConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.msgConnectionCheck": string;
"obsidianLiveSyncSettingTab.msgConnectionProxyNote": string;
"obsidianLiveSyncSettingTab.msgCurrentOrigin": string;
"obsidianLiveSyncSettingTab.msgDiscardConfirmation": string;
"obsidianLiveSyncSettingTab.msgDone": string;
"obsidianLiveSyncSettingTab.msgEnableCors": string;
"obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": string;
"obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.msgGenerateSetupURI": string;
"obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": string;
"obsidianLiveSyncSettingTab.msgInvalidPassphrase": string;
"obsidianLiveSyncSettingTab.msgNewVersionNote": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSInfo": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSWarning": string;
"obsidianLiveSyncSettingTab.msgNotice": string;
"obsidianLiveSyncSettingTab.msgObjectStorageWarning": string;
"obsidianLiveSyncSettingTab.msgOriginCheck": string;
"obsidianLiveSyncSettingTab.msgRebuildRequired": string;
"obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": string;
"obsidianLiveSyncSettingTab.msgSetCorsCredentials": string;
"obsidianLiveSyncSettingTab.msgSetCorsOrigins": string;
"obsidianLiveSyncSettingTab.msgSetMaxDocSize": string;
"obsidianLiveSyncSettingTab.msgSetMaxRequestSize": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUser": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.msgSettingModified": string;
"obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": string;
"obsidianLiveSyncSettingTab.msgSetWwwAuth": string;
"obsidianLiveSyncSettingTab.nameApplySettings": string;
"obsidianLiveSyncSettingTab.nameConnectSetupURI": string;
"obsidianLiveSyncSettingTab.nameCopySetupURI": string;
"obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameDiscardSettings": string;
"obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameEnableLiveSync": string;
"obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": string;
"obsidianLiveSyncSettingTab.nameManualSetup": string;
"obsidianLiveSyncSettingTab.nameTestConnection": string;
"obsidianLiveSyncSettingTab.nameTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.okAdminPrivileges": string;
"obsidianLiveSyncSettingTab.okCorsCredentials": string;
"obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": string;
"obsidianLiveSyncSettingTab.okCorsOriginMatched": string;
"obsidianLiveSyncSettingTab.okCorsOrigins": string;
"obsidianLiveSyncSettingTab.okEnableCors": string;
"obsidianLiveSyncSettingTab.okMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.okMaxRequestSize": string;
"obsidianLiveSyncSettingTab.okRequireValidUser": string;
"obsidianLiveSyncSettingTab.okRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.okWwwAuth": string;
"obsidianLiveSyncSettingTab.optionApply": string;
"obsidianLiveSyncSettingTab.optionCancel": string;
"obsidianLiveSyncSettingTab.optionCouchDB": string;
"obsidianLiveSyncSettingTab.optionDisableAllAutomatic": string;
"obsidianLiveSyncSettingTab.optionFetchFromRemote": string;
"obsidianLiveSyncSettingTab.optionHere": string;
"obsidianLiveSyncSettingTab.optionLiveSync": string;
"obsidianLiveSyncSettingTab.optionMinioS3R2": string;
"obsidianLiveSyncSettingTab.optionOkReadEverything": string;
"obsidianLiveSyncSettingTab.optionOnEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicAndEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicWithBatch": string;
"obsidianLiveSyncSettingTab.optionRebuildBoth": string;
"obsidianLiveSyncSettingTab.optionSaveOnlySettings": string;
"obsidianLiveSyncSettingTab.panelChangeLog": string;
"obsidianLiveSyncSettingTab.panelGeneralSettings": string;
"obsidianLiveSyncSettingTab.panelPrivacyEncryption": string;
"obsidianLiveSyncSettingTab.panelRemoteConfiguration": string;
"obsidianLiveSyncSettingTab.panelSetup": string;
"obsidianLiveSyncSettingTab.titleAppearance": string;
"obsidianLiveSyncSettingTab.titleConflictResolution": string;
"obsidianLiveSyncSettingTab.titleCongratulations": string;
"obsidianLiveSyncSettingTab.titleCouchDB": string;
"obsidianLiveSyncSettingTab.titleDeletionPropagation": string;
"obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": string;
"obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.titleExtraFeatures": string;
"obsidianLiveSyncSettingTab.titleFetchConfig": string;
"obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.titleFetchSettings": string;
"obsidianLiveSyncSettingTab.titleHiddenFiles": string;
"obsidianLiveSyncSettingTab.titleLogging": string;
"obsidianLiveSyncSettingTab.titleMinioS3R2": string;
"obsidianLiveSyncSettingTab.titleNotification": string;
"obsidianLiveSyncSettingTab.titleOnlineTips": string;
"obsidianLiveSyncSettingTab.titleQuickSetup": string;
"obsidianLiveSyncSettingTab.titleRebuildRequired": string;
"obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.titleRemoteServer": string;
"obsidianLiveSyncSettingTab.titleReset": string;
"obsidianLiveSyncSettingTab.titleSetupOtherDevices": string;
"obsidianLiveSyncSettingTab.titleSynchronizationMethod": string;
"obsidianLiveSyncSettingTab.titleSynchronizationPreset": string;
"obsidianLiveSyncSettingTab.titleSyncSettings": string;
"obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": string;
"obsidianLiveSyncSettingTab.titleUpdateThinning": string;
"obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": string;
"obsidianLiveSyncSettingTab.warnNoAdmin": string;
Ok: string;
"Old Algorithm": string;
"Older fallback (Slow, W/O WebAssembly)": string;
Open: string;
"Open the dialog": string;
Overwrite: string;
"Overwrite patterns": string;
"Overwrite remote": string;
"Overwrite remote with local DB and passphrase.": string;
"Overwrite Server Data with This Device's Files": string;
"paneMaintenance.markDeviceResolvedAfterBackup": string;
"paneMaintenance.remoteLockedAndDeviceNotAccepted": string;
"paneMaintenance.remoteLockedResolvedDevice": string;
"paneMaintenance.unlockDatabaseReady": string;
Passphrase: string;
"Passphrase of sensitive configuration items": string;
password: string;
Password: string;
"Paste a connection string": string;
"Paste the Setup URI generated from one of your active devices.": string;
"Path Obfuscation": string;
"Patterns to match files for overwriting instead of merging": string;
"Patterns to match files for syncing": string;
"Peer-to-Peer only": string;
"Peer-to-Peer Synchronisation": string;
"Per-file-saved customization sync": string;
Perform: string;
"Perform cleanup": string;
"Perform Garbage Collection": string;
"Perform Garbage Collection to remove unused chunks and reduce database size.": string;
"Periodic Sync interval": string;
"Pick a file to resolve conflict": string;
"Please select a method to import the settings from another device.": string;
"Please select an option to proceed": string;
"Please select the type of server to which you are connecting.": string;
"Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.": string;
"Please set this device name": string;
Presets: string;
"Proceed with Setup URI": string;
"Process small files in the foreground": string;
"PureJS fallback (Fast, W/O WebAssembly)": string;
"Purge all download/upload cache.": string;
"Purge all journal counter": string;
"Rebuild local and remote database with local files.": string;
"Rebuilding Operations (Remote Only)": string;
"Recreate all": string;
"Recreate missing chunks for all files": string;
"Reducing the frequency with which on-disk changes are reflected into the DB": string;
Region: string;
Remediation: string;
"Remediation Setting Changed": string;
"Remote Database Tweak (In sunset)": string;
"Remote Databases": string;
"Remote name": string;
"Remote server type": string;
"Remote Type": string;
Rename: string;
"Requires restart of Obsidian": string;
"Requires restart of Obsidian.": string;
Resend: string;
"Resend all chunks to the remote.": string;
Reset: string;
"Reset all": string;
"Reset all journal counter": string;
"Reset journal received history": string;
"Reset journal sent history": string;
"Reset received": string;
"Reset sent history": string;
"Reset Synchronisation information": string;
"Reset Synchronisation on This Device": string;
"Resolve All": string;
"Resolve all conflicted files": string;
"Resolve All conflicted files by the newer one": string;
"Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.": string;
"Restart Now": string;
"Restore or reconstruct local database from remote.": string;
"S3/MinIO/R2 Object Storage": string;
"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": string;
"Saving will be performed forcefully after this number of seconds.": string;
"Scan a QR Code (Recommended for mobile)": string;
"Scan changes on customization sync": string;
"Scan customization automatically": string;
"Scan customization before replicating.": string;
"Scan customization every 1 minute.": string;
"Scan customization periodically": string;
"Scan for hidden files before replication": string;
"Scan hidden files periodically": string;
"Scan the QR code displayed on an active device using this device's camera.": string;
"Schedule and Restart": string;
"Scram!": string;
"Seconds, 0 to disable": string;
"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": string;
"Secret Key": string;
"Select the database adapter to use.": string;
Send: string;
"Send chunks": string;
"Server URI": string;
"Setting.GenerateKeyPair.Desc": string;
"Setting.GenerateKeyPair.Title": string;
"Setup.> [!INFO]- The connected devices have been detected as follows:\n${devices}": string;
"Setup.All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": string;
"Setup.Cancel Garbage Collection": string;
"Setup.Compaction in progress on remote database...": string;
"Setup.Compaction on remote database completed successfully.": string;
"Setup.Compaction on remote database failed.": string;
"Setup.Compaction on remote database timed out.": string;
"Setup.Device": string;
"Setup.Failed to connect to remote for compaction.": string;
"Setup.Failed to connect to remote for compaction. ${reason}": string;
"Setup.Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": string;
"Setup.Failed to start replication after Garbage Collection.": string;
"Setup.Garbage Collection cancelled by user.": string;
"Setup.Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": string;
"Setup.Garbage Collection Confirmation": string;
"Setup.Garbage Collection: Found ${unusedChunks} unused chunks to delete.": string;
"Setup.Garbage Collection: Scanned ${scanned} / ~${docCount}": string;
"Setup.Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": string;
"Setup.Ignore and Proceed": string;
"Setup.No connected device information found. Cancelling Garbage Collection.": string;
"Setup.Node ID": string;
"Setup.Node Information Missing": string;
"Setup.Obsidian version": string;
"Setup.optionNoSetupUri": string;
"Setup.optionRemindNextLaunch": string;
"Setup.optionSetupWizard": string;
"Setup.optionYesFetchAgain": string;
"Setup.Please disable 'Read chunks online' in settings to use Garbage Collection.": string;
"Setup.Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": string;
"Setup.Please select 'Cancel' explicitly to cancel this operation.": string;
"Setup.Plug-in version": string;
"Setup.Proceed Garbage Collection": string;
"Setup.Proceeding with Garbage Collection, ignoring missing nodes.": string;
"Setup.Proceeding with Garbage Collection.": string;
"Setup.Progress": string;
"Setup.RemoteE2EE.AdvancedTitle": string;
"Setup.RemoteE2EE.AlgorithmWarning": string;
"Setup.RemoteE2EE.ButtonCancel": string;
"Setup.RemoteE2EE.ButtonProceed": string;
"Setup.RemoteE2EE.DefaultAlgorithmDesc": string;
"Setup.RemoteE2EE.Guidance": string;
"Setup.RemoteE2EE.LabelEncrypt": string;
"Setup.RemoteE2EE.LabelEncryptionAlgorithm": string;
"Setup.RemoteE2EE.LabelObfuscateProperties": string;
"Setup.RemoteE2EE.MultiDestinationWarning": string;
"Setup.RemoteE2EE.ObfuscatePropertiesDesc": string;
"Setup.RemoteE2EE.PassphraseValidationLine1": string;
"Setup.RemoteE2EE.PassphraseValidationLine2": string;
"Setup.RemoteE2EE.PlaceholderPassphrase": string;
"Setup.RemoteE2EE.StronglyRecommendedLine1": string;
"Setup.RemoteE2EE.StronglyRecommendedLine2": string;
"Setup.RemoteE2EE.StronglyRecommendedTitle": string;
"Setup.RemoteE2EE.Title": string;
"Setup.ScanQRCode.ButtonClose": string;
"Setup.ScanQRCode.Guidance": string;
"Setup.ScanQRCode.Step1": string;
"Setup.ScanQRCode.Step2": string;
"Setup.ScanQRCode.Step3": string;
"Setup.ScanQRCode.Step4": string;
"Setup.ScanQRCode.Title": string;
"Setup.Setup URI dialog cancelled.": string;
"Setup.Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.": string;
"Setup.The following accepted nodes are missing its node information:\n- ${missingNodes}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.": string;
"Setup.titleCaseSensitivity": string;
"Setup.titleRecommendSetupUri": string;
"Setup.titleWelcome": string;
"Setup.UseSetupURI.ButtonCancel": string;
"Setup.UseSetupURI.ButtonProceed": string;
"Setup.UseSetupURI.ErrorFailedToParse": string;
"Setup.UseSetupURI.ErrorPassphraseRequired": string;
"Setup.UseSetupURI.GuidanceLine1": string;
"Setup.UseSetupURI.GuidanceLine2": string;
"Setup.UseSetupURI.InvalidInfo": string;
"Setup.UseSetupURI.LabelPassphrase": string;
"Setup.UseSetupURI.LabelSetupURI": string;
"Setup.UseSetupURI.PlaceholderPassphrase": string;
"Setup.UseSetupURI.Title": string;
"Setup.UseSetupURI.ValidInfo": string;
"Should we keep folders that don't have any files inside?": string;
"Should we only check for conflicts when a file is opened?": string;
"Should we prompt you about conflicting files when a file is opened?": string;
"Should we prompt you for every single merge, even if we can safely merge automatcially?": string;
"Show full banner": string;
"Show only notifications": string;
"Show status as icons only": string;
"Show status icon instead of file warnings banner": string;
"Show status inside the editor": string;
"Show status on the status bar": string;
"Show verbose log. Please enable if you report an issue.": string;
"Starts synchronisation when a file is saved.": string;
"Stop reflecting database changes to storage files.": string;
"Stop watching for file changes.": string;
"Suppress notification of hidden files change": string;
"Suspend database reflecting": string;
"Suspend file watching": string;
"Switch to IDB": string;
"Switch to IndexedDB": string;
"Sync after merging file": string;
"Sync automatically after merging files": string;
"Sync Mode": string;
"Sync on Editor Save": string;
"Sync on File Open": string;
"Sync on Save": string;
"Sync on Startup": string;
"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": string;
"Synchronising files": string;
Syncing: string;
"Target patterns": string;
"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.": string;
"The delay for consecutive on-demand fetches": string;
"The Hash algorithm for chunk IDs": string;
"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.": string;
"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.": string;
"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.": string;
"This feature enables direct synchronisation between devices. No server is required, but both devices must be online at the same time for synchronisation to occur, and some features may be limited. Internet connection is only required to signalling (detecting peers) and not for data transfer.": string;
"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": string;
"This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": string;
"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": string;
"This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": string;
"Transfer Tweak": string;
"Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": string;
"Use a custom passphrase": string;
"Use a Setup URI (Recommended)": string;
"Use Custom HTTP Handler": string;
"Use dynamic iteration count": string;
"Use Segmented-splitter": string;
"Use splitting-limit-capped chunk splitter": string;
"Use the trash bin": string;
"Use timeouts instead of heartbeats": string;
username: string;
Username: string;
"Verbose Log": string;
"Verify all": string;
"Verify and repair all files": string;
"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.": string;
"We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.": string;
"We will now guide you through a few questions to simplify the synchronisation setup.": string;
"We will now proceed with the server configuration.": string;
"Welcome to Self-hosted LiveSync": string;
"When you save a file in the editor, start a sync automatically": string;
"Write credentials in the file": string;
"Write logs into the file": string;
"xxhash32 (Fast but less collision resistance)": string;
"xxhash64 (Fastest)": string;
"Yes, I want to add this device to my existing synchronisation": string;
"Yes, I want to set up a new synchronisation": string;
"You are adding this device to an existing synchronisation setup.": string;
};
};
+582
View File
@@ -0,0 +1,582 @@
export declare const PartialMessages: {
readonly fr: {
"(BETA) Always overwrite with a newer file": string;
"(Beta) Use ignore files": string;
"(Days passed, 0 to disable automatic-deletion)": string;
"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.": string;
"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.": string;
"(Mega chars)": string;
"(Not recommended) If set, credentials will be stored in the file.": string;
"(Obsolete) Use an old adapter for compatibility": string;
"Access Key": string;
"Active Remote Configuration": string;
"Always prompt merge conflicts": string;
Analyse: string;
"Analyse database usage": string;
"Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.": string;
"Apply Latest Change if Conflicting": string;
"Apply preset configuration": string;
"Automatically Sync all files when opening Obsidian.": string;
"Batch database update": string;
"Batch limit": string;
"Batch size": string;
"Batch size of on-demand fetching": string;
"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.": string;
"Bucket Name": string;
Check: string;
"cmdConfigSync.showCustomizationSync": string;
"Comma separated `.gitignore, .dockerignore`": string;
"Compute revisions for chunks": string;
"Copy Report to clipboard": string;
"Data Compression": string;
"Database Name": string;
"Database suffix": string;
"Delay conflict resolution of inactive files": string;
"Delay merge conflict prompt for inactive files.": string;
"Delete old metadata of deleted files on start-up": string;
"Device name": string;
"dialog.yourLanguageAvailable": string;
"dialog.yourLanguageAvailable.btnRevertToDefault": string;
"dialog.yourLanguageAvailable.Title": string;
"Disables logging, only shows notifications. Please disable if you report an issue.": string;
"Display Language": string;
"Do not check configuration mismatch before replication": string;
"Do not keep metadata of deleted files.": string;
"Do not split chunks in the background": string;
"Do not use internal API": string;
"Doctor.Button.DismissThisVersion": string;
"Doctor.Button.Fix": string;
"Doctor.Button.FixButNoRebuild": string;
"Doctor.Button.No": string;
"Doctor.Button.Skip": string;
"Doctor.Button.Yes": string;
"Doctor.Dialogue.Main": string;
"Doctor.Dialogue.MainFix": string;
"Doctor.Dialogue.Title": string;
"Doctor.Dialogue.TitleAlmostDone": string;
"Doctor.Dialogue.TitleFix": string;
"Doctor.Level.Must": string;
"Doctor.Level.Necessary": string;
"Doctor.Level.Optional": string;
"Doctor.Level.Recommended": string;
"Doctor.Message.NoIssues": string;
"Doctor.Message.RebuildLocalRequired": string;
"Doctor.Message.RebuildRequired": string;
"Doctor.Message.SomeSkipped": string;
"Doctor.RULES.E2EE_V02500.REASON": string;
"Enable advanced features": string;
"Enable customization sync": string;
"Enable Developers' Debug Tools.": string;
"Enable edge case treatment features": string;
"Enable poweruser features": string;
"Enable this if your Object Storage doesn't support CORS": string;
"Enable this option to automatically apply the most recent change to documents even when it conflicts": string;
"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": string;
"Encrypting sensitive configuration items": string;
"Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": string;
"End-to-End Encryption": string;
"Endpoint URL": string;
"Enhance chunk size": string;
"Fetch chunks on demand": string;
"Fetch database with previous behaviour": string;
Filename: string;
"Forces the file to be synced when opened.": string;
"Handle files as Case-Sensitive": string;
"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": string;
"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.": string;
"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": string;
"If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": string;
"If enabled, the \u26D4 icon will be shown inside the status instead of the file warnings banner. No details will be shown.": string;
"If enabled, the file under 1kb will be processed in the UI thread.": string;
"If enabled, the notification of hidden files change will be suppressed.": string;
"If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": string;
"If this enabled, All files are handled as case-Sensitive (Previous behaviour).": string;
"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": string;
"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.": string;
"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.": string;
"Ignore files": string;
"Incubate Chunks in Document": string;
"Interval (sec)": string;
"K.exp": string;
"K.long_p2p_sync": string;
"K.P2P": string;
"K.Peer": string;
"K.ScanCustomization": string;
"K.short_p2p_sync": string;
"K.title_p2p_sync": string;
"Keep empty folder": string;
lang_def: string;
"lang-de": string;
"lang-def": string;
"lang-es": string;
"lang-fr": string;
"lang-ja": string;
"lang-ko": string;
"lang-ru": string;
"lang-zh": string;
"lang-zh-tw": string;
"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": string;
"liveSyncReplicator.beforeLiveSync": string;
"liveSyncReplicator.cantReplicateLowerValue": string;
"liveSyncReplicator.checkingLastSyncPoint": string;
"liveSyncReplicator.couldNotConnectTo": string;
"liveSyncReplicator.couldNotConnectToRemoteDb": string;
"liveSyncReplicator.couldNotConnectToServer": string;
"liveSyncReplicator.couldNotConnectToURI": string;
"liveSyncReplicator.couldNotMarkResolveRemoteDb": string;
"liveSyncReplicator.liveSyncBegin": string;
"liveSyncReplicator.lockRemoteDb": string;
"liveSyncReplicator.markDeviceResolved": string;
"liveSyncReplicator.oneShotSyncBegin": string;
"liveSyncReplicator.remoteDbCorrupted": string;
"liveSyncReplicator.remoteDbCreatedOrConnected": string;
"liveSyncReplicator.remoteDbDestroyed": string;
"liveSyncReplicator.remoteDbDestroyError": string;
"liveSyncReplicator.remoteDbMarkedResolved": string;
"liveSyncReplicator.replicationClosed": string;
"liveSyncReplicator.replicationInProgress": string;
"liveSyncReplicator.retryLowerBatchSize": string;
"liveSyncReplicator.unlockRemoteDb": string;
"liveSyncSetting.errorNoSuchSettingItem": string;
"liveSyncSetting.originalValue": string;
"liveSyncSetting.valueShouldBeInRange": string;
"liveSyncSettings.btnApply": string;
"logPane.autoScroll": string;
"logPane.logWindowOpened": string;
"logPane.pause": string;
"logPane.title": string;
"logPane.wrap": string;
"Maximum delay for batch database updating": string;
"Maximum file size": string;
"Maximum Incubating Chunk Size": string;
"Maximum Incubating Chunks": string;
"Maximum Incubation Period": string;
"MB (0 to disable).": string;
"Memory cache size (by total characters)": string;
"Memory cache size (by total items)": string;
"Minimum delay for batch database updating": string;
"Minimum interval for syncing": string;
"moduleCheckRemoteSize.logCheckingStorageSizes": string;
"moduleCheckRemoteSize.logCurrentStorageSize": string;
"moduleCheckRemoteSize.logExceededWarning": string;
"moduleCheckRemoteSize.logThresholdEnlarged": string;
"moduleCheckRemoteSize.msgConfirmRebuild": string;
"moduleCheckRemoteSize.msgDatabaseGrowing": string;
"moduleCheckRemoteSize.msgSetDBCapacity": string;
"moduleCheckRemoteSize.option2GB": string;
"moduleCheckRemoteSize.option800MB": string;
"moduleCheckRemoteSize.optionAskMeLater": string;
"moduleCheckRemoteSize.optionDismiss": string;
"moduleCheckRemoteSize.optionIncreaseLimit": string;
"moduleCheckRemoteSize.optionNoWarn": string;
"moduleCheckRemoteSize.optionRebuildAll": string;
"moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": string;
"moduleCheckRemoteSize.titleDatabaseSizeNotify": string;
"moduleInputUIObsidian.defaultTitleConfirmation": string;
"moduleInputUIObsidian.defaultTitleSelect": string;
"moduleInputUIObsidian.optionNo": string;
"moduleInputUIObsidian.optionYes": string;
"moduleLiveSyncMain.logAdditionalSafetyScan": string;
"moduleLiveSyncMain.logLoadingPlugin": string;
"moduleLiveSyncMain.logPluginInitCancelled": string;
"moduleLiveSyncMain.logPluginVersion": string;
"moduleLiveSyncMain.logReadChangelog": string;
"moduleLiveSyncMain.logSafetyScanCompleted": string;
"moduleLiveSyncMain.logSafetyScanFailed": string;
"moduleLiveSyncMain.logUnloadingPlugin": string;
"moduleLiveSyncMain.logVersionUpdate": string;
"moduleLiveSyncMain.msgScramEnabled": string;
"moduleLiveSyncMain.optionKeepLiveSyncDisabled": string;
"moduleLiveSyncMain.optionResumeAndRestart": string;
"moduleLiveSyncMain.titleScramEnabled": string;
"moduleLocalDatabase.logWaitingForReady": string;
"moduleLog.showLog": string;
"moduleMigration.docUri": string;
"moduleMigration.fix0256.buttons.checkItLater": string;
"moduleMigration.fix0256.buttons.DismissForever": string;
"moduleMigration.fix0256.buttons.fix": string;
"moduleMigration.fix0256.message": string;
"moduleMigration.fix0256.messageUnrecoverable": string;
"moduleMigration.fix0256.title": string;
"moduleMigration.insecureChunkExist.buttons.fetch": string;
"moduleMigration.insecureChunkExist.buttons.later": string;
"moduleMigration.insecureChunkExist.buttons.rebuild": string;
"moduleMigration.insecureChunkExist.laterMessage": string;
"moduleMigration.insecureChunkExist.message": string;
"moduleMigration.insecureChunkExist.title": string;
"moduleMigration.logBulkSendCorrupted": string;
"moduleMigration.logFetchRemoteTweakFailed": string;
"moduleMigration.logLocalDatabaseNotReady": string;
"moduleMigration.logMigratedSameBehaviour": string;
"moduleMigration.logMigrationFailed": string;
"moduleMigration.logRedflag2CreationFail": string;
"moduleMigration.logRemoteTweakUnavailable": string;
"moduleMigration.logSetupCancelled": string;
"moduleMigration.msgFetchRemoteAgain": string;
"moduleMigration.msgInitialSetup": string;
"moduleMigration.msgRecommendSetupUri": string;
"moduleMigration.msgSinceV02321": string;
"moduleMigration.optionAdjustRemote": string;
"moduleMigration.optionDecideLater": string;
"moduleMigration.optionEnableBoth": string;
"moduleMigration.optionEnableFilenameCaseInsensitive": string;
"moduleMigration.optionEnableFixedRevisionForChunks": string;
"moduleMigration.optionHaveSetupUri": string;
"moduleMigration.optionKeepPreviousBehaviour": string;
"moduleMigration.optionManualSetup": string;
"moduleMigration.optionNoAskAgain": string;
"moduleMigration.optionNoSetupUri": string;
"moduleMigration.optionRemindNextLaunch": string;
"moduleMigration.optionSetupViaP2P": string;
"moduleMigration.optionSetupWizard": string;
"moduleMigration.optionYesFetchAgain": string;
"moduleMigration.titleCaseSensitivity": string;
"moduleMigration.titleRecommendSetupUri": string;
"moduleMigration.titleWelcome": string;
"moduleObsidianMenu.replicate": string;
"Move remotely deleted files to the trash, instead of deleting.": string;
"Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": string;
"Notify all setting files": string;
"Notify customized": string;
"Notify when other device has newly customized.": string;
"Notify when the estimated remote storage size exceeds on start up": string;
"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.": string;
"Number of changes to sync at a time. Defaults to 50. Minimum is 2.": string;
"obsidianLiveSyncSettingTab.btnApply": string;
"obsidianLiveSyncSettingTab.btnCheck": string;
"obsidianLiveSyncSettingTab.btnCopy": string;
"obsidianLiveSyncSettingTab.btnDisable": string;
"obsidianLiveSyncSettingTab.btnDiscard": string;
"obsidianLiveSyncSettingTab.btnEnable": string;
"obsidianLiveSyncSettingTab.btnFix": string;
"obsidianLiveSyncSettingTab.btnGotItAndUpdated": string;
"obsidianLiveSyncSettingTab.btnNext": string;
"obsidianLiveSyncSettingTab.btnStart": string;
"obsidianLiveSyncSettingTab.btnTest": string;
"obsidianLiveSyncSettingTab.btnUse": string;
"obsidianLiveSyncSettingTab.buttonFetch": string;
"obsidianLiveSyncSettingTab.buttonNext": string;
"obsidianLiveSyncSettingTab.defaultLanguage": string;
"obsidianLiveSyncSettingTab.descConnectSetupURI": string;
"obsidianLiveSyncSettingTab.descCopySetupURI": string;
"obsidianLiveSyncSettingTab.descEnableLiveSync": string;
"obsidianLiveSyncSettingTab.descFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.descManualSetup": string;
"obsidianLiveSyncSettingTab.descTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.descValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.errAccessForbidden": string;
"obsidianLiveSyncSettingTab.errCannotContinueTest": string;
"obsidianLiveSyncSettingTab.errCorsCredentials": string;
"obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": string;
"obsidianLiveSyncSettingTab.errCorsOrigins": string;
"obsidianLiveSyncSettingTab.errEnableCors": string;
"obsidianLiveSyncSettingTab.errEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.errMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.errMaxRequestSize": string;
"obsidianLiveSyncSettingTab.errMissingWwwAuth": string;
"obsidianLiveSyncSettingTab.errRequireValidUser": string;
"obsidianLiveSyncSettingTab.errRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.labelDisabled": string;
"obsidianLiveSyncSettingTab.labelEnabled": string;
"obsidianLiveSyncSettingTab.levelAdvanced": string;
"obsidianLiveSyncSettingTab.levelEdgeCase": string;
"obsidianLiveSyncSettingTab.levelPowerUser": string;
"obsidianLiveSyncSettingTab.linkOpenInBrowser": string;
"obsidianLiveSyncSettingTab.linkPageTop": string;
"obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": string;
"obsidianLiveSyncSettingTab.linkTroubleshooting": string;
"obsidianLiveSyncSettingTab.logCannotUseCloudant": string;
"obsidianLiveSyncSettingTab.logCheckingConfigDone": string;
"obsidianLiveSyncSettingTab.logCheckingConfigFailed": string;
"obsidianLiveSyncSettingTab.logCheckingDbConfig": string;
"obsidianLiveSyncSettingTab.logCheckPassphraseFailed": string;
"obsidianLiveSyncSettingTab.logConfiguredDisabled": string;
"obsidianLiveSyncSettingTab.logConfiguredLiveSync": string;
"obsidianLiveSyncSettingTab.logConfiguredPeriodic": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigFail": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigSet": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": string;
"obsidianLiveSyncSettingTab.logDatabaseConnected": string;
"obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": string;
"obsidianLiveSyncSettingTab.logEncryptionNoSupport": string;
"obsidianLiveSyncSettingTab.logErrorOccurred": string;
"obsidianLiveSyncSettingTab.logEstimatedSize": string;
"obsidianLiveSyncSettingTab.logPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.logPassphraseNotCompatible": string;
"obsidianLiveSyncSettingTab.logRebuildNote": string;
"obsidianLiveSyncSettingTab.logSelectAnyPreset": string;
"obsidianLiveSyncSettingTab.msgAreYouSureProceed": string;
"obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": string;
"obsidianLiveSyncSettingTab.msgConfigCheck": string;
"obsidianLiveSyncSettingTab.msgConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.msgConnectionCheck": string;
"obsidianLiveSyncSettingTab.msgConnectionProxyNote": string;
"obsidianLiveSyncSettingTab.msgCurrentOrigin": string;
"obsidianLiveSyncSettingTab.msgDiscardConfirmation": string;
"obsidianLiveSyncSettingTab.msgDone": string;
"obsidianLiveSyncSettingTab.msgEnableCors": string;
"obsidianLiveSyncSettingTab.msgEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": string;
"obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.msgGenerateSetupURI": string;
"obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": string;
"obsidianLiveSyncSettingTab.msgInvalidPassphrase": string;
"obsidianLiveSyncSettingTab.msgNewVersionNote": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSInfo": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSWarning": string;
"obsidianLiveSyncSettingTab.msgNotice": string;
"obsidianLiveSyncSettingTab.msgObjectStorageWarning": string;
"obsidianLiveSyncSettingTab.msgOriginCheck": string;
"obsidianLiveSyncSettingTab.msgRebuildRequired": string;
"obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": string;
"obsidianLiveSyncSettingTab.msgSetCorsCredentials": string;
"obsidianLiveSyncSettingTab.msgSetCorsOrigins": string;
"obsidianLiveSyncSettingTab.msgSetMaxDocSize": string;
"obsidianLiveSyncSettingTab.msgSetMaxRequestSize": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUser": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.msgSettingModified": string;
"obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": string;
"obsidianLiveSyncSettingTab.msgSetWwwAuth": string;
"obsidianLiveSyncSettingTab.nameApplySettings": string;
"obsidianLiveSyncSettingTab.nameConnectSetupURI": string;
"obsidianLiveSyncSettingTab.nameCopySetupURI": string;
"obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameDiscardSettings": string;
"obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameEnableLiveSync": string;
"obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": string;
"obsidianLiveSyncSettingTab.nameManualSetup": string;
"obsidianLiveSyncSettingTab.nameTestConnection": string;
"obsidianLiveSyncSettingTab.nameTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.okAdminPrivileges": string;
"obsidianLiveSyncSettingTab.okCorsCredentials": string;
"obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": string;
"obsidianLiveSyncSettingTab.okCorsOriginMatched": string;
"obsidianLiveSyncSettingTab.okCorsOrigins": string;
"obsidianLiveSyncSettingTab.okEnableCors": string;
"obsidianLiveSyncSettingTab.okEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.okMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.okMaxRequestSize": string;
"obsidianLiveSyncSettingTab.okRequireValidUser": string;
"obsidianLiveSyncSettingTab.okRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.okWwwAuth": string;
"obsidianLiveSyncSettingTab.optionApply": string;
"obsidianLiveSyncSettingTab.optionCancel": string;
"obsidianLiveSyncSettingTab.optionCouchDB": string;
"obsidianLiveSyncSettingTab.optionDisableAllAutomatic": string;
"obsidianLiveSyncSettingTab.optionFetchFromRemote": string;
"obsidianLiveSyncSettingTab.optionHere": string;
"obsidianLiveSyncSettingTab.optionLiveSync": string;
"obsidianLiveSyncSettingTab.optionMinioS3R2": string;
"obsidianLiveSyncSettingTab.optionOkReadEverything": string;
"obsidianLiveSyncSettingTab.optionOnEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicAndEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicWithBatch": string;
"obsidianLiveSyncSettingTab.optionRebuildBoth": string;
"obsidianLiveSyncSettingTab.optionSaveOnlySettings": string;
"obsidianLiveSyncSettingTab.panelChangeLog": string;
"obsidianLiveSyncSettingTab.panelGeneralSettings": string;
"obsidianLiveSyncSettingTab.panelPrivacyEncryption": string;
"obsidianLiveSyncSettingTab.panelRemoteConfiguration": string;
"obsidianLiveSyncSettingTab.panelSetup": string;
"obsidianLiveSyncSettingTab.serverVersion": string;
"obsidianLiveSyncSettingTab.titleActiveRemoteServer": string;
"obsidianLiveSyncSettingTab.titleAppearance": string;
"obsidianLiveSyncSettingTab.titleConflictResolution": string;
"obsidianLiveSyncSettingTab.titleCongratulations": string;
"obsidianLiveSyncSettingTab.titleCouchDB": string;
"obsidianLiveSyncSettingTab.titleDeletionPropagation": string;
"obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": string;
"obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.titleExtraFeatures": string;
"obsidianLiveSyncSettingTab.titleFetchConfig": string;
"obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.titleFetchSettings": string;
"obsidianLiveSyncSettingTab.titleHiddenFiles": string;
"obsidianLiveSyncSettingTab.titleLogging": string;
"obsidianLiveSyncSettingTab.titleMinioS3R2": string;
"obsidianLiveSyncSettingTab.titleNotification": string;
"obsidianLiveSyncSettingTab.titleOnlineTips": string;
"obsidianLiveSyncSettingTab.titleQuickSetup": string;
"obsidianLiveSyncSettingTab.titleRebuildRequired": string;
"obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.titleRemoteServer": string;
"obsidianLiveSyncSettingTab.titleReset": string;
"obsidianLiveSyncSettingTab.titleSetupOtherDevices": string;
"obsidianLiveSyncSettingTab.titleSynchronizationMethod": string;
"obsidianLiveSyncSettingTab.titleSynchronizationPreset": string;
"obsidianLiveSyncSettingTab.titleSyncSettings": string;
"obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": string;
"obsidianLiveSyncSettingTab.titleUpdateThinning": string;
"obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": string;
"obsidianLiveSyncSettingTab.warnNoAdmin": string;
"P2P.AskPassphraseForDecrypt": string;
"P2P.AskPassphraseForShare": string;
"P2P.DisabledButNeed": string;
"P2P.FailedToOpen": string;
"P2P.NoAutoSyncPeers": string;
"P2P.NoKnownPeers": string;
"P2P.Note.description": string;
"P2P.Note.important_note": string;
"P2P.Note.important_note_sub": string;
"P2P.Note.Summary": string;
"P2P.NotEnabled": string;
"P2P.P2PReplication": string;
"P2P.PaneTitle": string;
"P2P.ReplicatorInstanceMissing": string;
"P2P.SeemsOffline": string;
"P2P.SyncAlreadyRunning": string;
"P2P.SyncCompleted": string;
"P2P.SyncStartedWith": string;
Passphrase: string;
"Passphrase of sensitive configuration items": string;
password: string;
Password: string;
"Path Obfuscation": string;
"Per-file-saved customization sync": string;
"Periodic Sync interval": string;
"Prepare the 'report' to create an issue": string;
Presets: string;
"Process small files in the foreground": string;
"Property Encryption": string;
"RedFlag.Fetch.Method.Desc": string;
"RedFlag.Fetch.Method.FetchSafer": string;
"RedFlag.Fetch.Method.FetchSmoother": string;
"RedFlag.Fetch.Method.FetchTraditional": string;
"RedFlag.Fetch.Method.Title": string;
"RedFlag.FetchRemoteConfig.Buttons.Cancel": string;
"RedFlag.FetchRemoteConfig.Buttons.Fetch": string;
"RedFlag.FetchRemoteConfig.Message": string;
"RedFlag.FetchRemoteConfig.Title": string;
"Reducing the frequency with which on-disk changes are reflected into the DB": string;
Region: string;
"Remote server type": string;
"Remote Type": string;
"Replicator.Dialogue.Locked.Action.Dismiss": string;
"Replicator.Dialogue.Locked.Action.Fetch": string;
"Replicator.Dialogue.Locked.Action.Unlock": string;
"Replicator.Dialogue.Locked.Message": string;
"Replicator.Dialogue.Locked.Message.Fetch": string;
"Replicator.Dialogue.Locked.Message.Unlocked": string;
"Replicator.Dialogue.Locked.Title": string;
"Replicator.Message.Cleaned": string;
"Replicator.Message.InitialiseFatalError": string;
"Replicator.Message.Pending": string;
"Replicator.Message.SomeModuleFailed": string;
"Replicator.Message.VersionUpFlash": string;
"Requires restart of Obsidian": string;
"Requires restart of Obsidian.": string;
"Rerun Onboarding Wizard": string;
"Rerun the onboarding wizard to set up Self-hosted LiveSync again.": string;
"Rerun Wizard": string;
"Reset notification threshold and check the remote database usage": string;
"Reset the remote storage size threshold and check the remote storage size again.": string;
"Run Doctor": string;
"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": string;
"Saving will be performed forcefully after this number of seconds.": string;
"Scan changes on customization sync": string;
"Scan customization automatically": string;
"Scan customization before replicating.": string;
"Scan customization every 1 minute.": string;
"Scan customization periodically": string;
"Scan for hidden files before replication": string;
"Scan hidden files periodically": string;
"Seconds, 0 to disable": string;
"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": string;
"Secret Key": string;
"Server URI": string;
"Setting.GenerateKeyPair.Desc": string;
"Setting.GenerateKeyPair.Title": string;
"Setting.TroubleShooting": string;
"Setting.TroubleShooting.Doctor": string;
"Setting.TroubleShooting.Doctor.Desc": string;
"Setting.TroubleShooting.ScanBrokenFiles": string;
"Setting.TroubleShooting.ScanBrokenFiles.Desc": string;
"SettingTab.Message.AskRebuild": string;
"Setup.Apply.Buttons.ApplyAndFetch": string;
"Setup.Apply.Buttons.ApplyAndMerge": string;
"Setup.Apply.Buttons.ApplyAndRebuild": string;
"Setup.Apply.Buttons.Cancel": string;
"Setup.Apply.Buttons.OnlyApply": string;
"Setup.Apply.Message": string;
"Setup.Apply.Title": string;
"Setup.Apply.WarningRebuildRecommended": string;
"Setup.Doctor.Buttons.No": string;
"Setup.Doctor.Buttons.Yes": string;
"Setup.Doctor.Message": string;
"Setup.Doctor.Title": string;
"Setup.FetchRemoteConf.Buttons.Fetch": string;
"Setup.FetchRemoteConf.Buttons.Skip": string;
"Setup.FetchRemoteConf.Message": string;
"Setup.FetchRemoteConf.Title": string;
"Setup.QRCode": string;
"Setup.ShowQRCode": string;
"Setup.ShowQRCode.Desc": string;
"Should we keep folders that don't have any files inside?": string;
"Should we only check for conflicts when a file is opened?": string;
"Should we prompt you about conflicting files when a file is opened?": string;
"Should we prompt you for every single merge, even if we can safely merge automatcially?": string;
"Show only notifications": string;
"Show status as icons only": string;
"Show status icon instead of file warnings banner": string;
"Show status inside the editor": string;
"Show status on the status bar": string;
"Show verbose log. Please enable if you report an issue.": string;
"Starts synchronisation when a file is saved.": string;
"Stop reflecting database changes to storage files.": string;
"Stop watching for file changes.": string;
"Suppress notification of hidden files change": string;
"Suspend database reflecting": string;
"Suspend file watching": string;
"Sync after merging file": string;
"Sync automatically after merging files": string;
"Sync Mode": string;
"Sync on Editor Save": string;
"Sync on File Open": string;
"Sync on Save": string;
"Sync on Startup": string;
"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.": string;
"The delay for consecutive on-demand fetches": string;
"The Hash algorithm for chunk IDs": string;
"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.": string;
"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.": string;
"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.": string;
"The minimum interval for automatic synchronisation on event.": string;
"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": string;
"TweakMismatchResolve.Action.Dismiss": string;
"TweakMismatchResolve.Action.UseConfigured": string;
"TweakMismatchResolve.Action.UseMine": string;
"TweakMismatchResolve.Action.UseMineAcceptIncompatible": string;
"TweakMismatchResolve.Action.UseMineWithRebuild": string;
"TweakMismatchResolve.Action.UseRemote": string;
"TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": string;
"TweakMismatchResolve.Action.UseRemoteWithRebuild": string;
"TweakMismatchResolve.Message.Main": string;
"TweakMismatchResolve.Message.MainTweakResolving": string;
"TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": string;
"TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": string;
"TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": string;
"TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": string;
"TweakMismatchResolve.Table": string;
"TweakMismatchResolve.Table.Row": string;
"TweakMismatchResolve.Title": string;
"TweakMismatchResolve.Title.TweakResolving": string;
"TweakMismatchResolve.Title.UseRemoteConfig": string;
"Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": string;
"Use Custom HTTP Handler": string;
"Use dynamic iteration count": string;
"Use Segmented-splitter": string;
"Use splitting-limit-capped chunk splitter": string;
"Use the trash bin": string;
"Use timeouts instead of heartbeats": string;
username: string;
Username: string;
"Verbose Log": string;
"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.": string;
"When you save a file in the editor, start a sync automatically": string;
"Write credentials in the file": string;
"Write logs into the file": string;
};
};
+583
View File
@@ -0,0 +1,583 @@
export declare const PartialMessages: {
readonly he: {
"(BETA) Always overwrite with a newer file": string;
"(Beta) Use ignore files": string;
"(Days passed, 0 to disable automatic-deletion)": string;
"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.": string;
"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.": string;
"(Mega chars)": string;
"(Not recommended) If set, credentials will be stored in the file.": string;
"(Obsolete) Use an old adapter for compatibility": string;
"Access Key": string;
"Active Remote Configuration": string;
"Always prompt merge conflicts": string;
Analyse: string;
"Analyse database usage": string;
"Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.": string;
"Apply Latest Change if Conflicting": string;
"Apply preset configuration": string;
"Automatically Sync all files when opening Obsidian.": string;
"Batch database update": string;
"Batch limit": string;
"Batch size": string;
"Batch size of on-demand fetching": string;
"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.": string;
"Bucket Name": string;
Check: string;
"cmdConfigSync.showCustomizationSync": string;
"Comma separated `.gitignore, .dockerignore`": string;
"Compute revisions for chunks": string;
"Copy Report to clipboard": string;
"Data Compression": string;
"Database Name": string;
"Database suffix": string;
"Delay conflict resolution of inactive files": string;
"Delay merge conflict prompt for inactive files.": string;
"Delete old metadata of deleted files on start-up": string;
"Device name": string;
"dialog.yourLanguageAvailable": string;
"dialog.yourLanguageAvailable.btnRevertToDefault": string;
"dialog.yourLanguageAvailable.Title": string;
"Disables logging, only shows notifications. Please disable if you report an issue.": string;
"Display Language": string;
"Do not check configuration mismatch before replication": string;
"Do not keep metadata of deleted files.": string;
"Do not split chunks in the background": string;
"Do not use internal API": string;
"Doctor.Button.DismissThisVersion": string;
"Doctor.Button.Fix": string;
"Doctor.Button.FixButNoRebuild": string;
"Doctor.Button.No": string;
"Doctor.Button.Skip": string;
"Doctor.Button.Yes": string;
"Doctor.Dialogue.Main": string;
"Doctor.Dialogue.MainFix": string;
"Doctor.Dialogue.Title": string;
"Doctor.Dialogue.TitleAlmostDone": string;
"Doctor.Dialogue.TitleFix": string;
"Doctor.Level.Must": string;
"Doctor.Level.Necessary": string;
"Doctor.Level.Optional": string;
"Doctor.Level.Recommended": string;
"Doctor.Message.NoIssues": string;
"Doctor.Message.RebuildLocalRequired": string;
"Doctor.Message.RebuildRequired": string;
"Doctor.Message.SomeSkipped": string;
"Doctor.RULES.E2EE_V02500.REASON": string;
"Enable advanced features": string;
"Enable customization sync": string;
"Enable Developers' Debug Tools.": string;
"Enable edge case treatment features": string;
"Enable poweruser features": string;
"Enable this if your Object Storage doesn't support CORS": string;
"Enable this option to automatically apply the most recent change to documents even when it conflicts": string;
"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": string;
"Encrypting sensitive configuration items": string;
"Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": string;
"End-to-End Encryption": string;
"Endpoint URL": string;
"Enhance chunk size": string;
"Fetch chunks on demand": string;
"Fetch database with previous behaviour": string;
Filename: string;
"Forces the file to be synced when opened.": string;
"Handle files as Case-Sensitive": string;
"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": string;
"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.": string;
"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": string;
"If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": string;
"If enabled, the \u26D4 icon will be shown inside the status instead of the file warnings banner. No details will be shown.": string;
"If enabled, the file under 1kb will be processed in the UI thread.": string;
"If enabled, the notification of hidden files change will be suppressed.": string;
"If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": string;
"If this enabled, All files are handled as case-Sensitive (Previous behaviour).": string;
"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": string;
"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.": string;
"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.": string;
"Ignore files": string;
"Incubate Chunks in Document": string;
"Interval (sec)": string;
"K.exp": string;
"K.long_p2p_sync": string;
"K.P2P": string;
"K.Peer": string;
"K.ScanCustomization": string;
"K.short_p2p_sync": string;
"K.title_p2p_sync": string;
"Keep empty folder": string;
lang_def: string;
"lang-de": string;
"lang-def": string;
"lang-es": string;
"lang-fr": string;
"lang-he": string;
"lang-ja": string;
"lang-ko": string;
"lang-ru": string;
"lang-zh": string;
"lang-zh-tw": string;
"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": string;
"liveSyncReplicator.beforeLiveSync": string;
"liveSyncReplicator.cantReplicateLowerValue": string;
"liveSyncReplicator.checkingLastSyncPoint": string;
"liveSyncReplicator.couldNotConnectTo": string;
"liveSyncReplicator.couldNotConnectToRemoteDb": string;
"liveSyncReplicator.couldNotConnectToServer": string;
"liveSyncReplicator.couldNotConnectToURI": string;
"liveSyncReplicator.couldNotMarkResolveRemoteDb": string;
"liveSyncReplicator.liveSyncBegin": string;
"liveSyncReplicator.lockRemoteDb": string;
"liveSyncReplicator.markDeviceResolved": string;
"liveSyncReplicator.oneShotSyncBegin": string;
"liveSyncReplicator.remoteDbCorrupted": string;
"liveSyncReplicator.remoteDbCreatedOrConnected": string;
"liveSyncReplicator.remoteDbDestroyed": string;
"liveSyncReplicator.remoteDbDestroyError": string;
"liveSyncReplicator.remoteDbMarkedResolved": string;
"liveSyncReplicator.replicationClosed": string;
"liveSyncReplicator.replicationInProgress": string;
"liveSyncReplicator.retryLowerBatchSize": string;
"liveSyncReplicator.unlockRemoteDb": string;
"liveSyncSetting.errorNoSuchSettingItem": string;
"liveSyncSetting.originalValue": string;
"liveSyncSetting.valueShouldBeInRange": string;
"liveSyncSettings.btnApply": string;
"logPane.autoScroll": string;
"logPane.logWindowOpened": string;
"logPane.pause": string;
"logPane.title": string;
"logPane.wrap": string;
"Maximum delay for batch database updating": string;
"Maximum file size": string;
"Maximum Incubating Chunk Size": string;
"Maximum Incubating Chunks": string;
"Maximum Incubation Period": string;
"MB (0 to disable).": string;
"Memory cache size (by total characters)": string;
"Memory cache size (by total items)": string;
"Minimum delay for batch database updating": string;
"Minimum interval for syncing": string;
"moduleCheckRemoteSize.logCheckingStorageSizes": string;
"moduleCheckRemoteSize.logCurrentStorageSize": string;
"moduleCheckRemoteSize.logExceededWarning": string;
"moduleCheckRemoteSize.logThresholdEnlarged": string;
"moduleCheckRemoteSize.msgConfirmRebuild": string;
"moduleCheckRemoteSize.msgDatabaseGrowing": string;
"moduleCheckRemoteSize.msgSetDBCapacity": string;
"moduleCheckRemoteSize.option2GB": string;
"moduleCheckRemoteSize.option800MB": string;
"moduleCheckRemoteSize.optionAskMeLater": string;
"moduleCheckRemoteSize.optionDismiss": string;
"moduleCheckRemoteSize.optionIncreaseLimit": string;
"moduleCheckRemoteSize.optionNoWarn": string;
"moduleCheckRemoteSize.optionRebuildAll": string;
"moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": string;
"moduleCheckRemoteSize.titleDatabaseSizeNotify": string;
"moduleInputUIObsidian.defaultTitleConfirmation": string;
"moduleInputUIObsidian.defaultTitleSelect": string;
"moduleInputUIObsidian.optionNo": string;
"moduleInputUIObsidian.optionYes": string;
"moduleLiveSyncMain.logAdditionalSafetyScan": string;
"moduleLiveSyncMain.logLoadingPlugin": string;
"moduleLiveSyncMain.logPluginInitCancelled": string;
"moduleLiveSyncMain.logPluginVersion": string;
"moduleLiveSyncMain.logReadChangelog": string;
"moduleLiveSyncMain.logSafetyScanCompleted": string;
"moduleLiveSyncMain.logSafetyScanFailed": string;
"moduleLiveSyncMain.logUnloadingPlugin": string;
"moduleLiveSyncMain.logVersionUpdate": string;
"moduleLiveSyncMain.msgScramEnabled": string;
"moduleLiveSyncMain.optionKeepLiveSyncDisabled": string;
"moduleLiveSyncMain.optionResumeAndRestart": string;
"moduleLiveSyncMain.titleScramEnabled": string;
"moduleLocalDatabase.logWaitingForReady": string;
"moduleLog.showLog": string;
"moduleMigration.docUri": string;
"moduleMigration.fix0256.buttons.checkItLater": string;
"moduleMigration.fix0256.buttons.DismissForever": string;
"moduleMigration.fix0256.buttons.fix": string;
"moduleMigration.fix0256.message": string;
"moduleMigration.fix0256.messageUnrecoverable": string;
"moduleMigration.fix0256.title": string;
"moduleMigration.insecureChunkExist.buttons.fetch": string;
"moduleMigration.insecureChunkExist.buttons.later": string;
"moduleMigration.insecureChunkExist.buttons.rebuild": string;
"moduleMigration.insecureChunkExist.laterMessage": string;
"moduleMigration.insecureChunkExist.message": string;
"moduleMigration.insecureChunkExist.title": string;
"moduleMigration.logBulkSendCorrupted": string;
"moduleMigration.logFetchRemoteTweakFailed": string;
"moduleMigration.logLocalDatabaseNotReady": string;
"moduleMigration.logMigratedSameBehaviour": string;
"moduleMigration.logMigrationFailed": string;
"moduleMigration.logRedflag2CreationFail": string;
"moduleMigration.logRemoteTweakUnavailable": string;
"moduleMigration.logSetupCancelled": string;
"moduleMigration.msgFetchRemoteAgain": string;
"moduleMigration.msgInitialSetup": string;
"moduleMigration.msgRecommendSetupUri": string;
"moduleMigration.msgSinceV02321": string;
"moduleMigration.optionAdjustRemote": string;
"moduleMigration.optionDecideLater": string;
"moduleMigration.optionEnableBoth": string;
"moduleMigration.optionEnableFilenameCaseInsensitive": string;
"moduleMigration.optionEnableFixedRevisionForChunks": string;
"moduleMigration.optionHaveSetupUri": string;
"moduleMigration.optionKeepPreviousBehaviour": string;
"moduleMigration.optionManualSetup": string;
"moduleMigration.optionNoAskAgain": string;
"moduleMigration.optionNoSetupUri": string;
"moduleMigration.optionRemindNextLaunch": string;
"moduleMigration.optionSetupViaP2P": string;
"moduleMigration.optionSetupWizard": string;
"moduleMigration.optionYesFetchAgain": string;
"moduleMigration.titleCaseSensitivity": string;
"moduleMigration.titleRecommendSetupUri": string;
"moduleMigration.titleWelcome": string;
"moduleObsidianMenu.replicate": string;
"Move remotely deleted files to the trash, instead of deleting.": string;
"Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": string;
"Notify all setting files": string;
"Notify customized": string;
"Notify when other device has newly customized.": string;
"Notify when the estimated remote storage size exceeds on start up": string;
"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.": string;
"Number of changes to sync at a time. Defaults to 50. Minimum is 2.": string;
"obsidianLiveSyncSettingTab.btnApply": string;
"obsidianLiveSyncSettingTab.btnCheck": string;
"obsidianLiveSyncSettingTab.btnCopy": string;
"obsidianLiveSyncSettingTab.btnDisable": string;
"obsidianLiveSyncSettingTab.btnDiscard": string;
"obsidianLiveSyncSettingTab.btnEnable": string;
"obsidianLiveSyncSettingTab.btnFix": string;
"obsidianLiveSyncSettingTab.btnGotItAndUpdated": string;
"obsidianLiveSyncSettingTab.btnNext": string;
"obsidianLiveSyncSettingTab.btnStart": string;
"obsidianLiveSyncSettingTab.btnTest": string;
"obsidianLiveSyncSettingTab.btnUse": string;
"obsidianLiveSyncSettingTab.buttonFetch": string;
"obsidianLiveSyncSettingTab.buttonNext": string;
"obsidianLiveSyncSettingTab.defaultLanguage": string;
"obsidianLiveSyncSettingTab.descConnectSetupURI": string;
"obsidianLiveSyncSettingTab.descCopySetupURI": string;
"obsidianLiveSyncSettingTab.descEnableLiveSync": string;
"obsidianLiveSyncSettingTab.descFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.descManualSetup": string;
"obsidianLiveSyncSettingTab.descTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.descValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.errAccessForbidden": string;
"obsidianLiveSyncSettingTab.errCannotContinueTest": string;
"obsidianLiveSyncSettingTab.errCorsCredentials": string;
"obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": string;
"obsidianLiveSyncSettingTab.errCorsOrigins": string;
"obsidianLiveSyncSettingTab.errEnableCors": string;
"obsidianLiveSyncSettingTab.errEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.errMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.errMaxRequestSize": string;
"obsidianLiveSyncSettingTab.errMissingWwwAuth": string;
"obsidianLiveSyncSettingTab.errRequireValidUser": string;
"obsidianLiveSyncSettingTab.errRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.labelDisabled": string;
"obsidianLiveSyncSettingTab.labelEnabled": string;
"obsidianLiveSyncSettingTab.levelAdvanced": string;
"obsidianLiveSyncSettingTab.levelEdgeCase": string;
"obsidianLiveSyncSettingTab.levelPowerUser": string;
"obsidianLiveSyncSettingTab.linkOpenInBrowser": string;
"obsidianLiveSyncSettingTab.linkPageTop": string;
"obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": string;
"obsidianLiveSyncSettingTab.linkTroubleshooting": string;
"obsidianLiveSyncSettingTab.logCannotUseCloudant": string;
"obsidianLiveSyncSettingTab.logCheckingConfigDone": string;
"obsidianLiveSyncSettingTab.logCheckingConfigFailed": string;
"obsidianLiveSyncSettingTab.logCheckingDbConfig": string;
"obsidianLiveSyncSettingTab.logCheckPassphraseFailed": string;
"obsidianLiveSyncSettingTab.logConfiguredDisabled": string;
"obsidianLiveSyncSettingTab.logConfiguredLiveSync": string;
"obsidianLiveSyncSettingTab.logConfiguredPeriodic": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigFail": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigSet": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": string;
"obsidianLiveSyncSettingTab.logDatabaseConnected": string;
"obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": string;
"obsidianLiveSyncSettingTab.logEncryptionNoSupport": string;
"obsidianLiveSyncSettingTab.logErrorOccurred": string;
"obsidianLiveSyncSettingTab.logEstimatedSize": string;
"obsidianLiveSyncSettingTab.logPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.logPassphraseNotCompatible": string;
"obsidianLiveSyncSettingTab.logRebuildNote": string;
"obsidianLiveSyncSettingTab.logSelectAnyPreset": string;
"obsidianLiveSyncSettingTab.msgAreYouSureProceed": string;
"obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": string;
"obsidianLiveSyncSettingTab.msgConfigCheck": string;
"obsidianLiveSyncSettingTab.msgConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.msgConnectionCheck": string;
"obsidianLiveSyncSettingTab.msgConnectionProxyNote": string;
"obsidianLiveSyncSettingTab.msgCurrentOrigin": string;
"obsidianLiveSyncSettingTab.msgDiscardConfirmation": string;
"obsidianLiveSyncSettingTab.msgDone": string;
"obsidianLiveSyncSettingTab.msgEnableCors": string;
"obsidianLiveSyncSettingTab.msgEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": string;
"obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.msgGenerateSetupURI": string;
"obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": string;
"obsidianLiveSyncSettingTab.msgInvalidPassphrase": string;
"obsidianLiveSyncSettingTab.msgNewVersionNote": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSInfo": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSWarning": string;
"obsidianLiveSyncSettingTab.msgNotice": string;
"obsidianLiveSyncSettingTab.msgObjectStorageWarning": string;
"obsidianLiveSyncSettingTab.msgOriginCheck": string;
"obsidianLiveSyncSettingTab.msgRebuildRequired": string;
"obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": string;
"obsidianLiveSyncSettingTab.msgSetCorsCredentials": string;
"obsidianLiveSyncSettingTab.msgSetCorsOrigins": string;
"obsidianLiveSyncSettingTab.msgSetMaxDocSize": string;
"obsidianLiveSyncSettingTab.msgSetMaxRequestSize": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUser": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.msgSettingModified": string;
"obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": string;
"obsidianLiveSyncSettingTab.msgSetWwwAuth": string;
"obsidianLiveSyncSettingTab.nameApplySettings": string;
"obsidianLiveSyncSettingTab.nameConnectSetupURI": string;
"obsidianLiveSyncSettingTab.nameCopySetupURI": string;
"obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameDiscardSettings": string;
"obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameEnableLiveSync": string;
"obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": string;
"obsidianLiveSyncSettingTab.nameManualSetup": string;
"obsidianLiveSyncSettingTab.nameTestConnection": string;
"obsidianLiveSyncSettingTab.nameTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.okAdminPrivileges": string;
"obsidianLiveSyncSettingTab.okCorsCredentials": string;
"obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": string;
"obsidianLiveSyncSettingTab.okCorsOriginMatched": string;
"obsidianLiveSyncSettingTab.okCorsOrigins": string;
"obsidianLiveSyncSettingTab.okEnableCors": string;
"obsidianLiveSyncSettingTab.okEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.okMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.okMaxRequestSize": string;
"obsidianLiveSyncSettingTab.okRequireValidUser": string;
"obsidianLiveSyncSettingTab.okRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.okWwwAuth": string;
"obsidianLiveSyncSettingTab.optionApply": string;
"obsidianLiveSyncSettingTab.optionCancel": string;
"obsidianLiveSyncSettingTab.optionCouchDB": string;
"obsidianLiveSyncSettingTab.optionDisableAllAutomatic": string;
"obsidianLiveSyncSettingTab.optionFetchFromRemote": string;
"obsidianLiveSyncSettingTab.optionHere": string;
"obsidianLiveSyncSettingTab.optionLiveSync": string;
"obsidianLiveSyncSettingTab.optionMinioS3R2": string;
"obsidianLiveSyncSettingTab.optionOkReadEverything": string;
"obsidianLiveSyncSettingTab.optionOnEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicAndEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicWithBatch": string;
"obsidianLiveSyncSettingTab.optionRebuildBoth": string;
"obsidianLiveSyncSettingTab.optionSaveOnlySettings": string;
"obsidianLiveSyncSettingTab.panelChangeLog": string;
"obsidianLiveSyncSettingTab.panelGeneralSettings": string;
"obsidianLiveSyncSettingTab.panelPrivacyEncryption": string;
"obsidianLiveSyncSettingTab.panelRemoteConfiguration": string;
"obsidianLiveSyncSettingTab.panelSetup": string;
"obsidianLiveSyncSettingTab.serverVersion": string;
"obsidianLiveSyncSettingTab.titleActiveRemoteServer": string;
"obsidianLiveSyncSettingTab.titleAppearance": string;
"obsidianLiveSyncSettingTab.titleConflictResolution": string;
"obsidianLiveSyncSettingTab.titleCongratulations": string;
"obsidianLiveSyncSettingTab.titleCouchDB": string;
"obsidianLiveSyncSettingTab.titleDeletionPropagation": string;
"obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": string;
"obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.titleExtraFeatures": string;
"obsidianLiveSyncSettingTab.titleFetchConfig": string;
"obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.titleFetchSettings": string;
"obsidianLiveSyncSettingTab.titleHiddenFiles": string;
"obsidianLiveSyncSettingTab.titleLogging": string;
"obsidianLiveSyncSettingTab.titleMinioS3R2": string;
"obsidianLiveSyncSettingTab.titleNotification": string;
"obsidianLiveSyncSettingTab.titleOnlineTips": string;
"obsidianLiveSyncSettingTab.titleQuickSetup": string;
"obsidianLiveSyncSettingTab.titleRebuildRequired": string;
"obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.titleRemoteServer": string;
"obsidianLiveSyncSettingTab.titleReset": string;
"obsidianLiveSyncSettingTab.titleSetupOtherDevices": string;
"obsidianLiveSyncSettingTab.titleSynchronizationMethod": string;
"obsidianLiveSyncSettingTab.titleSynchronizationPreset": string;
"obsidianLiveSyncSettingTab.titleSyncSettings": string;
"obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": string;
"obsidianLiveSyncSettingTab.titleUpdateThinning": string;
"obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": string;
"obsidianLiveSyncSettingTab.warnNoAdmin": string;
"P2P.AskPassphraseForDecrypt": string;
"P2P.AskPassphraseForShare": string;
"P2P.DisabledButNeed": string;
"P2P.FailedToOpen": string;
"P2P.NoAutoSyncPeers": string;
"P2P.NoKnownPeers": string;
"P2P.Note.description": string;
"P2P.Note.important_note": string;
"P2P.Note.important_note_sub": string;
"P2P.Note.Summary": string;
"P2P.NotEnabled": string;
"P2P.P2PReplication": string;
"P2P.PaneTitle": string;
"P2P.ReplicatorInstanceMissing": string;
"P2P.SeemsOffline": string;
"P2P.SyncAlreadyRunning": string;
"P2P.SyncCompleted": string;
"P2P.SyncStartedWith": string;
Passphrase: string;
"Passphrase of sensitive configuration items": string;
password: string;
Password: string;
"Path Obfuscation": string;
"Per-file-saved customization sync": string;
"Periodic Sync interval": string;
"Prepare the 'report' to create an issue": string;
Presets: string;
"Process small files in the foreground": string;
"Property Encryption": string;
"RedFlag.Fetch.Method.Desc": string;
"RedFlag.Fetch.Method.FetchSafer": string;
"RedFlag.Fetch.Method.FetchSmoother": string;
"RedFlag.Fetch.Method.FetchTraditional": string;
"RedFlag.Fetch.Method.Title": string;
"RedFlag.FetchRemoteConfig.Buttons.Cancel": string;
"RedFlag.FetchRemoteConfig.Buttons.Fetch": string;
"RedFlag.FetchRemoteConfig.Message": string;
"RedFlag.FetchRemoteConfig.Title": string;
"Reducing the frequency with which on-disk changes are reflected into the DB": string;
Region: string;
"Remote server type": string;
"Remote Type": string;
"Replicator.Dialogue.Locked.Action.Dismiss": string;
"Replicator.Dialogue.Locked.Action.Fetch": string;
"Replicator.Dialogue.Locked.Action.Unlock": string;
"Replicator.Dialogue.Locked.Message": string;
"Replicator.Dialogue.Locked.Message.Fetch": string;
"Replicator.Dialogue.Locked.Message.Unlocked": string;
"Replicator.Dialogue.Locked.Title": string;
"Replicator.Message.Cleaned": string;
"Replicator.Message.InitialiseFatalError": string;
"Replicator.Message.Pending": string;
"Replicator.Message.SomeModuleFailed": string;
"Replicator.Message.VersionUpFlash": string;
"Requires restart of Obsidian": string;
"Requires restart of Obsidian.": string;
"Rerun Onboarding Wizard": string;
"Rerun the onboarding wizard to set up Self-hosted LiveSync again.": string;
"Rerun Wizard": string;
"Reset notification threshold and check the remote database usage": string;
"Reset the remote storage size threshold and check the remote storage size again.": string;
"Run Doctor": string;
"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": string;
"Saving will be performed forcefully after this number of seconds.": string;
"Scan changes on customization sync": string;
"Scan customization automatically": string;
"Scan customization before replicating.": string;
"Scan customization every 1 minute.": string;
"Scan customization periodically": string;
"Scan for hidden files before replication": string;
"Scan hidden files periodically": string;
"Seconds, 0 to disable": string;
"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": string;
"Secret Key": string;
"Server URI": string;
"Setting.GenerateKeyPair.Desc": string;
"Setting.GenerateKeyPair.Title": string;
"Setting.TroubleShooting": string;
"Setting.TroubleShooting.Doctor": string;
"Setting.TroubleShooting.Doctor.Desc": string;
"Setting.TroubleShooting.ScanBrokenFiles": string;
"Setting.TroubleShooting.ScanBrokenFiles.Desc": string;
"SettingTab.Message.AskRebuild": string;
"Setup.Apply.Buttons.ApplyAndFetch": string;
"Setup.Apply.Buttons.ApplyAndMerge": string;
"Setup.Apply.Buttons.ApplyAndRebuild": string;
"Setup.Apply.Buttons.Cancel": string;
"Setup.Apply.Buttons.OnlyApply": string;
"Setup.Apply.Message": string;
"Setup.Apply.Title": string;
"Setup.Apply.WarningRebuildRecommended": string;
"Setup.Doctor.Buttons.No": string;
"Setup.Doctor.Buttons.Yes": string;
"Setup.Doctor.Message": string;
"Setup.Doctor.Title": string;
"Setup.FetchRemoteConf.Buttons.Fetch": string;
"Setup.FetchRemoteConf.Buttons.Skip": string;
"Setup.FetchRemoteConf.Message": string;
"Setup.FetchRemoteConf.Title": string;
"Setup.QRCode": string;
"Setup.ShowQRCode": string;
"Setup.ShowQRCode.Desc": string;
"Should we keep folders that don't have any files inside?": string;
"Should we only check for conflicts when a file is opened?": string;
"Should we prompt you about conflicting files when a file is opened?": string;
"Should we prompt you for every single merge, even if we can safely merge automatcially?": string;
"Show only notifications": string;
"Show status as icons only": string;
"Show status icon instead of file warnings banner": string;
"Show status inside the editor": string;
"Show status on the status bar": string;
"Show verbose log. Please enable if you report an issue.": string;
"Starts synchronisation when a file is saved.": string;
"Stop reflecting database changes to storage files.": string;
"Stop watching for file changes.": string;
"Suppress notification of hidden files change": string;
"Suspend database reflecting": string;
"Suspend file watching": string;
"Sync after merging file": string;
"Sync automatically after merging files": string;
"Sync Mode": string;
"Sync on Editor Save": string;
"Sync on File Open": string;
"Sync on Save": string;
"Sync on Startup": string;
"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.": string;
"The delay for consecutive on-demand fetches": string;
"The Hash algorithm for chunk IDs": string;
"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.": string;
"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.": string;
"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.": string;
"The minimum interval for automatic synchronisation on event.": string;
"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": string;
"TweakMismatchResolve.Action.Dismiss": string;
"TweakMismatchResolve.Action.UseConfigured": string;
"TweakMismatchResolve.Action.UseMine": string;
"TweakMismatchResolve.Action.UseMineAcceptIncompatible": string;
"TweakMismatchResolve.Action.UseMineWithRebuild": string;
"TweakMismatchResolve.Action.UseRemote": string;
"TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": string;
"TweakMismatchResolve.Action.UseRemoteWithRebuild": string;
"TweakMismatchResolve.Message.Main": string;
"TweakMismatchResolve.Message.MainTweakResolving": string;
"TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": string;
"TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": string;
"TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": string;
"TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": string;
"TweakMismatchResolve.Table": string;
"TweakMismatchResolve.Table.Row": string;
"TweakMismatchResolve.Title": string;
"TweakMismatchResolve.Title.TweakResolving": string;
"TweakMismatchResolve.Title.UseRemoteConfig": string;
"Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": string;
"Use Custom HTTP Handler": string;
"Use dynamic iteration count": string;
"Use Segmented-splitter": string;
"Use splitting-limit-capped chunk splitter": string;
"Use the trash bin": string;
"Use timeouts instead of heartbeats": string;
username: string;
Username: string;
"Verbose Log": string;
"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.": string;
"When you save a file in the editor, start a sync automatically": string;
"Write credentials in the file": string;
"Write logs into the file": string;
};
};
+838
View File
@@ -0,0 +1,838 @@
export declare const PartialMessages: {
readonly ja: {
"(Active)": string;
"(BETA) Always overwrite with a newer file": string;
"(Beta) Use ignore files": string;
"(Days passed, 0 to disable automatic-deletion)": string;
"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.": string;
"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.": string;
"(Mega chars)": string;
"(Not recommended) If set, credentials will be stored in the file.": string;
"(Obsolete) Use an old adapter for compatibility": string;
"(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.": string;
"(RegExp) If this is set, any changes to local and remote files that match this will be skipped.": string;
"(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"> [!INFO]- The connected devices have been detected as follows:\n${devices}": string;
"A Setup URI is a single string of text containing your server address and authentication details. Using a URI, if one was generated by your server installation script, provides a simple and secure configuration.": string;
"Access Key": string;
Activate: string;
"Add default patterns": string;
"Add new connection": string;
"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": string;
"Always prompt merge conflicts": string;
"Analyse database usage": string;
"Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.": string;
"Apply Latest Change if Conflicting": string;
"Apply preset configuration": string;
"Ask a passphrase at every launch": string;
"Automatically Sync all files when opening Obsidian.": string;
Back: string;
"Back to non-configured": string;
"Batch database update": string;
"Batch limit": string;
"Batch size": string;
"Batch size of on-demand fetching": string;
"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.": string;
"Bucket Name": string;
Cancel: string;
"Cancel Garbage Collection": string;
"Check and convert non-path-obfuscated files": string;
"Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": string;
"cmdConfigSync.showCustomizationSync": string;
"Comma separated `.gitignore, .dockerignore`": string;
"Compaction in progress on remote database...": string;
"Compaction on remote database completed successfully.": string;
"Compaction on remote database failed.": string;
"Compaction on remote database timed out.": string;
"Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.": string;
"Compatibility (Conflict Behaviour)": string;
"Compatibility (Database structure)": string;
"Compatibility (Internal API Usage)": string;
"Compatibility (Metadata)": string;
"Compatibility (Remote Database)": string;
"Compatibility (Trouble addressed)": string;
"Compute revisions for chunks": string;
"Configuration Encryption": string;
Configure: string;
"Configure And Change Remote": string;
"Configure E2EE": string;
"Configure Remote": string;
"Configure the same server information as your other devices again, manually, very advanced users only.": string;
"Connection Method": string;
"Continue to CouchDB setup": string;
"Continue to Peer-to-Peer only setup": string;
"Continue to S3/MinIO/R2 setup": string;
Copy: string;
"Copy Report to clipboard": string;
"CouchDB Connection Tweak": string;
"Cross-platform": string;
"Current adapter: {adapter}": string;
"Customization Sync": string;
"Customization Sync (Beta3)": string;
"Data Compression": string;
"Database Adapter": string;
"Database Name": string;
"Database suffix": string;
Default: string;
"Delay conflict resolution of inactive files": string;
"Delay merge conflict prompt for inactive files.": string;
Delete: string;
"Delete all customization sync data": string;
"Delete all data on the remote server.": string;
"Delete local database to reset or uninstall Self-hosted LiveSync": string;
"Delete old metadata of deleted files on start-up": string;
"Delete Remote Configuration": string;
"Delete remote configuration '{name}'?": string;
desktop: string;
Developer: string;
Device: string;
"Device name": string;
"Device Setup Method": string;
"dialog.yourLanguageAvailable": string;
"dialog.yourLanguageAvailable.btnRevertToDefault": string;
"dialog.yourLanguageAvailable.Title": string;
"Disables all synchronization and restart.": string;
"Disables logging, only shows notifications. Please disable if you report an issue.": string;
"Display Language": string;
"Display name": string;
"Do not check configuration mismatch before replication": string;
"Do not keep metadata of deleted files.": string;
"Do not split chunks in the background": string;
"Do not use internal API": string;
"Doctor.Button.DismissThisVersion": string;
"Doctor.Button.Fix": string;
"Doctor.Button.FixButNoRebuild": string;
"Doctor.Button.No": string;
"Doctor.Button.Skip": string;
"Doctor.Button.Yes": string;
"Doctor.Dialogue.Main": string;
"Doctor.Dialogue.MainFix": string;
"Doctor.Dialogue.Title": string;
"Doctor.Dialogue.TitleAlmostDone": string;
"Doctor.Dialogue.TitleFix": string;
"Doctor.Level.Must": string;
"Doctor.Level.Necessary": string;
"Doctor.Level.Optional": string;
"Doctor.Level.Recommended": string;
"Doctor.Message.NoIssues": string;
"Doctor.Message.RebuildLocalRequired": string;
"Doctor.Message.RebuildRequired": string;
"Doctor.Message.SomeSkipped": string;
"Doctor.RULES.E2EE_V02500.REASON": string;
Duplicate: string;
"Duplicate remote": string;
"E2EE Configuration": string;
"Edge case addressing (Behaviour)": string;
"Edge case addressing (Database)": string;
"Edge case addressing (Processing)": string;
"Emergency restart": string;
"Enable advanced features": string;
"Enable customization sync": string;
"Enable Developers' Debug Tools.": string;
"Enable edge case treatment features": string;
"Enable poweruser features": string;
"Enable this if your Object Storage doesn't support CORS": string;
"Enable this option to automatically apply the most recent change to documents even when it conflicts": string;
"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": string;
"Encrypting sensitive configuration items": string;
"Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": string;
"End-to-End Encryption": string;
"Endpoint URL": string;
"Enhance chunk size": string;
"Enter Server Information": string;
"Enter the server information manually": string;
Export: string;
"Failed to connect to remote for compaction.": string;
"Failed to connect to remote for compaction. ${reason}": string;
"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": string;
"Failed to start replication after Garbage Collection.": string;
Fetch: string;
"Fetch chunks on demand": string;
"Fetch database with previous behaviour": string;
"Fetch remote settings": string;
"File to resolve conflict": string;
Filename: string;
"First, please select the option that best describes your current situation.": string;
"Flag and restart": string;
"Forces the file to be synced when opened.": string;
"Fresh Start Wipe": string;
"Garbage Collection cancelled by user.": string;
"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": string;
"Garbage Collection Confirmation": string;
"Garbage Collection V3 (Beta)": string;
"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": string;
"Garbage Collection: Scanned ${scanned} / ~${docCount}": string;
"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": string;
"Handle files as Case-Sensitive": string;
"Hidden Files": string;
"How to display network errors when the sync server is unreachable.": string;
"How would you like to configure the connection to your server?": string;
"I am adding a device to an existing synchronisation setup": string;
"I am setting this up for the first time": string;
"I know my server details, let me enter them": string;
"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": string;
"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.": string;
"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": string;
"If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": string;
"If enabled, the \u26D4 icon will be shown inside the status instead of the file warnings banner. No details will be shown.": string;
"If enabled, the file under 1kb will be processed in the UI thread.": string;
"If enabled, the notification of hidden files change will be suppressed.": string;
"If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": string;
"If this enabled, All files are handled as case-Sensitive (Previous behaviour).": string;
"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": string;
"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.": string;
"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.": string;
"Ignore and Proceed": string;
"Ignore files": string;
"Ignore patterns": string;
"Import connection": string;
"Incubate Chunks in Document": string;
"Initialise all journal history, On the next sync, every item will be received and sent.": string;
"Interval (sec)": string;
"K.exp": string;
"K.long_p2p_sync": string;
"K.P2P": string;
"K.Peer": string;
"K.ScanCustomization": string;
"K.short_p2p_sync": string;
"K.title_p2p_sync": string;
"Keep empty folder": string;
lang_def: string;
"lang-de": string;
"lang-def": string;
"lang-es": string;
"lang-fr": string;
"lang-ja": string;
"lang-ko": string;
"lang-ru": string;
"lang-zh": string;
"lang-zh-tw": string;
Later: string;
"Limit: {datetime} ({timestamp})": string;
"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": string;
"liveSyncReplicator.beforeLiveSync": string;
"liveSyncReplicator.cantReplicateLowerValue": string;
"liveSyncReplicator.checkingLastSyncPoint": string;
"liveSyncReplicator.couldNotConnectTo": string;
"liveSyncReplicator.couldNotConnectToRemoteDb": string;
"liveSyncReplicator.couldNotConnectToServer": string;
"liveSyncReplicator.couldNotConnectToURI": string;
"liveSyncReplicator.couldNotMarkResolveRemoteDb": string;
"liveSyncReplicator.liveSyncBegin": string;
"liveSyncReplicator.lockRemoteDb": string;
"liveSyncReplicator.markDeviceResolved": string;
"liveSyncReplicator.oneShotSyncBegin": string;
"liveSyncReplicator.remoteDbCorrupted": string;
"liveSyncReplicator.remoteDbCreatedOrConnected": string;
"liveSyncReplicator.remoteDbDestroyed": string;
"liveSyncReplicator.remoteDbDestroyError": string;
"liveSyncReplicator.remoteDbMarkedResolved": string;
"liveSyncReplicator.replicationClosed": string;
"liveSyncReplicator.replicationInProgress": string;
"liveSyncReplicator.retryLowerBatchSize": string;
"liveSyncReplicator.unlockRemoteDb": string;
"liveSyncSetting.errorNoSuchSettingItem": string;
"liveSyncSetting.originalValue": string;
"liveSyncSetting.valueShouldBeInRange": string;
"liveSyncSettings.btnApply": string;
"Local Database Tweak": string;
Lock: string;
"Lock Server": string;
"Lock the remote server to prevent synchronization with other devices.": string;
"logPane.autoScroll": string;
"logPane.logWindowOpened": string;
"logPane.pause": string;
"logPane.title": string;
"logPane.wrap": string;
"Maximum delay for batch database updating": string;
"Maximum file size": string;
"Maximum Incubating Chunk Size": string;
"Maximum Incubating Chunks": string;
"Maximum Incubation Period": string;
"MB (0 to disable).": string;
"Memory cache": string;
"Memory cache size (by total characters)": string;
"Memory cache size (by total items)": string;
Merge: string;
"Minimum delay for batch database updating": string;
"Minimum interval for syncing": string;
"moduleCheckRemoteSize.logCheckingStorageSizes": string;
"moduleCheckRemoteSize.logCurrentStorageSize": string;
"moduleCheckRemoteSize.logExceededWarning": string;
"moduleCheckRemoteSize.logThresholdEnlarged": string;
"moduleCheckRemoteSize.msgConfirmRebuild": string;
"moduleCheckRemoteSize.msgDatabaseGrowing": string;
"moduleCheckRemoteSize.msgSetDBCapacity": string;
"moduleCheckRemoteSize.option2GB": string;
"moduleCheckRemoteSize.option800MB": string;
"moduleCheckRemoteSize.optionAskMeLater": string;
"moduleCheckRemoteSize.optionDismiss": string;
"moduleCheckRemoteSize.optionIncreaseLimit": string;
"moduleCheckRemoteSize.optionNoWarn": string;
"moduleCheckRemoteSize.optionRebuildAll": string;
"moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": string;
"moduleCheckRemoteSize.titleDatabaseSizeNotify": string;
"moduleInputUIObsidian.defaultTitleConfirmation": string;
"moduleInputUIObsidian.defaultTitleSelect": string;
"moduleInputUIObsidian.optionNo": string;
"moduleInputUIObsidian.optionYes": string;
"moduleLiveSyncMain.logAdditionalSafetyScan": string;
"moduleLiveSyncMain.logLoadingPlugin": string;
"moduleLiveSyncMain.logPluginInitCancelled": string;
"moduleLiveSyncMain.logPluginVersion": string;
"moduleLiveSyncMain.logReadChangelog": string;
"moduleLiveSyncMain.logSafetyScanCompleted": string;
"moduleLiveSyncMain.logSafetyScanFailed": string;
"moduleLiveSyncMain.logUnloadingPlugin": string;
"moduleLiveSyncMain.logVersionUpdate": string;
"moduleLiveSyncMain.msgScramEnabled": string;
"moduleLiveSyncMain.optionKeepLiveSyncDisabled": string;
"moduleLiveSyncMain.optionResumeAndRestart": string;
"moduleLiveSyncMain.titleScramEnabled": string;
"moduleLocalDatabase.logWaitingForReady": string;
"moduleLog.showLog": string;
"moduleMigration.docUri": string;
"moduleMigration.fix0256.buttons.checkItLater": string;
"moduleMigration.fix0256.buttons.DismissForever": string;
"moduleMigration.fix0256.buttons.fix": string;
"moduleMigration.fix0256.message": string;
"moduleMigration.fix0256.messageUnrecoverable": string;
"moduleMigration.fix0256.title": string;
"moduleMigration.insecureChunkExist.buttons.fetch": string;
"moduleMigration.insecureChunkExist.buttons.later": string;
"moduleMigration.insecureChunkExist.buttons.rebuild": string;
"moduleMigration.insecureChunkExist.laterMessage": string;
"moduleMigration.insecureChunkExist.message": string;
"moduleMigration.insecureChunkExist.title": string;
"moduleMigration.logBulkSendCorrupted": string;
"moduleMigration.logFetchRemoteTweakFailed": string;
"moduleMigration.logLocalDatabaseNotReady": string;
"moduleMigration.logMigratedSameBehaviour": string;
"moduleMigration.logMigrationFailed": string;
"moduleMigration.logRedflag2CreationFail": string;
"moduleMigration.logRemoteTweakUnavailable": string;
"moduleMigration.logSetupCancelled": string;
"moduleMigration.msgFetchRemoteAgain": string;
"moduleMigration.msgInitialSetup": string;
"moduleMigration.msgRecommendSetupUri": string;
"moduleMigration.msgSinceV02321": string;
"moduleMigration.optionAdjustRemote": string;
"moduleMigration.optionDecideLater": string;
"moduleMigration.optionEnableBoth": string;
"moduleMigration.optionEnableFilenameCaseInsensitive": string;
"moduleMigration.optionEnableFixedRevisionForChunks": string;
"moduleMigration.optionHaveSetupUri": string;
"moduleMigration.optionKeepPreviousBehaviour": string;
"moduleMigration.optionManualSetup": string;
"moduleMigration.optionNoAskAgain": string;
"moduleMigration.optionNoSetupUri": string;
"moduleMigration.optionRemindNextLaunch": string;
"moduleMigration.optionSetupViaP2P": string;
"moduleMigration.optionSetupWizard": string;
"moduleMigration.optionYesFetchAgain": string;
"moduleMigration.titleCaseSensitivity": string;
"moduleMigration.titleRecommendSetupUri": string;
"moduleMigration.titleWelcome": string;
"moduleObsidianMenu.replicate": string;
"More actions": string;
"Move remotely deleted files to the trash, instead of deleting.": string;
"Network warning style": string;
"New Remote": string;
"No connected device information found. Cancelling Garbage Collection.": string;
"No limit configured": string;
"No, please take me back": string;
"Node ID": string;
"Node Information Missing": string;
"Non-Synchronising files": string;
"Normal Files": string;
"Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": string;
"Notify all setting files": string;
"Notify customized": string;
"Notify when other device has newly customized.": string;
"Notify when the estimated remote storage size exceeds on start up": string;
"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.": string;
"Number of changes to sync at a time. Defaults to 50. Minimum is 2.": string;
"Obsidian version": string;
"obsidianLiveSyncSettingTab.btnApply": string;
"obsidianLiveSyncSettingTab.btnCheck": string;
"obsidianLiveSyncSettingTab.btnCopy": string;
"obsidianLiveSyncSettingTab.btnDisable": string;
"obsidianLiveSyncSettingTab.btnDiscard": string;
"obsidianLiveSyncSettingTab.btnEnable": string;
"obsidianLiveSyncSettingTab.btnFix": string;
"obsidianLiveSyncSettingTab.btnGotItAndUpdated": string;
"obsidianLiveSyncSettingTab.btnNext": string;
"obsidianLiveSyncSettingTab.btnStart": string;
"obsidianLiveSyncSettingTab.btnTest": string;
"obsidianLiveSyncSettingTab.btnUse": string;
"obsidianLiveSyncSettingTab.buttonFetch": string;
"obsidianLiveSyncSettingTab.buttonNext": string;
"obsidianLiveSyncSettingTab.defaultLanguage": string;
"obsidianLiveSyncSettingTab.descConnectSetupURI": string;
"obsidianLiveSyncSettingTab.descCopySetupURI": string;
"obsidianLiveSyncSettingTab.descEnableLiveSync": string;
"obsidianLiveSyncSettingTab.descFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.descManualSetup": string;
"obsidianLiveSyncSettingTab.descTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.descValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.errAccessForbidden": string;
"obsidianLiveSyncSettingTab.errCannotContinueTest": string;
"obsidianLiveSyncSettingTab.errCorsCredentials": string;
"obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": string;
"obsidianLiveSyncSettingTab.errCorsOrigins": string;
"obsidianLiveSyncSettingTab.errEnableCors": string;
"obsidianLiveSyncSettingTab.errEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.errMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.errMaxRequestSize": string;
"obsidianLiveSyncSettingTab.errMissingWwwAuth": string;
"obsidianLiveSyncSettingTab.errRequireValidUser": string;
"obsidianLiveSyncSettingTab.errRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.labelDisabled": string;
"obsidianLiveSyncSettingTab.labelEnabled": string;
"obsidianLiveSyncSettingTab.levelAdvanced": string;
"obsidianLiveSyncSettingTab.levelEdgeCase": string;
"obsidianLiveSyncSettingTab.levelPowerUser": string;
"obsidianLiveSyncSettingTab.linkOpenInBrowser": string;
"obsidianLiveSyncSettingTab.linkPageTop": string;
"obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": string;
"obsidianLiveSyncSettingTab.linkTroubleshooting": string;
"obsidianLiveSyncSettingTab.logCannotUseCloudant": string;
"obsidianLiveSyncSettingTab.logCheckingConfigDone": string;
"obsidianLiveSyncSettingTab.logCheckingConfigFailed": string;
"obsidianLiveSyncSettingTab.logCheckingDbConfig": string;
"obsidianLiveSyncSettingTab.logCheckPassphraseFailed": string;
"obsidianLiveSyncSettingTab.logConfiguredDisabled": string;
"obsidianLiveSyncSettingTab.logConfiguredLiveSync": string;
"obsidianLiveSyncSettingTab.logConfiguredPeriodic": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigFail": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigSet": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": string;
"obsidianLiveSyncSettingTab.logDatabaseConnected": string;
"obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": string;
"obsidianLiveSyncSettingTab.logEncryptionNoSupport": string;
"obsidianLiveSyncSettingTab.logErrorOccurred": string;
"obsidianLiveSyncSettingTab.logEstimatedSize": string;
"obsidianLiveSyncSettingTab.logPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.logPassphraseNotCompatible": string;
"obsidianLiveSyncSettingTab.logRebuildNote": string;
"obsidianLiveSyncSettingTab.logSelectAnyPreset": string;
"obsidianLiveSyncSettingTab.msgAreYouSureProceed": string;
"obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": string;
"obsidianLiveSyncSettingTab.msgConfigCheck": string;
"obsidianLiveSyncSettingTab.msgConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.msgConnectionCheck": string;
"obsidianLiveSyncSettingTab.msgConnectionProxyNote": string;
"obsidianLiveSyncSettingTab.msgCurrentOrigin": string;
"obsidianLiveSyncSettingTab.msgDiscardConfirmation": string;
"obsidianLiveSyncSettingTab.msgDone": string;
"obsidianLiveSyncSettingTab.msgEnableCors": string;
"obsidianLiveSyncSettingTab.msgEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": string;
"obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.msgGenerateSetupURI": string;
"obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": string;
"obsidianLiveSyncSettingTab.msgInvalidPassphrase": string;
"obsidianLiveSyncSettingTab.msgNewVersionNote": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSInfo": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSWarning": string;
"obsidianLiveSyncSettingTab.msgNotice": string;
"obsidianLiveSyncSettingTab.msgObjectStorageWarning": string;
"obsidianLiveSyncSettingTab.msgOriginCheck": string;
"obsidianLiveSyncSettingTab.msgRebuildRequired": string;
"obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": string;
"obsidianLiveSyncSettingTab.msgSetCorsCredentials": string;
"obsidianLiveSyncSettingTab.msgSetCorsOrigins": string;
"obsidianLiveSyncSettingTab.msgSetMaxDocSize": string;
"obsidianLiveSyncSettingTab.msgSetMaxRequestSize": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUser": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.msgSettingModified": string;
"obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": string;
"obsidianLiveSyncSettingTab.msgSetWwwAuth": string;
"obsidianLiveSyncSettingTab.nameApplySettings": string;
"obsidianLiveSyncSettingTab.nameConnectSetupURI": string;
"obsidianLiveSyncSettingTab.nameCopySetupURI": string;
"obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameDiscardSettings": string;
"obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameEnableLiveSync": string;
"obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": string;
"obsidianLiveSyncSettingTab.nameManualSetup": string;
"obsidianLiveSyncSettingTab.nameTestConnection": string;
"obsidianLiveSyncSettingTab.nameTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.okAdminPrivileges": string;
"obsidianLiveSyncSettingTab.okCorsCredentials": string;
"obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": string;
"obsidianLiveSyncSettingTab.okCorsOriginMatched": string;
"obsidianLiveSyncSettingTab.okCorsOrigins": string;
"obsidianLiveSyncSettingTab.okEnableCors": string;
"obsidianLiveSyncSettingTab.okEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.okMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.okMaxRequestSize": string;
"obsidianLiveSyncSettingTab.okRequireValidUser": string;
"obsidianLiveSyncSettingTab.okRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.okWwwAuth": string;
"obsidianLiveSyncSettingTab.optionApply": string;
"obsidianLiveSyncSettingTab.optionCancel": string;
"obsidianLiveSyncSettingTab.optionCouchDB": string;
"obsidianLiveSyncSettingTab.optionDisableAllAutomatic": string;
"obsidianLiveSyncSettingTab.optionFetchFromRemote": string;
"obsidianLiveSyncSettingTab.optionHere": string;
"obsidianLiveSyncSettingTab.optionLiveSync": string;
"obsidianLiveSyncSettingTab.optionMinioS3R2": string;
"obsidianLiveSyncSettingTab.optionOkReadEverything": string;
"obsidianLiveSyncSettingTab.optionOnEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicAndEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicWithBatch": string;
"obsidianLiveSyncSettingTab.optionRebuildBoth": string;
"obsidianLiveSyncSettingTab.optionSaveOnlySettings": string;
"obsidianLiveSyncSettingTab.panelChangeLog": string;
"obsidianLiveSyncSettingTab.panelGeneralSettings": string;
"obsidianLiveSyncSettingTab.panelPrivacyEncryption": string;
"obsidianLiveSyncSettingTab.panelRemoteConfiguration": string;
"obsidianLiveSyncSettingTab.panelSetup": string;
"obsidianLiveSyncSettingTab.serverVersion": string;
"obsidianLiveSyncSettingTab.titleActiveRemoteServer": string;
"obsidianLiveSyncSettingTab.titleAppearance": string;
"obsidianLiveSyncSettingTab.titleConflictResolution": string;
"obsidianLiveSyncSettingTab.titleCongratulations": string;
"obsidianLiveSyncSettingTab.titleCouchDB": string;
"obsidianLiveSyncSettingTab.titleDeletionPropagation": string;
"obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": string;
"obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.titleExtraFeatures": string;
"obsidianLiveSyncSettingTab.titleFetchConfig": string;
"obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.titleFetchSettings": string;
"obsidianLiveSyncSettingTab.titleHiddenFiles": string;
"obsidianLiveSyncSettingTab.titleLogging": string;
"obsidianLiveSyncSettingTab.titleMinioS3R2": string;
"obsidianLiveSyncSettingTab.titleNotification": string;
"obsidianLiveSyncSettingTab.titleOnlineTips": string;
"obsidianLiveSyncSettingTab.titleQuickSetup": string;
"obsidianLiveSyncSettingTab.titleRebuildRequired": string;
"obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.titleRemoteServer": string;
"obsidianLiveSyncSettingTab.titleReset": string;
"obsidianLiveSyncSettingTab.titleSetupOtherDevices": string;
"obsidianLiveSyncSettingTab.titleSynchronizationMethod": string;
"obsidianLiveSyncSettingTab.titleSynchronizationPreset": string;
"obsidianLiveSyncSettingTab.titleSyncSettings": string;
"obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": string;
"obsidianLiveSyncSettingTab.titleUpdateThinning": string;
"obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": string;
"obsidianLiveSyncSettingTab.warnNoAdmin": string;
Ok: string;
"Old Algorithm": string;
"Older fallback (Slow, W/O WebAssembly)": string;
Open: string;
"Open the dialog": string;
Overwrite: string;
"Overwrite patterns": string;
"Overwrite remote": string;
"Overwrite remote with local DB and passphrase.": string;
"Overwrite Server Data with This Device's Files": string;
"P2P.AskPassphraseForDecrypt": string;
"P2P.AskPassphraseForShare": string;
"P2P.DisabledButNeed": string;
"P2P.FailedToOpen": string;
"P2P.NoAutoSyncPeers": string;
"P2P.NoKnownPeers": string;
"P2P.Note.description": string;
"P2P.Note.important_note": string;
"P2P.Note.important_note_sub": string;
"P2P.Note.Summary": string;
"P2P.NotEnabled": string;
"P2P.P2PReplication": string;
"P2P.PaneTitle": string;
"P2P.ReplicatorInstanceMissing": string;
"P2P.SeemsOffline": string;
"P2P.SyncAlreadyRunning": string;
"P2P.SyncCompleted": string;
"P2P.SyncStartedWith": string;
"paneMaintenance.markDeviceResolvedAfterBackup": string;
"paneMaintenance.remoteLockedAndDeviceNotAccepted": string;
"paneMaintenance.remoteLockedResolvedDevice": string;
"paneMaintenance.unlockDatabaseReady": string;
Passphrase: string;
"Passphrase of sensitive configuration items": string;
password: string;
Password: string;
"Paste a connection string": string;
"Paste the Setup URI generated from one of your active devices.": string;
"Path Obfuscation": string;
"Patterns to match files for overwriting instead of merging": string;
"Patterns to match files for syncing": string;
"Peer-to-Peer only": string;
"Peer-to-Peer Synchronisation": string;
"Per-file-saved customization sync": string;
Perform: string;
"Perform cleanup": string;
"Perform Garbage Collection": string;
"Perform Garbage Collection to remove unused chunks and reduce database size.": string;
"Periodic Sync interval": string;
"Pick a file to resolve conflict": string;
"Please disable 'Read chunks online' in settings to use Garbage Collection.": string;
"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": string;
"Please select 'Cancel' explicitly to cancel this operation.": string;
"Please select a method to import the settings from another device.": string;
"Please select an option to proceed": string;
"Please select the type of server to which you are connecting.": string;
"Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.": string;
"Please set this device name": string;
"Plug-in version": string;
"Prepare the 'report' to create an issue": string;
Presets: string;
"Proceed Garbage Collection": string;
"Proceed with Setup URI": string;
"Proceeding with Garbage Collection, ignoring missing nodes.": string;
"Proceeding with Garbage Collection.": string;
"Process small files in the foreground": string;
Progress: string;
"PureJS fallback (Fast, W/O WebAssembly)": string;
"Purge all download/upload cache.": string;
"Purge all journal counter": string;
"Rebuild local and remote database with local files.": string;
"Rebuilding Operations (Remote Only)": string;
"Recreate all": string;
"Recreate missing chunks for all files": string;
"RedFlag.Fetch.Method.Desc": string;
"RedFlag.Fetch.Method.FetchSafer": string;
"RedFlag.Fetch.Method.FetchSmoother": string;
"RedFlag.Fetch.Method.FetchTraditional": string;
"RedFlag.Fetch.Method.Title": string;
"RedFlag.FetchRemoteConfig.Buttons.Cancel": string;
"RedFlag.FetchRemoteConfig.Buttons.Fetch": string;
"RedFlag.FetchRemoteConfig.Message": string;
"RedFlag.FetchRemoteConfig.Title": string;
"Reduces storage space by discarding all non-latest revisions. This requires the same amount of free space on the remote server and the local client.": string;
"Reducing the frequency with which on-disk changes are reflected into the DB": string;
Region: string;
Remediation: string;
"Remediation Setting Changed": string;
"Remote Database Tweak (In sunset)": string;
"Remote Databases": string;
"Remote name": string;
"Remote server type": string;
"Remote Type": string;
Rename: string;
"Replicator.Dialogue.Locked.Action.Dismiss": string;
"Replicator.Dialogue.Locked.Action.Fetch": string;
"Replicator.Dialogue.Locked.Action.Unlock": string;
"Replicator.Dialogue.Locked.Message": string;
"Replicator.Dialogue.Locked.Message.Fetch": string;
"Replicator.Dialogue.Locked.Message.Unlocked": string;
"Replicator.Dialogue.Locked.Title": string;
"Replicator.Message.Cleaned": string;
"Replicator.Message.InitialiseFatalError": string;
"Replicator.Message.Pending": string;
"Replicator.Message.SomeModuleFailed": string;
"Replicator.Message.VersionUpFlash": string;
"Requires restart of Obsidian": string;
"Requires restart of Obsidian.": string;
"Rerun Onboarding Wizard": string;
"Rerun the onboarding wizard to set up Self-hosted LiveSync again.": string;
"Rerun Wizard": string;
Resend: string;
"Resend all chunks to the remote.": string;
Reset: string;
"Reset all": string;
"Reset all journal counter": string;
"Reset journal received history": string;
"Reset journal sent history": string;
"Reset notification threshold and check the remote database usage": string;
"Reset received": string;
"Reset sent history": string;
"Reset Synchronisation information": string;
"Reset Synchronisation on This Device": string;
"Reset the remote storage size threshold and check the remote storage size again.": string;
"Resolve All": string;
"Resolve all conflicted files": string;
"Resolve All conflicted files by the newer one": string;
"Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.": string;
"Restart Now": string;
"Restore or reconstruct local database from remote.": string;
"Run Doctor": string;
"S3/MinIO/R2 Object Storage": string;
"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": string;
"Saving will be performed forcefully after this number of seconds.": string;
"Scan a QR Code (Recommended for mobile)": string;
"Scan changes on customization sync": string;
"Scan customization automatically": string;
"Scan customization before replicating.": string;
"Scan customization every 1 minute.": string;
"Scan customization periodically": string;
"Scan for Broken files": string;
"Scan for hidden files before replication": string;
"Scan hidden files periodically": string;
"Scan the QR code displayed on an active device using this device's camera.": string;
"Schedule and Restart": string;
"Scram Switches": string;
"Scram!": string;
"Seconds, 0 to disable": string;
"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": string;
"Secret Key": string;
"Select the database adapter to use.": string;
Send: string;
"Send chunks": string;
"Server URI": string;
"Setting.GenerateKeyPair.Desc": string;
"Setting.GenerateKeyPair.Title": string;
"Setting.TroubleShooting": string;
"Setting.TroubleShooting.Doctor": string;
"Setting.TroubleShooting.Doctor.Desc": string;
"Setting.TroubleShooting.ScanBrokenFiles": string;
"Setting.TroubleShooting.ScanBrokenFiles.Desc": string;
"SettingTab.Message.AskRebuild": string;
"Setup URI dialog cancelled.": string;
"Setup.Apply.Buttons.ApplyAndFetch": string;
"Setup.Apply.Buttons.ApplyAndMerge": string;
"Setup.Apply.Buttons.ApplyAndRebuild": string;
"Setup.Apply.Buttons.Cancel": string;
"Setup.Apply.Buttons.OnlyApply": string;
"Setup.Apply.Message": string;
"Setup.Apply.Title": string;
"Setup.Apply.WarningRebuildRecommended": string;
"Setup.Doctor.Buttons.No": string;
"Setup.Doctor.Buttons.Yes": string;
"Setup.Doctor.Message": string;
"Setup.Doctor.Title": string;
"Setup.FetchRemoteConf.Buttons.Fetch": string;
"Setup.FetchRemoteConf.Buttons.Skip": string;
"Setup.FetchRemoteConf.Message": string;
"Setup.FetchRemoteConf.Title": string;
"Setup.QRCode": string;
"Setup.RemoteE2EE.AdvancedTitle": string;
"Setup.RemoteE2EE.AlgorithmWarning": string;
"Setup.RemoteE2EE.ButtonCancel": string;
"Setup.RemoteE2EE.ButtonProceed": string;
"Setup.RemoteE2EE.DefaultAlgorithmDesc": string;
"Setup.RemoteE2EE.Guidance": string;
"Setup.RemoteE2EE.LabelEncrypt": string;
"Setup.RemoteE2EE.LabelEncryptionAlgorithm": string;
"Setup.RemoteE2EE.LabelObfuscateProperties": string;
"Setup.RemoteE2EE.MultiDestinationWarning": string;
"Setup.RemoteE2EE.ObfuscatePropertiesDesc": string;
"Setup.RemoteE2EE.PassphraseValidationLine1": string;
"Setup.RemoteE2EE.PassphraseValidationLine2": string;
"Setup.RemoteE2EE.PlaceholderPassphrase": string;
"Setup.RemoteE2EE.StronglyRecommendedLine1": string;
"Setup.RemoteE2EE.StronglyRecommendedLine2": string;
"Setup.RemoteE2EE.StronglyRecommendedTitle": string;
"Setup.RemoteE2EE.Title": string;
"Setup.ScanQRCode.ButtonClose": string;
"Setup.ScanQRCode.Guidance": string;
"Setup.ScanQRCode.Step1": string;
"Setup.ScanQRCode.Step2": string;
"Setup.ScanQRCode.Step3": string;
"Setup.ScanQRCode.Step4": string;
"Setup.ScanQRCode.Title": string;
"Setup.ShowQRCode": string;
"Setup.ShowQRCode.Desc": string;
"Setup.UseSetupURI.ButtonCancel": string;
"Setup.UseSetupURI.ButtonProceed": string;
"Setup.UseSetupURI.ErrorFailedToParse": string;
"Setup.UseSetupURI.ErrorPassphraseRequired": string;
"Setup.UseSetupURI.GuidanceLine1": string;
"Setup.UseSetupURI.GuidanceLine2": string;
"Setup.UseSetupURI.InvalidInfo": string;
"Setup.UseSetupURI.LabelPassphrase": string;
"Setup.UseSetupURI.LabelSetupURI": string;
"Setup.UseSetupURI.PlaceholderPassphrase": string;
"Setup.UseSetupURI.Title": string;
"Setup.UseSetupURI.ValidInfo": string;
"Should we keep folders that don't have any files inside?": string;
"Should we only check for conflicts when a file is opened?": string;
"Should we prompt you about conflicting files when a file is opened?": string;
"Should we prompt you for every single merge, even if we can safely merge automatcially?": string;
"Show full banner": string;
"Show only notifications": string;
"Show status as icons only": string;
"Show status icon instead of file warnings banner": string;
"Show status inside the editor": string;
"Show status on the status bar": string;
"Show verbose log. Please enable if you report an issue.": string;
"Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.": string;
"Starts synchronisation when a file is saved.": string;
"Stop reflecting database changes to storage files.": string;
"Stop watching for file changes.": string;
"Suppress notification of hidden files change": string;
"Suspend database reflecting": string;
"Suspend file watching": string;
"Switch to IDB": string;
"Switch to IndexedDB": string;
"Sync after merging file": string;
"Sync automatically after merging files": string;
"Sync Mode": string;
"Sync on Editor Save": string;
"Sync on File Open": string;
"Sync on Save": string;
"Sync on Startup": string;
"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": string;
"Synchronising files": string;
Syncing: string;
"Target patterns": string;
"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.": string;
"The delay for consecutive on-demand fetches": string;
"The following accepted nodes are missing its node information:\n- ${missingNodes}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.": string;
"The Hash algorithm for chunk IDs": string;
"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.": string;
"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.": string;
"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.": string;
"The minimum interval for automatic synchronisation on event.": string;
"This feature enables direct synchronisation between devices. No server is required, but both devices must be online at the same time for synchronisation to occur, and some features may be limited. Internet connection is only required to signalling (detecting peers) and not for data transfer.": string;
"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": string;
"This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": string;
"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": string;
"This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": string;
"Transfer Tweak": string;
"TweakMismatchResolve.Action.Dismiss": string;
"TweakMismatchResolve.Action.UseConfigured": string;
"TweakMismatchResolve.Action.UseMine": string;
"TweakMismatchResolve.Action.UseMineAcceptIncompatible": string;
"TweakMismatchResolve.Action.UseMineWithRebuild": string;
"TweakMismatchResolve.Action.UseRemote": string;
"TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": string;
"TweakMismatchResolve.Action.UseRemoteWithRebuild": string;
"TweakMismatchResolve.Message.Main": string;
"TweakMismatchResolve.Message.MainTweakResolving": string;
"TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": string;
"TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": string;
"TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": string;
"TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": string;
"TweakMismatchResolve.Table": string;
"TweakMismatchResolve.Table.Row": string;
"TweakMismatchResolve.Title": string;
"TweakMismatchResolve.Title.TweakResolving": string;
"TweakMismatchResolve.Title.UseRemoteConfig": string;
"Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": string;
"Use a custom passphrase": string;
"Use a Setup URI (Recommended)": string;
"Use Custom HTTP Handler": string;
"Use dynamic iteration count": string;
"Use Segmented-splitter": string;
"Use splitting-limit-capped chunk splitter": string;
"Use the trash bin": string;
"Use timeouts instead of heartbeats": string;
username: string;
Username: string;
"Verbose Log": string;
"Verify all": string;
"Verify and repair all files": string;
"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.": string;
"We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.": string;
"We will now guide you through a few questions to simplify the synchronisation setup.": string;
"We will now proceed with the server configuration.": string;
"Welcome to Self-hosted LiveSync": string;
"When you save a file in the editor, start a sync automatically": string;
"Write credentials in the file": string;
"Write logs into the file": string;
"xxhash32 (Fast but less collision resistance)": string;
"xxhash64 (Fastest)": string;
"Yes, I want to add this device to my existing synchronisation": string;
"Yes, I want to set up a new synchronisation": string;
"You are adding this device to an existing synchronisation setup.": string;
};
};
+800
View File
@@ -0,0 +1,800 @@
export declare const PartialMessages: {
readonly ko: {
"(Active)": string;
"(BETA) Always overwrite with a newer file": string;
"(Beta) Use ignore files": string;
"(Days passed, 0 to disable automatic-deletion)": string;
"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.": string;
"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.": string;
"(Mega chars)": string;
"(Not recommended) If set, credentials will be stored in the file.": string;
"(Obsolete) Use an old adapter for compatibility": string;
"(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.": string;
"(RegExp) If this is set, any changes to local and remote files that match this will be skipped.": string;
"(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"> [!INFO]- The connected devices have been detected as follows:\n${devices}": string;
"A Setup URI is a single string of text containing your server address and authentication details. Using a URI, if one was generated by your server installation script, provides a simple and secure configuration.": string;
"Access Key": string;
Activate: string;
"Add default patterns": string;
"Add new connection": string;
"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": string;
"Always prompt merge conflicts": string;
"Analyse database usage": string;
"Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.": string;
"Apply Latest Change if Conflicting": string;
"Apply preset configuration": string;
"Ask a passphrase at every launch": string;
"Automatically Sync all files when opening Obsidian.": string;
Back: string;
"Back to non-configured": string;
"Batch database update": string;
"Batch limit": string;
"Batch size": string;
"Batch size of on-demand fetching": string;
"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.": string;
"Bucket Name": string;
Cancel: string;
"Cancel Garbage Collection": string;
"Check and convert non-path-obfuscated files": string;
"Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": string;
"cmdConfigSync.showCustomizationSync": string;
"Comma separated `.gitignore, .dockerignore`": string;
"Compaction in progress on remote database...": string;
"Compaction on remote database completed successfully.": string;
"Compaction on remote database failed.": string;
"Compaction on remote database timed out.": string;
"Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.": string;
"Compatibility (Conflict Behaviour)": string;
"Compatibility (Database structure)": string;
"Compatibility (Internal API Usage)": string;
"Compatibility (Metadata)": string;
"Compatibility (Remote Database)": string;
"Compatibility (Trouble addressed)": string;
"Compute revisions for chunks": string;
"Configuration Encryption": string;
Configure: string;
"Configure And Change Remote": string;
"Configure E2EE": string;
"Configure Remote": string;
"Configure the same server information as your other devices again, manually, very advanced users only.": string;
"Connection Method": string;
"Continue to CouchDB setup": string;
"Continue to Peer-to-Peer only setup": string;
"Continue to S3/MinIO/R2 setup": string;
Copy: string;
"Copy Report to clipboard": string;
"CouchDB Connection Tweak": string;
"Cross-platform": string;
"Current adapter: {adapter}": string;
"Customization Sync": string;
"Customization Sync (Beta3)": string;
"Data Compression": string;
"Database Adapter": string;
"Database Name": string;
"Database suffix": string;
Default: string;
"Delay conflict resolution of inactive files": string;
"Delay merge conflict prompt for inactive files.": string;
Delete: string;
"Delete all customization sync data": string;
"Delete all data on the remote server.": string;
"Delete local database to reset or uninstall Self-hosted LiveSync": string;
"Delete old metadata of deleted files on start-up": string;
"Delete Remote Configuration": string;
"Delete remote configuration '{name}'?": string;
desktop: string;
Developer: string;
Device: string;
"Device name": string;
"Device Setup Method": string;
"dialog.yourLanguageAvailable": string;
"dialog.yourLanguageAvailable.btnRevertToDefault": string;
"dialog.yourLanguageAvailable.Title": string;
"Disables all synchronization and restart.": string;
"Disables logging, only shows notifications. Please disable if you report an issue.": string;
"Display Language": string;
"Display name": string;
"Do not check configuration mismatch before replication": string;
"Do not keep metadata of deleted files.": string;
"Do not split chunks in the background": string;
"Do not use internal API": string;
"Doctor.Button.DismissThisVersion": string;
"Doctor.Button.Fix": string;
"Doctor.Button.FixButNoRebuild": string;
"Doctor.Button.No": string;
"Doctor.Button.Skip": string;
"Doctor.Button.Yes": string;
"Doctor.Dialogue.Main": string;
"Doctor.Dialogue.MainFix": string;
"Doctor.Dialogue.Title": string;
"Doctor.Dialogue.TitleAlmostDone": string;
"Doctor.Dialogue.TitleFix": string;
"Doctor.Level.Must": string;
"Doctor.Level.Necessary": string;
"Doctor.Level.Optional": string;
"Doctor.Level.Recommended": string;
"Doctor.Message.NoIssues": string;
"Doctor.Message.RebuildLocalRequired": string;
"Doctor.Message.RebuildRequired": string;
"Doctor.Message.SomeSkipped": string;
Duplicate: string;
"Duplicate remote": string;
"E2EE Configuration": string;
"Edge case addressing (Behaviour)": string;
"Edge case addressing (Database)": string;
"Edge case addressing (Processing)": string;
"Emergency restart": string;
"Enable advanced features": string;
"Enable customization sync": string;
"Enable Developers' Debug Tools.": string;
"Enable edge case treatment features": string;
"Enable poweruser features": string;
"Enable this if your Object Storage doesn't support CORS": string;
"Enable this option to automatically apply the most recent change to documents even when it conflicts": string;
"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": string;
"Encrypting sensitive configuration items": string;
"Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": string;
"End-to-End Encryption": string;
"Endpoint URL": string;
"Enhance chunk size": string;
"Enter Server Information": string;
"Enter the server information manually": string;
Export: string;
"Failed to connect to remote for compaction.": string;
"Failed to connect to remote for compaction. ${reason}": string;
"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": string;
"Failed to start replication after Garbage Collection.": string;
Fetch: string;
"Fetch chunks on demand": string;
"Fetch database with previous behaviour": string;
"Fetch remote settings": string;
"File to resolve conflict": string;
Filename: string;
"First, please select the option that best describes your current situation.": string;
"Flag and restart": string;
"Forces the file to be synced when opened.": string;
"Fresh Start Wipe": string;
"Garbage Collection cancelled by user.": string;
"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": string;
"Garbage Collection Confirmation": string;
"Garbage Collection V3 (Beta)": string;
"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": string;
"Garbage Collection: Scanned ${scanned} / ~${docCount}": string;
"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": string;
"Handle files as Case-Sensitive": string;
"Hidden Files": string;
"How to display network errors when the sync server is unreachable.": string;
"How would you like to configure the connection to your server?": string;
"I am adding a device to an existing synchronisation setup": string;
"I am setting this up for the first time": string;
"I know my server details, let me enter them": string;
"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": string;
"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.": string;
"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": string;
"If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": string;
"If enabled, the \u26D4 icon will be shown inside the status instead of the file warnings banner. No details will be shown.": string;
"If enabled, the file under 1kb will be processed in the UI thread.": string;
"If enabled, the notification of hidden files change will be suppressed.": string;
"If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": string;
"If this enabled, All files are handled as case-Sensitive (Previous behaviour).": string;
"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": string;
"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.": string;
"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.": string;
"Ignore and Proceed": string;
"Ignore files": string;
"Ignore patterns": string;
"Import connection": string;
"Incubate Chunks in Document": string;
"Initialise all journal history, On the next sync, every item will be received and sent.": string;
"Interval (sec)": string;
"K.exp": string;
"K.long_p2p_sync": string;
"K.P2P": string;
"K.Peer": string;
"K.ScanCustomization": string;
"K.short_p2p_sync": string;
"K.title_p2p_sync": string;
"Keep empty folder": string;
lang_def: string;
"lang-de": string;
"lang-def": string;
"lang-es": string;
"lang-fr": string;
"lang-ja": string;
"lang-ko": string;
"lang-ru": string;
"lang-zh": string;
"lang-zh-tw": string;
Later: string;
"Limit: {datetime} ({timestamp})": string;
"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": string;
"liveSyncReplicator.beforeLiveSync": string;
"liveSyncReplicator.cantReplicateLowerValue": string;
"liveSyncReplicator.checkingLastSyncPoint": string;
"liveSyncReplicator.couldNotConnectTo": string;
"liveSyncReplicator.couldNotConnectToRemoteDb": string;
"liveSyncReplicator.couldNotConnectToServer": string;
"liveSyncReplicator.couldNotConnectToURI": string;
"liveSyncReplicator.couldNotMarkResolveRemoteDb": string;
"liveSyncReplicator.liveSyncBegin": string;
"liveSyncReplicator.lockRemoteDb": string;
"liveSyncReplicator.markDeviceResolved": string;
"liveSyncReplicator.oneShotSyncBegin": string;
"liveSyncReplicator.remoteDbCorrupted": string;
"liveSyncReplicator.remoteDbCreatedOrConnected": string;
"liveSyncReplicator.remoteDbDestroyed": string;
"liveSyncReplicator.remoteDbDestroyError": string;
"liveSyncReplicator.remoteDbMarkedResolved": string;
"liveSyncReplicator.replicationClosed": string;
"liveSyncReplicator.replicationInProgress": string;
"liveSyncReplicator.retryLowerBatchSize": string;
"liveSyncReplicator.unlockRemoteDb": string;
"liveSyncSetting.errorNoSuchSettingItem": string;
"liveSyncSetting.originalValue": string;
"liveSyncSetting.valueShouldBeInRange": string;
"liveSyncSettings.btnApply": string;
"Local Database Tweak": string;
Lock: string;
"Lock Server": string;
"Lock the remote server to prevent synchronization with other devices.": string;
"logPane.autoScroll": string;
"logPane.logWindowOpened": string;
"logPane.pause": string;
"logPane.title": string;
"logPane.wrap": string;
"Maximum delay for batch database updating": string;
"Maximum file size": string;
"Maximum Incubating Chunk Size": string;
"Maximum Incubating Chunks": string;
"Maximum Incubation Period": string;
"MB (0 to disable).": string;
"Memory cache": string;
"Memory cache size (by total characters)": string;
"Memory cache size (by total items)": string;
Merge: string;
"Minimum delay for batch database updating": string;
"Minimum interval for syncing": string;
"moduleCheckRemoteSize.logCheckingStorageSizes": string;
"moduleCheckRemoteSize.logCurrentStorageSize": string;
"moduleCheckRemoteSize.logExceededWarning": string;
"moduleCheckRemoteSize.logThresholdEnlarged": string;
"moduleCheckRemoteSize.msgConfirmRebuild": string;
"moduleCheckRemoteSize.msgDatabaseGrowing": string;
"moduleCheckRemoteSize.msgSetDBCapacity": string;
"moduleCheckRemoteSize.option2GB": string;
"moduleCheckRemoteSize.option800MB": string;
"moduleCheckRemoteSize.optionAskMeLater": string;
"moduleCheckRemoteSize.optionDismiss": string;
"moduleCheckRemoteSize.optionIncreaseLimit": string;
"moduleCheckRemoteSize.optionNoWarn": string;
"moduleCheckRemoteSize.optionRebuildAll": string;
"moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": string;
"moduleCheckRemoteSize.titleDatabaseSizeNotify": string;
"moduleInputUIObsidian.defaultTitleConfirmation": string;
"moduleInputUIObsidian.defaultTitleSelect": string;
"moduleInputUIObsidian.optionNo": string;
"moduleInputUIObsidian.optionYes": string;
"moduleLiveSyncMain.logAdditionalSafetyScan": string;
"moduleLiveSyncMain.logLoadingPlugin": string;
"moduleLiveSyncMain.logPluginInitCancelled": string;
"moduleLiveSyncMain.logPluginVersion": string;
"moduleLiveSyncMain.logReadChangelog": string;
"moduleLiveSyncMain.logSafetyScanCompleted": string;
"moduleLiveSyncMain.logSafetyScanFailed": string;
"moduleLiveSyncMain.logUnloadingPlugin": string;
"moduleLiveSyncMain.logVersionUpdate": string;
"moduleLiveSyncMain.msgScramEnabled": string;
"moduleLiveSyncMain.optionKeepLiveSyncDisabled": string;
"moduleLiveSyncMain.optionResumeAndRestart": string;
"moduleLiveSyncMain.titleScramEnabled": string;
"moduleLocalDatabase.logWaitingForReady": string;
"moduleLog.showLog": string;
"moduleMigration.docUri": string;
"moduleMigration.logBulkSendCorrupted": string;
"moduleMigration.logFetchRemoteTweakFailed": string;
"moduleMigration.logLocalDatabaseNotReady": string;
"moduleMigration.logMigratedSameBehaviour": string;
"moduleMigration.logMigrationFailed": string;
"moduleMigration.logRedflag2CreationFail": string;
"moduleMigration.logRemoteTweakUnavailable": string;
"moduleMigration.logSetupCancelled": string;
"moduleMigration.msgFetchRemoteAgain": string;
"moduleMigration.msgInitialSetup": string;
"moduleMigration.msgRecommendSetupUri": string;
"moduleMigration.msgSinceV02321": string;
"moduleMigration.optionAdjustRemote": string;
"moduleMigration.optionDecideLater": string;
"moduleMigration.optionEnableBoth": string;
"moduleMigration.optionEnableFilenameCaseInsensitive": string;
"moduleMigration.optionEnableFixedRevisionForChunks": string;
"moduleMigration.optionHaveSetupUri": string;
"moduleMigration.optionKeepPreviousBehaviour": string;
"moduleMigration.optionManualSetup": string;
"moduleMigration.optionNoAskAgain": string;
"moduleMigration.optionNoSetupUri": string;
"moduleMigration.optionRemindNextLaunch": string;
"moduleMigration.optionSetupViaP2P": string;
"moduleMigration.optionSetupWizard": string;
"moduleMigration.optionYesFetchAgain": string;
"moduleMigration.titleCaseSensitivity": string;
"moduleMigration.titleRecommendSetupUri": string;
"moduleMigration.titleWelcome": string;
"moduleObsidianMenu.replicate": string;
"More actions": string;
"Move remotely deleted files to the trash, instead of deleting.": string;
"Network warning style": string;
"New Remote": string;
"No connected device information found. Cancelling Garbage Collection.": string;
"No limit configured": string;
"No, please take me back": string;
"Node ID": string;
"Node Information Missing": string;
"Non-Synchronising files": string;
"Normal Files": string;
"Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": string;
"Notify all setting files": string;
"Notify customized": string;
"Notify when other device has newly customized.": string;
"Notify when the estimated remote storage size exceeds on start up": string;
"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.": string;
"Number of changes to sync at a time. Defaults to 50. Minimum is 2.": string;
"Obsidian version": string;
"obsidianLiveSyncSettingTab.btnApply": string;
"obsidianLiveSyncSettingTab.btnCheck": string;
"obsidianLiveSyncSettingTab.btnCopy": string;
"obsidianLiveSyncSettingTab.btnDisable": string;
"obsidianLiveSyncSettingTab.btnDiscard": string;
"obsidianLiveSyncSettingTab.btnEnable": string;
"obsidianLiveSyncSettingTab.btnFix": string;
"obsidianLiveSyncSettingTab.btnGotItAndUpdated": string;
"obsidianLiveSyncSettingTab.btnNext": string;
"obsidianLiveSyncSettingTab.btnStart": string;
"obsidianLiveSyncSettingTab.btnTest": string;
"obsidianLiveSyncSettingTab.btnUse": string;
"obsidianLiveSyncSettingTab.buttonFetch": string;
"obsidianLiveSyncSettingTab.buttonNext": string;
"obsidianLiveSyncSettingTab.defaultLanguage": string;
"obsidianLiveSyncSettingTab.descConnectSetupURI": string;
"obsidianLiveSyncSettingTab.descCopySetupURI": string;
"obsidianLiveSyncSettingTab.descEnableLiveSync": string;
"obsidianLiveSyncSettingTab.descFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.descManualSetup": string;
"obsidianLiveSyncSettingTab.descTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.descValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.errAccessForbidden": string;
"obsidianLiveSyncSettingTab.errCannotContinueTest": string;
"obsidianLiveSyncSettingTab.errCorsCredentials": string;
"obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": string;
"obsidianLiveSyncSettingTab.errCorsOrigins": string;
"obsidianLiveSyncSettingTab.errEnableCors": string;
"obsidianLiveSyncSettingTab.errMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.errMaxRequestSize": string;
"obsidianLiveSyncSettingTab.errMissingWwwAuth": string;
"obsidianLiveSyncSettingTab.errRequireValidUser": string;
"obsidianLiveSyncSettingTab.errRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.labelDisabled": string;
"obsidianLiveSyncSettingTab.labelEnabled": string;
"obsidianLiveSyncSettingTab.levelAdvanced": string;
"obsidianLiveSyncSettingTab.levelEdgeCase": string;
"obsidianLiveSyncSettingTab.levelPowerUser": string;
"obsidianLiveSyncSettingTab.linkOpenInBrowser": string;
"obsidianLiveSyncSettingTab.linkPageTop": string;
"obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": string;
"obsidianLiveSyncSettingTab.linkTroubleshooting": string;
"obsidianLiveSyncSettingTab.logCannotUseCloudant": string;
"obsidianLiveSyncSettingTab.logCheckingConfigDone": string;
"obsidianLiveSyncSettingTab.logCheckingConfigFailed": string;
"obsidianLiveSyncSettingTab.logCheckingDbConfig": string;
"obsidianLiveSyncSettingTab.logCheckPassphraseFailed": string;
"obsidianLiveSyncSettingTab.logConfiguredDisabled": string;
"obsidianLiveSyncSettingTab.logConfiguredLiveSync": string;
"obsidianLiveSyncSettingTab.logConfiguredPeriodic": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigFail": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigSet": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": string;
"obsidianLiveSyncSettingTab.logDatabaseConnected": string;
"obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": string;
"obsidianLiveSyncSettingTab.logEncryptionNoSupport": string;
"obsidianLiveSyncSettingTab.logErrorOccurred": string;
"obsidianLiveSyncSettingTab.logEstimatedSize": string;
"obsidianLiveSyncSettingTab.logPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.logPassphraseNotCompatible": string;
"obsidianLiveSyncSettingTab.logRebuildNote": string;
"obsidianLiveSyncSettingTab.logSelectAnyPreset": string;
"obsidianLiveSyncSettingTab.msgAreYouSureProceed": string;
"obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": string;
"obsidianLiveSyncSettingTab.msgConfigCheck": string;
"obsidianLiveSyncSettingTab.msgConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.msgConnectionCheck": string;
"obsidianLiveSyncSettingTab.msgConnectionProxyNote": string;
"obsidianLiveSyncSettingTab.msgCurrentOrigin": string;
"obsidianLiveSyncSettingTab.msgDiscardConfirmation": string;
"obsidianLiveSyncSettingTab.msgDone": string;
"obsidianLiveSyncSettingTab.msgEnableCors": string;
"obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": string;
"obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.msgGenerateSetupURI": string;
"obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": string;
"obsidianLiveSyncSettingTab.msgInvalidPassphrase": string;
"obsidianLiveSyncSettingTab.msgNewVersionNote": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSInfo": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSWarning": string;
"obsidianLiveSyncSettingTab.msgNotice": string;
"obsidianLiveSyncSettingTab.msgObjectStorageWarning": string;
"obsidianLiveSyncSettingTab.msgOriginCheck": string;
"obsidianLiveSyncSettingTab.msgRebuildRequired": string;
"obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": string;
"obsidianLiveSyncSettingTab.msgSetCorsCredentials": string;
"obsidianLiveSyncSettingTab.msgSetCorsOrigins": string;
"obsidianLiveSyncSettingTab.msgSetMaxDocSize": string;
"obsidianLiveSyncSettingTab.msgSetMaxRequestSize": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUser": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.msgSettingModified": string;
"obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": string;
"obsidianLiveSyncSettingTab.msgSetWwwAuth": string;
"obsidianLiveSyncSettingTab.nameApplySettings": string;
"obsidianLiveSyncSettingTab.nameConnectSetupURI": string;
"obsidianLiveSyncSettingTab.nameCopySetupURI": string;
"obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameDiscardSettings": string;
"obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameEnableLiveSync": string;
"obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": string;
"obsidianLiveSyncSettingTab.nameManualSetup": string;
"obsidianLiveSyncSettingTab.nameTestConnection": string;
"obsidianLiveSyncSettingTab.nameTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.okAdminPrivileges": string;
"obsidianLiveSyncSettingTab.okCorsCredentials": string;
"obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": string;
"obsidianLiveSyncSettingTab.okCorsOriginMatched": string;
"obsidianLiveSyncSettingTab.okCorsOrigins": string;
"obsidianLiveSyncSettingTab.okEnableCors": string;
"obsidianLiveSyncSettingTab.okMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.okMaxRequestSize": string;
"obsidianLiveSyncSettingTab.okRequireValidUser": string;
"obsidianLiveSyncSettingTab.okRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.okWwwAuth": string;
"obsidianLiveSyncSettingTab.optionApply": string;
"obsidianLiveSyncSettingTab.optionCancel": string;
"obsidianLiveSyncSettingTab.optionCouchDB": string;
"obsidianLiveSyncSettingTab.optionDisableAllAutomatic": string;
"obsidianLiveSyncSettingTab.optionFetchFromRemote": string;
"obsidianLiveSyncSettingTab.optionHere": string;
"obsidianLiveSyncSettingTab.optionLiveSync": string;
"obsidianLiveSyncSettingTab.optionMinioS3R2": string;
"obsidianLiveSyncSettingTab.optionOkReadEverything": string;
"obsidianLiveSyncSettingTab.optionOnEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicAndEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicWithBatch": string;
"obsidianLiveSyncSettingTab.optionRebuildBoth": string;
"obsidianLiveSyncSettingTab.optionSaveOnlySettings": string;
"obsidianLiveSyncSettingTab.panelChangeLog": string;
"obsidianLiveSyncSettingTab.panelGeneralSettings": string;
"obsidianLiveSyncSettingTab.panelPrivacyEncryption": string;
"obsidianLiveSyncSettingTab.panelRemoteConfiguration": string;
"obsidianLiveSyncSettingTab.panelSetup": string;
"obsidianLiveSyncSettingTab.titleAppearance": string;
"obsidianLiveSyncSettingTab.titleConflictResolution": string;
"obsidianLiveSyncSettingTab.titleCongratulations": string;
"obsidianLiveSyncSettingTab.titleCouchDB": string;
"obsidianLiveSyncSettingTab.titleDeletionPropagation": string;
"obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": string;
"obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.titleExtraFeatures": string;
"obsidianLiveSyncSettingTab.titleFetchConfig": string;
"obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.titleFetchSettings": string;
"obsidianLiveSyncSettingTab.titleHiddenFiles": string;
"obsidianLiveSyncSettingTab.titleLogging": string;
"obsidianLiveSyncSettingTab.titleMinioS3R2": string;
"obsidianLiveSyncSettingTab.titleNotification": string;
"obsidianLiveSyncSettingTab.titleOnlineTips": string;
"obsidianLiveSyncSettingTab.titleQuickSetup": string;
"obsidianLiveSyncSettingTab.titleRebuildRequired": string;
"obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.titleRemoteServer": string;
"obsidianLiveSyncSettingTab.titleReset": string;
"obsidianLiveSyncSettingTab.titleSetupOtherDevices": string;
"obsidianLiveSyncSettingTab.titleSynchronizationMethod": string;
"obsidianLiveSyncSettingTab.titleSynchronizationPreset": string;
"obsidianLiveSyncSettingTab.titleSyncSettings": string;
"obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": string;
"obsidianLiveSyncSettingTab.titleUpdateThinning": string;
"obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": string;
"obsidianLiveSyncSettingTab.warnNoAdmin": string;
Ok: string;
"Old Algorithm": string;
"Older fallback (Slow, W/O WebAssembly)": string;
Open: string;
"Open the dialog": string;
Overwrite: string;
"Overwrite patterns": string;
"Overwrite remote": string;
"Overwrite remote with local DB and passphrase.": string;
"Overwrite Server Data with This Device's Files": string;
"P2P.AskPassphraseForDecrypt": string;
"P2P.AskPassphraseForShare": string;
"P2P.DisabledButNeed": string;
"P2P.FailedToOpen": string;
"P2P.NoAutoSyncPeers": string;
"P2P.NoKnownPeers": string;
"P2P.Note.description": string;
"P2P.Note.important_note": string;
"P2P.Note.important_note_sub": string;
"P2P.Note.Summary": string;
"P2P.NotEnabled": string;
"P2P.P2PReplication": string;
"P2P.PaneTitle": string;
"P2P.ReplicatorInstanceMissing": string;
"P2P.SeemsOffline": string;
"P2P.SyncAlreadyRunning": string;
"P2P.SyncCompleted": string;
"P2P.SyncStartedWith": string;
"paneMaintenance.markDeviceResolvedAfterBackup": string;
"paneMaintenance.remoteLockedAndDeviceNotAccepted": string;
"paneMaintenance.remoteLockedResolvedDevice": string;
"paneMaintenance.unlockDatabaseReady": string;
Passphrase: string;
"Passphrase of sensitive configuration items": string;
password: string;
Password: string;
"Paste a connection string": string;
"Paste the Setup URI generated from one of your active devices.": string;
"Path Obfuscation": string;
"Patterns to match files for overwriting instead of merging": string;
"Patterns to match files for syncing": string;
"Peer-to-Peer only": string;
"Peer-to-Peer Synchronisation": string;
"Per-file-saved customization sync": string;
Perform: string;
"Perform cleanup": string;
"Perform Garbage Collection": string;
"Perform Garbage Collection to remove unused chunks and reduce database size.": string;
"Periodic Sync interval": string;
"Pick a file to resolve conflict": string;
"Please disable 'Read chunks online' in settings to use Garbage Collection.": string;
"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": string;
"Please select 'Cancel' explicitly to cancel this operation.": string;
"Please select a method to import the settings from another device.": string;
"Please select an option to proceed": string;
"Please select the type of server to which you are connecting.": string;
"Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.": string;
"Please set this device name": string;
"Plug-in version": string;
"Prepare the 'report' to create an issue": string;
Presets: string;
"Proceed Garbage Collection": string;
"Proceed with Setup URI": string;
"Proceeding with Garbage Collection, ignoring missing nodes.": string;
"Proceeding with Garbage Collection.": string;
"Process small files in the foreground": string;
Progress: string;
"PureJS fallback (Fast, W/O WebAssembly)": string;
"Purge all download/upload cache.": string;
"Purge all journal counter": string;
"Rebuild local and remote database with local files.": string;
"Rebuilding Operations (Remote Only)": string;
"Recreate all": string;
"Recreate missing chunks for all files": string;
"RedFlag.Fetch.Method.Desc": string;
"RedFlag.Fetch.Method.FetchSafer": string;
"RedFlag.Fetch.Method.FetchSmoother": string;
"RedFlag.Fetch.Method.FetchTraditional": string;
"RedFlag.Fetch.Method.Title": string;
"Reduces storage space by discarding all non-latest revisions. This requires the same amount of free space on the remote server and the local client.": string;
"Reducing the frequency with which on-disk changes are reflected into the DB": string;
Region: string;
Remediation: string;
"Remediation Setting Changed": string;
"Remote Database Tweak (In sunset)": string;
"Remote Databases": string;
"Remote name": string;
"Remote server type": string;
"Remote Type": string;
Rename: string;
"Replicator.Dialogue.Locked.Action.Dismiss": string;
"Replicator.Dialogue.Locked.Action.Fetch": string;
"Replicator.Dialogue.Locked.Action.Unlock": string;
"Replicator.Dialogue.Locked.Message": string;
"Replicator.Dialogue.Locked.Message.Fetch": string;
"Replicator.Dialogue.Locked.Message.Unlocked": string;
"Replicator.Dialogue.Locked.Title": string;
"Replicator.Message.Cleaned": string;
"Replicator.Message.InitialiseFatalError": string;
"Replicator.Message.Pending": string;
"Replicator.Message.SomeModuleFailed": string;
"Replicator.Message.VersionUpFlash": string;
"Requires restart of Obsidian": string;
"Requires restart of Obsidian.": string;
"Rerun Onboarding Wizard": string;
"Rerun the onboarding wizard to set up Self-hosted LiveSync again.": string;
"Rerun Wizard": string;
Resend: string;
"Resend all chunks to the remote.": string;
Reset: string;
"Reset all": string;
"Reset all journal counter": string;
"Reset journal received history": string;
"Reset journal sent history": string;
"Reset notification threshold and check the remote database usage": string;
"Reset received": string;
"Reset sent history": string;
"Reset Synchronisation information": string;
"Reset Synchronisation on This Device": string;
"Reset the remote storage size threshold and check the remote storage size again.": string;
"Resolve All": string;
"Resolve all conflicted files": string;
"Resolve All conflicted files by the newer one": string;
"Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.": string;
"Restart Now": string;
"Restore or reconstruct local database from remote.": string;
"Run Doctor": string;
"S3/MinIO/R2 Object Storage": string;
"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": string;
"Saving will be performed forcefully after this number of seconds.": string;
"Scan a QR Code (Recommended for mobile)": string;
"Scan changes on customization sync": string;
"Scan customization automatically": string;
"Scan customization before replicating.": string;
"Scan customization every 1 minute.": string;
"Scan customization periodically": string;
"Scan for Broken files": string;
"Scan for hidden files before replication": string;
"Scan hidden files periodically": string;
"Scan the QR code displayed on an active device using this device's camera.": string;
"Schedule and Restart": string;
"Scram Switches": string;
"Scram!": string;
"Seconds, 0 to disable": string;
"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": string;
"Secret Key": string;
"Select the database adapter to use.": string;
Send: string;
"Send chunks": string;
"Server URI": string;
"Setting.GenerateKeyPair.Desc": string;
"Setting.GenerateKeyPair.Title": string;
"Setting.TroubleShooting": string;
"Setting.TroubleShooting.Doctor": string;
"Setting.TroubleShooting.Doctor.Desc": string;
"Setting.TroubleShooting.ScanBrokenFiles": string;
"Setting.TroubleShooting.ScanBrokenFiles.Desc": string;
"SettingTab.Message.AskRebuild": string;
"Setup URI dialog cancelled.": string;
"Setup.QRCode": string;
"Setup.RemoteE2EE.AdvancedTitle": string;
"Setup.RemoteE2EE.AlgorithmWarning": string;
"Setup.RemoteE2EE.ButtonCancel": string;
"Setup.RemoteE2EE.ButtonProceed": string;
"Setup.RemoteE2EE.DefaultAlgorithmDesc": string;
"Setup.RemoteE2EE.Guidance": string;
"Setup.RemoteE2EE.LabelEncrypt": string;
"Setup.RemoteE2EE.LabelEncryptionAlgorithm": string;
"Setup.RemoteE2EE.LabelObfuscateProperties": string;
"Setup.RemoteE2EE.MultiDestinationWarning": string;
"Setup.RemoteE2EE.ObfuscatePropertiesDesc": string;
"Setup.RemoteE2EE.PassphraseValidationLine1": string;
"Setup.RemoteE2EE.PassphraseValidationLine2": string;
"Setup.RemoteE2EE.PlaceholderPassphrase": string;
"Setup.RemoteE2EE.StronglyRecommendedLine1": string;
"Setup.RemoteE2EE.StronglyRecommendedLine2": string;
"Setup.RemoteE2EE.StronglyRecommendedTitle": string;
"Setup.RemoteE2EE.Title": string;
"Setup.ScanQRCode.ButtonClose": string;
"Setup.ScanQRCode.Guidance": string;
"Setup.ScanQRCode.Step1": string;
"Setup.ScanQRCode.Step2": string;
"Setup.ScanQRCode.Step3": string;
"Setup.ScanQRCode.Step4": string;
"Setup.ScanQRCode.Title": string;
"Setup.ShowQRCode": string;
"Setup.ShowQRCode.Desc": string;
"Setup.UseSetupURI.ButtonCancel": string;
"Setup.UseSetupURI.ButtonProceed": string;
"Setup.UseSetupURI.ErrorFailedToParse": string;
"Setup.UseSetupURI.ErrorPassphraseRequired": string;
"Setup.UseSetupURI.GuidanceLine1": string;
"Setup.UseSetupURI.GuidanceLine2": string;
"Setup.UseSetupURI.InvalidInfo": string;
"Setup.UseSetupURI.LabelPassphrase": string;
"Setup.UseSetupURI.LabelSetupURI": string;
"Setup.UseSetupURI.PlaceholderPassphrase": string;
"Setup.UseSetupURI.Title": string;
"Setup.UseSetupURI.ValidInfo": string;
"Should we keep folders that don't have any files inside?": string;
"Should we only check for conflicts when a file is opened?": string;
"Should we prompt you about conflicting files when a file is opened?": string;
"Should we prompt you for every single merge, even if we can safely merge automatcially?": string;
"Show full banner": string;
"Show only notifications": string;
"Show status as icons only": string;
"Show status icon instead of file warnings banner": string;
"Show status inside the editor": string;
"Show status on the status bar": string;
"Show verbose log. Please enable if you report an issue.": string;
"Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.": string;
"Starts synchronisation when a file is saved.": string;
"Stop reflecting database changes to storage files.": string;
"Stop watching for file changes.": string;
"Suppress notification of hidden files change": string;
"Suspend database reflecting": string;
"Suspend file watching": string;
"Switch to IDB": string;
"Switch to IndexedDB": string;
"Sync after merging file": string;
"Sync automatically after merging files": string;
"Sync Mode": string;
"Sync on Editor Save": string;
"Sync on File Open": string;
"Sync on Save": string;
"Sync on Startup": string;
"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": string;
"Synchronising files": string;
Syncing: string;
"Target patterns": string;
"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.": string;
"The delay for consecutive on-demand fetches": string;
"The following accepted nodes are missing its node information:\n- ${missingNodes}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.": string;
"The Hash algorithm for chunk IDs": string;
"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.": string;
"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.": string;
"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.": string;
"The minimum interval for automatic synchronisation on event.": string;
"This feature enables direct synchronisation between devices. No server is required, but both devices must be online at the same time for synchronisation to occur, and some features may be limited. Internet connection is only required to signalling (detecting peers) and not for data transfer.": string;
"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": string;
"This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": string;
"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": string;
"This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": string;
"Transfer Tweak": string;
"TweakMismatchResolve.Action.Dismiss": string;
"TweakMismatchResolve.Action.UseConfigured": string;
"TweakMismatchResolve.Action.UseMine": string;
"TweakMismatchResolve.Action.UseMineAcceptIncompatible": string;
"TweakMismatchResolve.Action.UseMineWithRebuild": string;
"TweakMismatchResolve.Action.UseRemote": string;
"TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": string;
"TweakMismatchResolve.Action.UseRemoteWithRebuild": string;
"TweakMismatchResolve.Message.Main": string;
"TweakMismatchResolve.Message.MainTweakResolving": string;
"TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": string;
"TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": string;
"TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": string;
"TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": string;
"TweakMismatchResolve.Table": string;
"TweakMismatchResolve.Table.Row": string;
"TweakMismatchResolve.Title": string;
"TweakMismatchResolve.Title.TweakResolving": string;
"TweakMismatchResolve.Title.UseRemoteConfig": string;
"Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": string;
"Use a custom passphrase": string;
"Use a Setup URI (Recommended)": string;
"Use Custom HTTP Handler": string;
"Use dynamic iteration count": string;
"Use Segmented-splitter": string;
"Use splitting-limit-capped chunk splitter": string;
"Use the trash bin": string;
"Use timeouts instead of heartbeats": string;
username: string;
Username: string;
"Verbose Log": string;
"Verify all": string;
"Verify and repair all files": string;
"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.": string;
"We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.": string;
"We will now guide you through a few questions to simplify the synchronisation setup.": string;
"We will now proceed with the server configuration.": string;
"Welcome to Self-hosted LiveSync": string;
"When you save a file in the editor, start a sync automatically": string;
"Write credentials in the file": string;
"Write logs into the file": string;
"xxhash32 (Fast but less collision resistance)": string;
"xxhash64 (Fastest)": string;
"Yes, I want to add this device to my existing synchronisation": string;
"Yes, I want to set up a new synchronisation": string;
"You are adding this device to an existing synchronisation setup.": string;
};
};
+858
View File
@@ -0,0 +1,858 @@
export declare const PartialMessages: {
readonly ru: {
"(Active)": string;
"(BETA) Always overwrite with a newer file": string;
"(Beta) Use ignore files": string;
"(Days passed, 0 to disable automatic-deletion)": string;
"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.": string;
"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.": string;
"(Mega chars)": string;
"(Not recommended) If set, credentials will be stored in the file": string;
"(Not recommended) If set, credentials will be stored in the file.": string;
"(Obsolete) Use an old adapter for compatibility": string;
"(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.": string;
"(RegExp) If this is set, any changes to local and remote files that match this will be skipped.": string;
"(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"> [!INFO]- The connected devices have been detected as follows:\n${devices}": string;
"A Setup URI is a single string of text containing your server address and authentication details. Using a URI, if one was generated by your server installation script, provides a simple and secure configuration.": string;
"Access Key": string;
Activate: string;
"Active Remote Configuration": string;
"Add default patterns": string;
"Add new connection": string;
"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": string;
"Always prompt merge conflicts": string;
Analyse: string;
"Analyse database usage": string;
"Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.": string;
"Apply Latest Change if Conflicting": string;
"Apply preset configuration": string;
"Ask a passphrase at every launch": string;
"Automatically Sync all files when opening Obsidian.": string;
Back: string;
"Back to non-configured": string;
"Batch database update": string;
"Batch limit": string;
"Batch size": string;
"Batch size of on-demand fetching": string;
"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding.": string;
"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.": string;
"Bucket Name": string;
Cancel: string;
"Cancel Garbage Collection": string;
Check: string;
"Check and convert non-path-obfuscated files": string;
"Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": string;
"cmdConfigSync.showCustomizationSync": string;
"Comma separated `.gitignore, .dockerignore`": string;
"Compaction in progress on remote database...": string;
"Compaction on remote database completed successfully.": string;
"Compaction on remote database failed.": string;
"Compaction on remote database timed out.": string;
"Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.": string;
"Compatibility (Conflict Behaviour)": string;
"Compatibility (Database structure)": string;
"Compatibility (Internal API Usage)": string;
"Compatibility (Metadata)": string;
"Compatibility (Remote Database)": string;
"Compatibility (Trouble addressed)": string;
"Compute revisions for chunks": string;
"Configuration Encryption": string;
Configure: string;
"Configure And Change Remote": string;
"Configure E2EE": string;
"Configure Remote": string;
"Configure the same server information as your other devices again, manually, very advanced users only.": string;
"Connection Method": string;
"Continue to CouchDB setup": string;
"Continue to Peer-to-Peer only setup": string;
"Continue to S3/MinIO/R2 setup": string;
Copy: string;
"Copy Report to clipboard": string;
"CouchDB Connection Tweak": string;
"Cross-platform": string;
"Current adapter: {adapter}": string;
"Customization Sync": string;
"Customization Sync (Beta3)": string;
"Data Compression": string;
"Database Adapter": string;
"Database Name": string;
"Database suffix": string;
Default: string;
"Delay conflict resolution of inactive files": string;
"Delay merge conflict prompt for inactive files.": string;
Delete: string;
"Delete all customization sync data": string;
"Delete all data on the remote server.": string;
"Delete local database to reset or uninstall Self-hosted LiveSync": string;
"Delete old metadata of deleted files on start-up": string;
"Delete Remote Configuration": string;
"Delete remote configuration '{name}'?": string;
descConnectSetupURI: string;
descCopySetupURI: string;
descEnableLiveSync: string;
descFetchConfigFromRemote: string;
descManualSetup: string;
descTestDatabaseConnection: string;
descValidateDatabaseConfig: string;
desktop: string;
Developer: string;
Device: string;
"Device name": string;
"Device Setup Method": string;
"dialog.yourLanguageAvailable": string;
"dialog.yourLanguageAvailable.btnRevertToDefault": string;
"dialog.yourLanguageAvailable.Title": string;
"Disables all synchronization and restart.": string;
"Disables logging, only shows notifications. Please disable if you report an issue.": string;
"Display Language": string;
"Display name": string;
"Do not check configuration mismatch before replication": string;
"Do not keep metadata of deleted files.": string;
"Do not split chunks in the background": string;
"Do not use internal API": string;
"Doctor.Button.DismissThisVersion": string;
"Doctor.Button.Fix": string;
"Doctor.Button.FixButNoRebuild": string;
"Doctor.Button.No": string;
"Doctor.Button.Skip": string;
"Doctor.Button.Yes": string;
"Doctor.Dialogue.Main": string;
"Doctor.Dialogue.MainFix": string;
"Doctor.Dialogue.Title": string;
"Doctor.Dialogue.TitleAlmostDone": string;
"Doctor.Dialogue.TitleFix": string;
"Doctor.Level.Must": string;
"Doctor.Level.Necessary": string;
"Doctor.Level.Optional": string;
"Doctor.Level.Recommended": string;
"Doctor.Message.NoIssues": string;
"Doctor.Message.RebuildLocalRequired": string;
"Doctor.Message.RebuildRequired": string;
"Doctor.Message.SomeSkipped": string;
"Doctor.RULES.E2EE_V02500.REASON": string;
Duplicate: string;
"Duplicate remote": string;
"E2EE Configuration": string;
"Edge case addressing (Behaviour)": string;
"Edge case addressing (Database)": string;
"Edge case addressing (Processing)": string;
"Emergency restart": string;
"Enable advanced features": string;
"Enable customization sync": string;
"Enable Developers' Debug Tools.": string;
"Enable edge case treatment features": string;
"Enable poweruser features": string;
"Enable this if your Object Storage doesn't support CORS": string;
"Enable this option to automatically apply the most recent change to documents even when it conflicts": string;
"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": string;
"Encrypting sensitive configuration items": string;
"Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": string;
"End-to-End Encryption": string;
"Endpoint URL": string;
"Enhance chunk size": string;
"Enter Server Information": string;
"Enter the server information manually": string;
Export: string;
"Failed to connect to remote for compaction.": string;
"Failed to connect to remote for compaction. ${reason}": string;
"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": string;
"Failed to start replication after Garbage Collection.": string;
Fetch: string;
"Fetch chunks on demand": string;
"Fetch database with previous behaviour": string;
"Fetch remote settings": string;
"File to resolve conflict": string;
Filename: string;
"First, please select the option that best describes your current situation.": string;
"Flag and restart": string;
"Forces the file to be synced when opened.": string;
"Fresh Start Wipe": string;
"Garbage Collection cancelled by user.": string;
"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": string;
"Garbage Collection Confirmation": string;
"Garbage Collection V3 (Beta)": string;
"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": string;
"Garbage Collection: Scanned ${scanned} / ~${docCount}": string;
"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": string;
"Handle files as Case-Sensitive": string;
"Hidden Files": string;
"How to display network errors when the sync server is unreachable.": string;
"How would you like to configure the connection to your server?": string;
"I am adding a device to an existing synchronisation setup": string;
"I am setting this up for the first time": string;
"I know my server details, let me enter them": string;
"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": string;
"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this.": string;
"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.": string;
"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": string;
"If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": string;
"If enabled, the \u26D4 icon will be shown inside the status instead of the file warnings banner. No details will be shown.": string;
"If enabled, the file under 1kb will be processed in the UI thread.": string;
"If enabled, the notification of hidden files change will be suppressed.": string;
"If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": string;
"If this enabled, All files are handled as case-Sensitive (Previous behaviour).": string;
"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": string;
"If this is set, changes to local files which are matched by the ignore files will be skipped.": string;
"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.": string;
"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely.": string;
"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.": string;
"Ignore and Proceed": string;
"Ignore files": string;
"Ignore patterns": string;
"Import connection": string;
"Incubate Chunks in Document": string;
"Initialise all journal history, On the next sync, every item will be received and sent.": string;
"Interval (sec)": string;
"K.exp": string;
"K.long_p2p_sync": string;
"K.P2P": string;
"K.Peer": string;
"K.ScanCustomization": string;
"K.short_p2p_sync": string;
"K.title_p2p_sync": string;
"Keep empty folder": string;
lang_def: string;
"lang-de": string;
"lang-def": string;
"lang-es": string;
"lang-fr": string;
"lang-ja": string;
"lang-ko": string;
"lang-ru": string;
"lang-zh": string;
"lang-zh-tw": string;
Later: string;
"Limit: {datetime} ({timestamp})": string;
"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.": string;
"liveSyncReplicator.beforeLiveSync": string;
"liveSyncReplicator.cantReplicateLowerValue": string;
"liveSyncReplicator.checkingLastSyncPoint": string;
"liveSyncReplicator.couldNotConnectTo": string;
"liveSyncReplicator.couldNotConnectToRemoteDb": string;
"liveSyncReplicator.couldNotConnectToServer": string;
"liveSyncReplicator.couldNotConnectToURI": string;
"liveSyncReplicator.couldNotMarkResolveRemoteDb": string;
"liveSyncReplicator.liveSyncBegin": string;
"liveSyncReplicator.lockRemoteDb": string;
"liveSyncReplicator.markDeviceResolved": string;
"liveSyncReplicator.oneShotSyncBegin": string;
"liveSyncReplicator.remoteDbCorrupted": string;
"liveSyncReplicator.remoteDbCreatedOrConnected": string;
"liveSyncReplicator.remoteDbDestroyed": string;
"liveSyncReplicator.remoteDbDestroyError": string;
"liveSyncReplicator.remoteDbMarkedResolved": string;
"liveSyncReplicator.replicationClosed": string;
"liveSyncReplicator.replicationInProgress": string;
"liveSyncReplicator.retryLowerBatchSize": string;
"liveSyncReplicator.unlockRemoteDb": string;
"liveSyncSetting.errorNoSuchSettingItem": string;
"liveSyncSetting.originalValue": string;
"liveSyncSetting.valueShouldBeInRange": string;
"liveSyncSettings.btnApply": string;
"Local Database Tweak": string;
Lock: string;
"Lock Server": string;
"Lock the remote server to prevent synchronization with other devices.": string;
"logPane.autoScroll": string;
"logPane.logWindowOpened": string;
"logPane.pause": string;
"logPane.title": string;
"logPane.wrap": string;
"Maximum delay for batch database updating": string;
"Maximum file size": string;
"Maximum Incubating Chunk Size": string;
"Maximum Incubating Chunks": string;
"Maximum Incubation Period": string;
"MB (0 to disable).": string;
"Memory cache": string;
"Memory cache size (by total characters)": string;
"Memory cache size (by total items)": string;
Merge: string;
"Minimum delay for batch database updating": string;
"Minimum interval for syncing": string;
"moduleCheckRemoteSize.logCheckingStorageSizes": string;
"moduleCheckRemoteSize.logCurrentStorageSize": string;
"moduleCheckRemoteSize.logExceededWarning": string;
"moduleCheckRemoteSize.logThresholdEnlarged": string;
"moduleCheckRemoteSize.msgConfirmRebuild": string;
"moduleCheckRemoteSize.msgDatabaseGrowing": string;
"moduleCheckRemoteSize.msgSetDBCapacity": string;
"moduleCheckRemoteSize.option2GB": string;
"moduleCheckRemoteSize.option800MB": string;
"moduleCheckRemoteSize.optionAskMeLater": string;
"moduleCheckRemoteSize.optionDismiss": string;
"moduleCheckRemoteSize.optionIncreaseLimit": string;
"moduleCheckRemoteSize.optionNoWarn": string;
"moduleCheckRemoteSize.optionRebuildAll": string;
"moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded": string;
"moduleCheckRemoteSize.titleDatabaseSizeNotify": string;
"moduleInputUIObsidian.defaultTitleConfirmation": string;
"moduleInputUIObsidian.defaultTitleSelect": string;
"moduleInputUIObsidian.optionNo": string;
"moduleInputUIObsidian.optionYes": string;
"moduleLiveSyncMain.logAdditionalSafetyScan": string;
"moduleLiveSyncMain.logLoadingPlugin": string;
"moduleLiveSyncMain.logPluginInitCancelled": string;
"moduleLiveSyncMain.logPluginVersion": string;
"moduleLiveSyncMain.logReadChangelog": string;
"moduleLiveSyncMain.logSafetyScanCompleted": string;
"moduleLiveSyncMain.logSafetyScanFailed": string;
"moduleLiveSyncMain.logUnloadingPlugin": string;
"moduleLiveSyncMain.logVersionUpdate": string;
"moduleLiveSyncMain.msgScramEnabled": string;
"moduleLiveSyncMain.optionKeepLiveSyncDisabled": string;
"moduleLiveSyncMain.optionResumeAndRestart": string;
"moduleLiveSyncMain.titleScramEnabled": string;
"moduleLocalDatabase.logWaitingForReady": string;
"moduleLog.showLog": string;
"moduleMigration.docUri": string;
"moduleMigration.fix0256.buttons.checkItLater": string;
"moduleMigration.fix0256.buttons.DismissForever": string;
"moduleMigration.fix0256.buttons.fix": string;
"moduleMigration.fix0256.message": string;
"moduleMigration.fix0256.messageUnrecoverable": string;
"moduleMigration.fix0256.title": string;
"moduleMigration.insecureChunkExist.buttons.fetch": string;
"moduleMigration.insecureChunkExist.buttons.later": string;
"moduleMigration.insecureChunkExist.buttons.rebuild": string;
"moduleMigration.insecureChunkExist.laterMessage": string;
"moduleMigration.insecureChunkExist.message": string;
"moduleMigration.insecureChunkExist.title": string;
"moduleMigration.logBulkSendCorrupted": string;
"moduleMigration.logFetchRemoteTweakFailed": string;
"moduleMigration.logLocalDatabaseNotReady": string;
"moduleMigration.logMigratedSameBehaviour": string;
"moduleMigration.logMigrationFailed": string;
"moduleMigration.logRedflag2CreationFail": string;
"moduleMigration.logRemoteTweakUnavailable": string;
"moduleMigration.logSetupCancelled": string;
"moduleMigration.msgFetchRemoteAgain": string;
"moduleMigration.msgInitialSetup": string;
"moduleMigration.msgRecommendSetupUri": string;
"moduleMigration.msgSinceV02321": string;
"moduleMigration.optionAdjustRemote": string;
"moduleMigration.optionDecideLater": string;
"moduleMigration.optionEnableBoth": string;
"moduleMigration.optionEnableFilenameCaseInsensitive": string;
"moduleMigration.optionEnableFixedRevisionForChunks": string;
"moduleMigration.optionHaveSetupUri": string;
"moduleMigration.optionKeepPreviousBehaviour": string;
"moduleMigration.optionManualSetup": string;
"moduleMigration.optionNoAskAgain": string;
"moduleMigration.optionNoSetupUri": string;
"moduleMigration.optionRemindNextLaunch": string;
"moduleMigration.optionSetupViaP2P": string;
"moduleMigration.optionSetupWizard": string;
"moduleMigration.optionYesFetchAgain": string;
"moduleMigration.titleCaseSensitivity": string;
"moduleMigration.titleRecommendSetupUri": string;
"moduleMigration.titleWelcome": string;
"moduleObsidianMenu.replicate": string;
"More actions": string;
"Move remotely deleted files to the trash, instead of deleting.": string;
"Network warning style": string;
"New Remote": string;
"No connected device information found. Cancelling Garbage Collection.": string;
"No limit configured": string;
"No, please take me back": string;
"Node ID": string;
"Node Information Missing": string;
"Non-Synchronising files": string;
"Normal Files": string;
"Not all messages have been translated. And, please revert to \"Default\" when reporting errors.": string;
"Notify all setting files": string;
"Notify customized": string;
"Notify when other device has newly customized.": string;
"Notify when the estimated remote storage size exceeds on start up": string;
"Number of batches to process at a time. Defaults to 40. Minimum is 2.": string;
"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.": string;
"Number of changes to sync at a time. Defaults to 50. Minimum is 2.": string;
"Obsidian version": string;
"obsidianLiveSyncSettingTab.btnApply": string;
"obsidianLiveSyncSettingTab.btnCheck": string;
"obsidianLiveSyncSettingTab.btnCopy": string;
"obsidianLiveSyncSettingTab.btnDisable": string;
"obsidianLiveSyncSettingTab.btnDiscard": string;
"obsidianLiveSyncSettingTab.btnEnable": string;
"obsidianLiveSyncSettingTab.btnFix": string;
"obsidianLiveSyncSettingTab.btnGotItAndUpdated": string;
"obsidianLiveSyncSettingTab.btnNext": string;
"obsidianLiveSyncSettingTab.btnStart": string;
"obsidianLiveSyncSettingTab.btnTest": string;
"obsidianLiveSyncSettingTab.btnUse": string;
"obsidianLiveSyncSettingTab.buttonFetch": string;
"obsidianLiveSyncSettingTab.buttonNext": string;
"obsidianLiveSyncSettingTab.defaultLanguage": string;
"obsidianLiveSyncSettingTab.descConnectSetupURI": string;
"obsidianLiveSyncSettingTab.descCopySetupURI": string;
"obsidianLiveSyncSettingTab.descEnableLiveSync": string;
"obsidianLiveSyncSettingTab.descFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.descManualSetup": string;
"obsidianLiveSyncSettingTab.descTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.descValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.errAccessForbidden": string;
"obsidianLiveSyncSettingTab.errCannotContinueTest": string;
"obsidianLiveSyncSettingTab.errCorsCredentials": string;
"obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials": string;
"obsidianLiveSyncSettingTab.errCorsOrigins": string;
"obsidianLiveSyncSettingTab.errEnableCors": string;
"obsidianLiveSyncSettingTab.errEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.errMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.errMaxRequestSize": string;
"obsidianLiveSyncSettingTab.errMissingWwwAuth": string;
"obsidianLiveSyncSettingTab.errRequireValidUser": string;
"obsidianLiveSyncSettingTab.errRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.labelDisabled": string;
"obsidianLiveSyncSettingTab.labelEnabled": string;
"obsidianLiveSyncSettingTab.levelAdvanced": string;
"obsidianLiveSyncSettingTab.levelEdgeCase": string;
"obsidianLiveSyncSettingTab.levelPowerUser": string;
"obsidianLiveSyncSettingTab.linkOpenInBrowser": string;
"obsidianLiveSyncSettingTab.linkPageTop": string;
"obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting": string;
"obsidianLiveSyncSettingTab.linkTroubleshooting": string;
"obsidianLiveSyncSettingTab.logCannotUseCloudant": string;
"obsidianLiveSyncSettingTab.logCheckingConfigDone": string;
"obsidianLiveSyncSettingTab.logCheckingConfigFailed": string;
"obsidianLiveSyncSettingTab.logCheckingDbConfig": string;
"obsidianLiveSyncSettingTab.logCheckPassphraseFailed": string;
"obsidianLiveSyncSettingTab.logConfiguredDisabled": string;
"obsidianLiveSyncSettingTab.logConfiguredLiveSync": string;
"obsidianLiveSyncSettingTab.logConfiguredPeriodic": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigFail": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigSet": string;
"obsidianLiveSyncSettingTab.logCouchDbConfigUpdated": string;
"obsidianLiveSyncSettingTab.logDatabaseConnected": string;
"obsidianLiveSyncSettingTab.logEncryptionNoPassphrase": string;
"obsidianLiveSyncSettingTab.logEncryptionNoSupport": string;
"obsidianLiveSyncSettingTab.logErrorOccurred": string;
"obsidianLiveSyncSettingTab.logEstimatedSize": string;
"obsidianLiveSyncSettingTab.logPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.logPassphraseNotCompatible": string;
"obsidianLiveSyncSettingTab.logRebuildNote": string;
"obsidianLiveSyncSettingTab.logSelectAnyPreset": string;
"obsidianLiveSyncSettingTab.msgAreYouSureProceed": string;
"obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied": string;
"obsidianLiveSyncSettingTab.msgConfigCheck": string;
"obsidianLiveSyncSettingTab.msgConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.msgConnectionCheck": string;
"obsidianLiveSyncSettingTab.msgConnectionProxyNote": string;
"obsidianLiveSyncSettingTab.msgCurrentOrigin": string;
"obsidianLiveSyncSettingTab.msgDiscardConfirmation": string;
"obsidianLiveSyncSettingTab.msgDone": string;
"obsidianLiveSyncSettingTab.msgEnableCors": string;
"obsidianLiveSyncSettingTab.msgEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": string;
"obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.msgGenerateSetupURI": string;
"obsidianLiveSyncSettingTab.msgIfConfigNotPersistent": string;
"obsidianLiveSyncSettingTab.msgInvalidPassphrase": string;
"obsidianLiveSyncSettingTab.msgNewVersionNote": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSInfo": string;
"obsidianLiveSyncSettingTab.msgNonHTTPSWarning": string;
"obsidianLiveSyncSettingTab.msgNotice": string;
"obsidianLiveSyncSettingTab.msgObjectStorageWarning": string;
"obsidianLiveSyncSettingTab.msgOriginCheck": string;
"obsidianLiveSyncSettingTab.msgRebuildRequired": string;
"obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": string;
"obsidianLiveSyncSettingTab.msgSetCorsCredentials": string;
"obsidianLiveSyncSettingTab.msgSetCorsOrigins": string;
"obsidianLiveSyncSettingTab.msgSetMaxDocSize": string;
"obsidianLiveSyncSettingTab.msgSetMaxRequestSize": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUser": string;
"obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.msgSettingModified": string;
"obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync": string;
"obsidianLiveSyncSettingTab.msgSetWwwAuth": string;
"obsidianLiveSyncSettingTab.nameApplySettings": string;
"obsidianLiveSyncSettingTab.nameConnectSetupURI": string;
"obsidianLiveSyncSettingTab.nameCopySetupURI": string;
"obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameDiscardSettings": string;
"obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameEnableLiveSync": string;
"obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": string;
"obsidianLiveSyncSettingTab.nameManualSetup": string;
"obsidianLiveSyncSettingTab.nameTestConnection": string;
"obsidianLiveSyncSettingTab.nameTestDatabaseConnection": string;
"obsidianLiveSyncSettingTab.nameValidateDatabaseConfig": string;
"obsidianLiveSyncSettingTab.okAdminPrivileges": string;
"obsidianLiveSyncSettingTab.okCorsCredentials": string;
"obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin": string;
"obsidianLiveSyncSettingTab.okCorsOriginMatched": string;
"obsidianLiveSyncSettingTab.okCorsOrigins": string;
"obsidianLiveSyncSettingTab.okEnableCors": string;
"obsidianLiveSyncSettingTab.okEnableCorsChttpd": string;
"obsidianLiveSyncSettingTab.okMaxDocumentSize": string;
"obsidianLiveSyncSettingTab.okMaxRequestSize": string;
"obsidianLiveSyncSettingTab.okRequireValidUser": string;
"obsidianLiveSyncSettingTab.okRequireValidUserAuth": string;
"obsidianLiveSyncSettingTab.okWwwAuth": string;
"obsidianLiveSyncSettingTab.optionApply": string;
"obsidianLiveSyncSettingTab.optionCancel": string;
"obsidianLiveSyncSettingTab.optionCouchDB": string;
"obsidianLiveSyncSettingTab.optionDisableAllAutomatic": string;
"obsidianLiveSyncSettingTab.optionFetchFromRemote": string;
"obsidianLiveSyncSettingTab.optionHere": string;
"obsidianLiveSyncSettingTab.optionLiveSync": string;
"obsidianLiveSyncSettingTab.optionMinioS3R2": string;
"obsidianLiveSyncSettingTab.optionOkReadEverything": string;
"obsidianLiveSyncSettingTab.optionOnEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicAndEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicWithBatch": string;
"obsidianLiveSyncSettingTab.optionRebuildBoth": string;
"obsidianLiveSyncSettingTab.optionSaveOnlySettings": string;
"obsidianLiveSyncSettingTab.panelChangeLog": string;
"obsidianLiveSyncSettingTab.panelGeneralSettings": string;
"obsidianLiveSyncSettingTab.panelPrivacyEncryption": string;
"obsidianLiveSyncSettingTab.panelRemoteConfiguration": string;
"obsidianLiveSyncSettingTab.panelSetup": string;
"obsidianLiveSyncSettingTab.serverVersion": string;
"obsidianLiveSyncSettingTab.titleActiveRemoteServer": string;
"obsidianLiveSyncSettingTab.titleAppearance": string;
"obsidianLiveSyncSettingTab.titleConflictResolution": string;
"obsidianLiveSyncSettingTab.titleCongratulations": string;
"obsidianLiveSyncSettingTab.titleCouchDB": string;
"obsidianLiveSyncSettingTab.titleDeletionPropagation": string;
"obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": string;
"obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.titleExtraFeatures": string;
"obsidianLiveSyncSettingTab.titleFetchConfig": string;
"obsidianLiveSyncSettingTab.titleFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.titleFetchSettings": string;
"obsidianLiveSyncSettingTab.titleHiddenFiles": string;
"obsidianLiveSyncSettingTab.titleLogging": string;
"obsidianLiveSyncSettingTab.titleMinioS3R2": string;
"obsidianLiveSyncSettingTab.titleNotification": string;
"obsidianLiveSyncSettingTab.titleOnlineTips": string;
"obsidianLiveSyncSettingTab.titleQuickSetup": string;
"obsidianLiveSyncSettingTab.titleRebuildRequired": string;
"obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.titleRemoteServer": string;
"obsidianLiveSyncSettingTab.titleReset": string;
"obsidianLiveSyncSettingTab.titleSetupOtherDevices": string;
"obsidianLiveSyncSettingTab.titleSynchronizationMethod": string;
"obsidianLiveSyncSettingTab.titleSynchronizationPreset": string;
"obsidianLiveSyncSettingTab.titleSyncSettings": string;
"obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": string;
"obsidianLiveSyncSettingTab.titleUpdateThinning": string;
"obsidianLiveSyncSettingTab.warnCorsOriginUnmatched": string;
"obsidianLiveSyncSettingTab.warnNoAdmin": string;
Ok: string;
"Old Algorithm": string;
"Older fallback (Slow, W/O WebAssembly)": string;
Open: string;
"Open the dialog": string;
Overwrite: string;
"Overwrite patterns": string;
"Overwrite remote": string;
"Overwrite remote with local DB and passphrase.": string;
"Overwrite Server Data with This Device's Files": string;
"P2P.AskPassphraseForDecrypt": string;
"P2P.AskPassphraseForShare": string;
"P2P.DisabledButNeed": string;
"P2P.FailedToOpen": string;
"P2P.NoAutoSyncPeers": string;
"P2P.NoKnownPeers": string;
"P2P.Note.description": string;
"P2P.Note.important_note": string;
"P2P.Note.important_note_sub": string;
"P2P.Note.Summary": string;
"P2P.NotEnabled": string;
"P2P.P2PReplication": string;
"P2P.PaneTitle": string;
"P2P.ReplicatorInstanceMissing": string;
"P2P.SeemsOffline": string;
"P2P.SyncAlreadyRunning": string;
"P2P.SyncCompleted": string;
"P2P.SyncStartedWith": string;
"paneMaintenance.markDeviceResolvedAfterBackup": string;
"paneMaintenance.remoteLockedAndDeviceNotAccepted": string;
"paneMaintenance.remoteLockedResolvedDevice": string;
"paneMaintenance.unlockDatabaseReady": string;
Passphrase: string;
"Passphrase of sensitive configuration items": string;
password: string;
Password: string;
"Paste a connection string": string;
"Paste the Setup URI generated from one of your active devices.": string;
"Path Obfuscation": string;
"Patterns to match files for overwriting instead of merging": string;
"Patterns to match files for syncing": string;
"Peer-to-Peer only": string;
"Peer-to-Peer Synchronisation": string;
"Per-file-saved customization sync": string;
Perform: string;
"Perform cleanup": string;
"Perform Garbage Collection": string;
"Perform Garbage Collection to remove unused chunks and reduce database size.": string;
"Periodic Sync interval": string;
"Pick a file to resolve conflict": string;
"Please disable 'Read chunks online' in settings to use Garbage Collection.": string;
"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": string;
"Please select 'Cancel' explicitly to cancel this operation.": string;
"Please select a method to import the settings from another device.": string;
"Please select an option to proceed": string;
"Please select the type of server to which you are connecting.": string;
"Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.": string;
"Please set this device name": string;
"Plug-in version": string;
"Prepare the 'report' to create an issue": string;
Presets: string;
"Proceed Garbage Collection": string;
"Proceed with Setup URI": string;
"Proceeding with Garbage Collection, ignoring missing nodes.": string;
"Proceeding with Garbage Collection.": string;
"Process small files in the foreground": string;
Progress: string;
"Property Encryption": string;
"PureJS fallback (Fast, W/O WebAssembly)": string;
"Purge all download/upload cache.": string;
"Purge all journal counter": string;
"Rebuild local and remote database with local files.": string;
"Rebuilding Operations (Remote Only)": string;
"Recreate all": string;
"Recreate missing chunks for all files": string;
"RedFlag.Fetch.Method.Desc": string;
"RedFlag.Fetch.Method.FetchSafer": string;
"RedFlag.Fetch.Method.FetchSmoother": string;
"RedFlag.Fetch.Method.FetchTraditional": string;
"RedFlag.Fetch.Method.Title": string;
"RedFlag.FetchRemoteConfig.Buttons.Cancel": string;
"RedFlag.FetchRemoteConfig.Buttons.Fetch": string;
"RedFlag.FetchRemoteConfig.Message": string;
"RedFlag.FetchRemoteConfig.Title": string;
"Reducing the frequency with which on-disk changes are reflected into the DB": string;
Region: string;
Remediation: string;
"Remediation Setting Changed": string;
"Remote Database Tweak (In sunset)": string;
"Remote Databases": string;
"Remote name": string;
"Remote server type": string;
"Remote Type": string;
Rename: string;
"Replicator.Dialogue.Locked.Action.Dismiss": string;
"Replicator.Dialogue.Locked.Action.Fetch": string;
"Replicator.Dialogue.Locked.Action.Unlock": string;
"Replicator.Dialogue.Locked.Message": string;
"Replicator.Dialogue.Locked.Message.Fetch": string;
"Replicator.Dialogue.Locked.Message.Unlocked": string;
"Replicator.Dialogue.Locked.Title": string;
"Replicator.Message.Cleaned": string;
"Replicator.Message.InitialiseFatalError": string;
"Replicator.Message.Pending": string;
"Replicator.Message.SomeModuleFailed": string;
"Replicator.Message.VersionUpFlash": string;
"Requires restart of Obsidian": string;
"Requires restart of Obsidian.": string;
"Rerun Onboarding Wizard": string;
"Rerun the onboarding wizard to set up Self-hosted LiveSync again.": string;
"Rerun Wizard": string;
Resend: string;
"Resend all chunks to the remote.": string;
Reset: string;
"Reset all": string;
"Reset all journal counter": string;
"Reset journal received history": string;
"Reset journal sent history": string;
"Reset notification threshold and check the remote database usage": string;
"Reset received": string;
"Reset sent history": string;
"Reset Synchronisation information": string;
"Reset Synchronisation on This Device": string;
"Reset the remote storage size threshold and check the remote storage size again.": string;
"Resolve All": string;
"Resolve all conflicted files": string;
"Resolve All conflicted files by the newer one": string;
"Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.": string;
"Restart Now": string;
"Restore or reconstruct local database from remote.": string;
"Run Doctor": string;
"S3/MinIO/R2 Object Storage": string;
"Save settings to a markdown file.": string;
"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.": string;
"Saving will be performed forcefully after this number of seconds.": string;
"Scan a QR Code (Recommended for mobile)": string;
"Scan changes on customization sync": string;
"Scan customization automatically": string;
"Scan customization before replicating.": string;
"Scan customization every 1 minute.": string;
"Scan customization periodically": string;
"Scan for hidden files before replication": string;
"Scan hidden files periodically": string;
"Scan the QR code displayed on an active device using this device's camera.": string;
"Schedule and Restart": string;
"Scram!": string;
"Seconds, 0 to disable": string;
"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.": string;
"Secret Key": string;
"Select the database adapter to use.": string;
Send: string;
"Send chunks": string;
"Server URI": string;
"Setting.GenerateKeyPair.Desc": string;
"Setting.GenerateKeyPair.Title": string;
"Setting.TroubleShooting": string;
"Setting.TroubleShooting.Doctor": string;
"Setting.TroubleShooting.Doctor.Desc": string;
"Setting.TroubleShooting.ScanBrokenFiles": string;
"Setting.TroubleShooting.ScanBrokenFiles.Desc": string;
"SettingTab.Message.AskRebuild": string;
"Setup URI dialog cancelled.": string;
"Setup.Apply.Buttons.ApplyAndFetch": string;
"Setup.Apply.Buttons.ApplyAndMerge": string;
"Setup.Apply.Buttons.ApplyAndRebuild": string;
"Setup.Apply.Buttons.Cancel": string;
"Setup.Apply.Buttons.OnlyApply": string;
"Setup.Apply.Message": string;
"Setup.Apply.Title": string;
"Setup.Apply.WarningRebuildRecommended": string;
"Setup.Doctor.Buttons.No": string;
"Setup.Doctor.Buttons.Yes": string;
"Setup.Doctor.Message": string;
"Setup.Doctor.Title": string;
"Setup.FetchRemoteConf.Buttons.Fetch": string;
"Setup.FetchRemoteConf.Buttons.Skip": string;
"Setup.FetchRemoteConf.Message": string;
"Setup.FetchRemoteConf.Title": string;
"Setup.QRCode": string;
"Setup.RemoteE2EE.AdvancedTitle": string;
"Setup.RemoteE2EE.AlgorithmWarning": string;
"Setup.RemoteE2EE.ButtonCancel": string;
"Setup.RemoteE2EE.ButtonProceed": string;
"Setup.RemoteE2EE.DefaultAlgorithmDesc": string;
"Setup.RemoteE2EE.Guidance": string;
"Setup.RemoteE2EE.LabelEncrypt": string;
"Setup.RemoteE2EE.LabelEncryptionAlgorithm": string;
"Setup.RemoteE2EE.LabelObfuscateProperties": string;
"Setup.RemoteE2EE.MultiDestinationWarning": string;
"Setup.RemoteE2EE.ObfuscatePropertiesDesc": string;
"Setup.RemoteE2EE.PassphraseValidationLine1": string;
"Setup.RemoteE2EE.PassphraseValidationLine2": string;
"Setup.RemoteE2EE.PlaceholderPassphrase": string;
"Setup.RemoteE2EE.StronglyRecommendedLine1": string;
"Setup.RemoteE2EE.StronglyRecommendedLine2": string;
"Setup.RemoteE2EE.StronglyRecommendedTitle": string;
"Setup.RemoteE2EE.Title": string;
"Setup.ScanQRCode.ButtonClose": string;
"Setup.ScanQRCode.Guidance": string;
"Setup.ScanQRCode.Step1": string;
"Setup.ScanQRCode.Step2": string;
"Setup.ScanQRCode.Step3": string;
"Setup.ScanQRCode.Step4": string;
"Setup.ScanQRCode.Title": string;
"Setup.ShowQRCode": string;
"Setup.ShowQRCode.Desc": string;
"Setup.UseSetupURI.ButtonCancel": string;
"Setup.UseSetupURI.ButtonProceed": string;
"Setup.UseSetupURI.ErrorFailedToParse": string;
"Setup.UseSetupURI.ErrorPassphraseRequired": string;
"Setup.UseSetupURI.GuidanceLine1": string;
"Setup.UseSetupURI.GuidanceLine2": string;
"Setup.UseSetupURI.InvalidInfo": string;
"Setup.UseSetupURI.LabelPassphrase": string;
"Setup.UseSetupURI.LabelSetupURI": string;
"Setup.UseSetupURI.PlaceholderPassphrase": string;
"Setup.UseSetupURI.Title": string;
"Setup.UseSetupURI.ValidInfo": string;
"Should we keep folders that don't have any files inside?": string;
"Should we only check for conflicts when a file is opened?": string;
"Should we prompt you about conflicting files when a file is opened?": string;
"Should we prompt you for every single merge, even if we can safely merge automatcially?": string;
"Show full banner": string;
"Show only notifications": string;
"Show status as icons only": string;
"Show status icon instead of file warnings banner": string;
"Show status inside the editor": string;
"Show status on the status bar": string;
"Show verbose log. Please enable if you report an issue.": string;
"Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.": string;
"Starts synchronisation when a file is saved.": string;
"Stop reflecting database changes to storage files.": string;
"Stop watching for file changes.": string;
"Suppress notification of hidden files change": string;
"Suspend database reflecting": string;
"Suspend file watching": string;
"Switch to IDB": string;
"Switch to IndexedDB": string;
"Sync after merging file": string;
"Sync automatically after merging files": string;
"Sync Mode": string;
"Sync on Editor Save": string;
"Sync on File Open": string;
"Sync on Save": string;
"Sync on Startup": string;
"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": string;
"Synchronising files": string;
Syncing: string;
"Target patterns": string;
"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.": string;
"The delay for consecutive on-demand fetches": string;
"The following accepted nodes are missing its node information:\n- ${missingNodes}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.": string;
"The Hash algorithm for chunk IDs": string;
"The maximum duration for which chunks can be incubated within the document.": string;
"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.": string;
"The maximum number of chunks that can be incubated within the document.": string;
"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.": string;
"The maximum total size of chunks that can be incubated within the document.": string;
"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.": string;
"The minimum interval for automatic synchronisation on event.": string;
"This feature enables direct synchronisation between devices. No server is required, but both devices must be online at the same time for synchronisation to occur, and some features may be limited. Internet connection is only required to signalling (detecting peers) and not for data transfer.": string;
"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": string;
"This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": string;
"This passphrase will not be copied to another device. It will be set to until you configure it again.": string;
"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.": string;
"This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": string;
"Transfer Tweak": string;
"TweakMismatchResolve.Action.Dismiss": string;
"TweakMismatchResolve.Action.UseConfigured": string;
"TweakMismatchResolve.Action.UseMine": string;
"TweakMismatchResolve.Action.UseMineAcceptIncompatible": string;
"TweakMismatchResolve.Action.UseMineWithRebuild": string;
"TweakMismatchResolve.Action.UseRemote": string;
"TweakMismatchResolve.Action.UseRemoteAcceptIncompatible": string;
"TweakMismatchResolve.Action.UseRemoteWithRebuild": string;
"TweakMismatchResolve.Message.Main": string;
"TweakMismatchResolve.Message.MainTweakResolving": string;
"TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended": string;
"TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired": string;
"TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended": string;
"TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired": string;
"TweakMismatchResolve.Table": string;
"TweakMismatchResolve.Table.Row": string;
"TweakMismatchResolve.Title": string;
"TweakMismatchResolve.Title.TweakResolving": string;
"TweakMismatchResolve.Title.UseRemoteConfig": string;
"Unique name between all synchronized devices. To edit this setting, please disable customization sync once.": string;
"Use a custom passphrase": string;
"Use a Setup URI (Recommended)": string;
"Use Custom HTTP Handler": string;
"Use dynamic iteration count": string;
"Use Segmented-splitter": string;
"Use splitting-limit-capped chunk splitter": string;
"Use the trash bin": string;
"Use timeouts instead of heartbeats": string;
username: string;
Username: string;
"Verbose Log": string;
"Verify all": string;
"Verify and repair all files": string;
"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name.": string;
"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.": string;
"We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.": string;
"We will now guide you through a few questions to simplify the synchronisation setup.": string;
"We will now proceed with the server configuration.": string;
"Welcome to Self-hosted LiveSync": string;
"When you save a file in the editor, start a sync automatically": string;
"Write credentials in the file": string;
"Write logs into the file": string;
"xxhash32 (Fast but less collision resistance)": string;
"xxhash64 (Fastest)": string;
"Yes, I want to add this device to my existing synchronisation": string;
"Yes, I want to set up a new synchronisation": string;
"You are adding this device to an existing synchronisation setup.": string;
};
};
+384
View File
@@ -0,0 +1,384 @@
export declare const PartialMessages: {
readonly "zh-tw": {
"(Active)": string;
"(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.": string;
"(RegExp) If this is set, any changes to local and remote files that match this will be skipped.": string;
"(Select this if you are already using synchronisation on another computer or smartphone.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"(Select this if you are configuring this device as the first synchronisation device.) This option is suitable if you are new to LiveSync and want to set it up from scratch.": string;
"> [!INFO]- The connected devices have been detected as follows:\n${devices}": string;
"A Setup URI is a single string of text containing your server address and authentication details. Using a URI, if one was generated by your server installation script, provides a simple and secure configuration.": string;
Activate: string;
"Active Remote Configuration": string;
"Add default patterns": string;
"Add new connection": string;
"All devices have the same progress value (${progress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.": string;
"Always prompt merge conflicts": string;
Analyse: string;
"Analyse database usage": string;
"Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.": string;
"Apply Latest Change if Conflicting": string;
"Apply preset configuration": string;
"Ask a passphrase at every launch": string;
"Automatically Sync all files when opening Obsidian.": string;
Back: string;
"Back to non-configured": string;
"Batch database update": string;
"Batch limit": string;
"Batch size": string;
"Batch size of on-demand fetching": string;
"Bucket Name": string;
Cancel: string;
"Cancel Garbage Collection": string;
Check: string;
"Check and convert non-path-obfuscated files": string;
"Check for documents that have not been converted to path-obfuscated IDs and convert them if necessary.": string;
"cmdConfigSync.showCustomizationSync": string;
"Compaction in progress on remote database...": string;
"Compaction on remote database completed successfully.": string;
"Compaction on remote database failed.": string;
"Compaction on remote database timed out.": string;
"Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.": string;
"Compatibility (Conflict Behaviour)": string;
"Compatibility (Database structure)": string;
"Compatibility (Internal API Usage)": string;
"Compatibility (Metadata)": string;
"Compatibility (Remote Database)": string;
"Compatibility (Trouble addressed)": string;
"Configuration Encryption": string;
Configure: string;
"Configure And Change Remote": string;
"Configure E2EE": string;
"Configure Remote": string;
"Configure the same server information as your other devices again, manually, very advanced users only.": string;
"Connection Method": string;
"Continue to CouchDB setup": string;
"Continue to Peer-to-Peer only setup": string;
"Continue to S3/MinIO/R2 setup": string;
Copy: string;
"Copy Report to clipboard": string;
"CouchDB Connection Tweak": string;
"Cross-platform": string;
"Current adapter: {adapter}": string;
"Customization Sync": string;
"Customization Sync (Beta3)": string;
"Data Compression": string;
"Database -> Storage": string;
"Database Adapter": string;
"Database Name": string;
"Database suffix": string;
Default: string;
"Delay conflict resolution of inactive files": string;
"Delay merge conflict prompt for inactive files.": string;
Delete: string;
"Delete all customization sync data": string;
"Delete all data on the remote server.": string;
"Delete local database to reset or uninstall Self-hosted LiveSync": string;
"Delete old metadata of deleted files on start-up": string;
"Delete Remote Configuration": string;
"Delete remote configuration '{name}'?": string;
desktop: string;
Developer: string;
Device: string;
"Device name": string;
"Device Setup Method": string;
"dialog.yourLanguageAvailable": string;
"dialog.yourLanguageAvailable.btnRevertToDefault": string;
"dialog.yourLanguageAvailable.Title": string;
"Disables all synchronization and restart.": string;
"Disables logging, only shows notifications. Please disable if you report an issue.": string;
"Display Language": string;
"Display name": string;
"Do not check configuration mismatch before replication": string;
"Do not keep metadata of deleted files.": string;
"Do not split chunks in the background": string;
"Do not use internal API": string;
"Document History": string;
Duplicate: string;
"Duplicate remote": string;
"E2EE Configuration": string;
"Edge case addressing (Behaviour)": string;
"Edge case addressing (Database)": string;
"Edge case addressing (Processing)": string;
"Emergency restart": string;
"Enable advanced features": string;
"Enable customization sync": string;
"Enable Developers' Debug Tools.": string;
"Enable edge case treatment features": string;
"Enable poweruser features": string;
"Enable this if your Object Storage doesn't support CORS": string;
"Enable this option to automatically apply the most recent change to documents even when it conflicts": string;
"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.": string;
"Encrypting sensitive configuration items": string;
"Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.": string;
"End-to-End Encryption": string;
"Endpoint URL": string;
"Enhance chunk size": string;
"Enter Server Information": string;
"Enter the server information manually": string;
Export: string;
"Failed to connect to remote for compaction.": string;
"Failed to connect to remote for compaction. ${reason}": string;
"Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.": string;
"Failed to start replication after Garbage Collection.": string;
Fetch: string;
"Fetch chunks on demand": string;
"Fetch database with previous behaviour": string;
"Fetch remote settings": string;
"File to resolve conflict": string;
"File to view History": string;
Filename: string;
"First, please select the option that best describes your current situation.": string;
"Flag and restart": string;
"Forces the file to be synced when opened.": string;
"Fresh Start Wipe": string;
"Garbage Collection cancelled by user.": string;
"Garbage Collection completed. Deleted chunks: ${deletedChunks} / ${totalChunks}. Time taken: ${seconds} seconds.": string;
"Garbage Collection Confirmation": string;
"Garbage Collection V3 (Beta)": string;
"Garbage Collection: Found ${unusedChunks} unused chunks to delete.": string;
"Garbage Collection: Scanned ${scanned} / ~${docCount}": string;
"Garbage Collection: Scanning completed. Total chunks: ${totalChunks}, Used chunks: ${usedChunks}": string;
"Handle files as Case-Sensitive": string;
"Hidden Files": string;
"Hide completely": string;
"Highlight diff": string;
"How to display network errors when the sync server is unreachable.": string;
"How would you like to configure the connection to your server?": string;
"I am adding a device to an existing synchronisation setup": string;
"I am setting this up for the first time": string;
"I know my server details, let me enter them": string;
"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).": string;
"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.": string;
"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.": string;
"If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.": string;
"If enabled, the \u26D4 icon will be shown inside the status instead of the file warnings banner. No details will be shown.": string;
"If enabled, the file under 1kb will be processed in the UI thread.": string;
"If enabled, the notification of hidden files change will be suppressed.": string;
"If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)": string;
"If this enabled, All files are handled as case-Sensitive (Previous behaviour).": string;
"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.": string;
"If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value.": string;
"Ignore and Proceed": string;
"Ignore patterns": string;
"Import connection": string;
"Initialise all journal history, On the next sync, every item will be received and sent.": string;
"Initialise journal received history. On the next sync, every item except this device sent will be downloaded again.": string;
"Initialise journal sent history. On the next sync, every item except this device received will be sent again.": string;
Later: string;
"Limit: {datetime} ({timestamp})": string;
Lock: string;
"Lock Server": string;
"Lock the remote server to prevent synchronization with other devices.": string;
"Minimum interval for syncing": string;
"More actions": string;
"Network warning style": string;
"New Remote": string;
"No connected device information found. Cancelling Garbage Collection.": string;
"No limit configured": string;
"No, please take me back": string;
"Node ID": string;
"Node Information Missing": string;
"Non-Synchronising files": string;
"Normal Files": string;
"Obsidian version": string;
"obsidianLiveSyncSettingTab.btnApply": string;
"obsidianLiveSyncSettingTab.btnDisable": string;
"obsidianLiveSyncSettingTab.btnNext": string;
"obsidianLiveSyncSettingTab.buttonNext": string;
"obsidianLiveSyncSettingTab.defaultLanguage": string;
"obsidianLiveSyncSettingTab.labelDisabled": string;
"obsidianLiveSyncSettingTab.labelEnabled": string;
"obsidianLiveSyncSettingTab.logConfiguredDisabled": string;
"obsidianLiveSyncSettingTab.logConfiguredLiveSync": string;
"obsidianLiveSyncSettingTab.logConfiguredPeriodic": string;
"obsidianLiveSyncSettingTab.logSelectAnyPreset": string;
"obsidianLiveSyncSettingTab.msgConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation": string;
"obsidianLiveSyncSettingTab.msgFetchConfigFromRemote": string;
"obsidianLiveSyncSettingTab.msgGenerateSetupURI": string;
"obsidianLiveSyncSettingTab.msgInvalidPassphrase": string;
"obsidianLiveSyncSettingTab.msgSelectAndApplyPreset": string;
"obsidianLiveSyncSettingTab.nameDisableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameEnableHiddenFileSync": string;
"obsidianLiveSyncSettingTab.nameHiddenFileSynchronization": string;
"obsidianLiveSyncSettingTab.optionDisableAllAutomatic": string;
"obsidianLiveSyncSettingTab.optionLiveSync": string;
"obsidianLiveSyncSettingTab.optionOnEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicAndEvents": string;
"obsidianLiveSyncSettingTab.optionPeriodicWithBatch": string;
"obsidianLiveSyncSettingTab.titleAppearance": string;
"obsidianLiveSyncSettingTab.titleConflictResolution": string;
"obsidianLiveSyncSettingTab.titleCongratulations": string;
"obsidianLiveSyncSettingTab.titleCouchDB": string;
"obsidianLiveSyncSettingTab.titleDeletionPropagation": string;
"obsidianLiveSyncSettingTab.titleEncryptionNotEnabled": string;
"obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid": string;
"obsidianLiveSyncSettingTab.titleFetchConfig": string;
"obsidianLiveSyncSettingTab.titleHiddenFiles": string;
"obsidianLiveSyncSettingTab.titleLogging": string;
"obsidianLiveSyncSettingTab.titleMinioS3R2": string;
"obsidianLiveSyncSettingTab.titleNotification": string;
"obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed": string;
"obsidianLiveSyncSettingTab.titleRemoteServer": string;
"obsidianLiveSyncSettingTab.titleSynchronizationMethod": string;
"obsidianLiveSyncSettingTab.titleSynchronizationPreset": string;
"obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown": string;
"obsidianLiveSyncSettingTab.titleUpdateThinning": string;
Ok: string;
"Old Algorithm": string;
"Older fallback (Slow, W/O WebAssembly)": string;
"Overwrite patterns": string;
"Overwrite remote": string;
"Overwrite remote with local DB and passphrase.": string;
"Overwrite Server Data with This Device's Files": string;
"paneMaintenance.markDeviceResolvedAfterBackup": string;
"paneMaintenance.remoteLockedAndDeviceNotAccepted": string;
"paneMaintenance.remoteLockedResolvedDevice": string;
"paneMaintenance.unlockDatabaseReady": string;
"Paste a connection string": string;
"Paste the Setup URI generated from one of your active devices.": string;
"Patterns to match files for overwriting instead of merging": string;
"Patterns to match files for syncing": string;
"Peer-to-Peer only": string;
"Peer-to-Peer Synchronisation": string;
Perform: string;
"Perform cleanup": string;
"Perform Garbage Collection": string;
"Perform Garbage Collection to remove unused chunks and reduce database size.": string;
"Pick a file to resolve conflict": string;
"Pick a file to show history": string;
"Please disable 'Read chunks online' in settings to use Garbage Collection.": string;
"Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.": string;
"Please select 'Cancel' explicitly to cancel this operation.": string;
"Please select a method to import the settings from another device.": string;
"Please select an option to proceed": string;
"Please select the type of server to which you are connecting.": string;
"Please set this device name": string;
"Plug-in version": string;
"Prepare the 'report' to create an issue": string;
"Proceed Garbage Collection": string;
"Proceed with Setup URI": string;
"Proceeding with Garbage Collection, ignoring missing nodes.": string;
"Proceeding with Garbage Collection.": string;
Progress: string;
"PureJS fallback (Fast, W/O WebAssembly)": string;
"Purge all download/upload cache.": string;
"Purge all journal counter": string;
"Rebuild local and remote database with local files.": string;
"Rebuilding Operations (Remote Only)": string;
"Recovery and Repair": string;
"Recreate all": string;
"Recreate missing chunks for all files": string;
"Reduces storage space by discarding all non-latest revisions. This requires the same amount of free space on the remote server and the local client.": string;
Remediation: string;
"Remediation Setting Changed": string;
"Remote Database Tweak (In sunset)": string;
"Remote Databases": string;
"Remote name": string;
Rename: string;
"Rerun Onboarding Wizard": string;
"Rerun the onboarding wizard to set up Self-hosted LiveSync again.": string;
"Rerun Wizard": string;
Resend: string;
"Resend all chunks to the remote.": string;
Reset: string;
"Reset all": string;
"Reset all journal counter": string;
"Reset journal received history": string;
"Reset journal sent history": string;
"Reset notification threshold and check the remote database usage": string;
"Reset received": string;
"Reset sent history": string;
"Reset Synchronisation information": string;
"Reset Synchronisation on This Device": string;
"Reset the remote storage size threshold and check the remote storage size again.": string;
"Resolve All": string;
"Resolve all conflicted files": string;
"Resolve All conflicted files by the newer one": string;
"Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.": string;
"Restart Now": string;
"Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and display may be inconsistent. Are you sure to restart now?": string;
"Restore or reconstruct local database from remote.": string;
"Run Doctor": string;
"S3/MinIO/R2 Object Storage": string;
"Scan a QR Code (Recommended for mobile)": string;
"Scan for Broken files": string;
"Scan the QR code displayed on an active device using this device's camera.": string;
"Schedule and Restart": string;
"Scram Switches": string;
"Scram!": string;
"Select the database adapter to use.": string;
Send: string;
"Send chunks": string;
"Setting.GenerateKeyPair.Desc": string;
"Setting.GenerateKeyPair.Title": string;
"Setup URI dialog cancelled.": string;
"Setup.RemoteE2EE.AdvancedTitle": string;
"Setup.RemoteE2EE.AlgorithmWarning": string;
"Setup.RemoteE2EE.ButtonCancel": string;
"Setup.RemoteE2EE.ButtonProceed": string;
"Setup.RemoteE2EE.DefaultAlgorithmDesc": string;
"Setup.RemoteE2EE.Guidance": string;
"Setup.RemoteE2EE.LabelEncrypt": string;
"Setup.RemoteE2EE.LabelEncryptionAlgorithm": string;
"Setup.RemoteE2EE.LabelObfuscateProperties": string;
"Setup.RemoteE2EE.MultiDestinationWarning": string;
"Setup.RemoteE2EE.ObfuscatePropertiesDesc": string;
"Setup.RemoteE2EE.PassphraseValidationLine1": string;
"Setup.RemoteE2EE.PassphraseValidationLine2": string;
"Setup.RemoteE2EE.PlaceholderPassphrase": string;
"Setup.RemoteE2EE.StronglyRecommendedLine1": string;
"Setup.RemoteE2EE.StronglyRecommendedLine2": string;
"Setup.RemoteE2EE.StronglyRecommendedTitle": string;
"Setup.RemoteE2EE.Title": string;
"Setup.ScanQRCode.ButtonClose": string;
"Setup.ScanQRCode.Guidance": string;
"Setup.ScanQRCode.Step1": string;
"Setup.ScanQRCode.Step2": string;
"Setup.ScanQRCode.Step3": string;
"Setup.ScanQRCode.Step4": string;
"Setup.ScanQRCode.Title": string;
"Setup.UseSetupURI.ButtonCancel": string;
"Setup.UseSetupURI.ButtonProceed": string;
"Setup.UseSetupURI.ErrorFailedToParse": string;
"Setup.UseSetupURI.ErrorPassphraseRequired": string;
"Setup.UseSetupURI.GuidanceLine1": string;
"Setup.UseSetupURI.GuidanceLine2": string;
"Setup.UseSetupURI.InvalidInfo": string;
"Setup.UseSetupURI.LabelPassphrase": string;
"Setup.UseSetupURI.LabelSetupURI": string;
"Setup.UseSetupURI.PlaceholderPassphrase": string;
"Setup.UseSetupURI.Title": string;
"Setup.UseSetupURI.ValidInfo": string;
"Show full banner": string;
"Show history": string;
"Show icon only": string;
"Show status icon instead of file warnings banner": string;
"Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.": string;
"Storage -> Database": string;
"Switch to IDB": string;
"Switch to IndexedDB": string;
"Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage.": string;
"Synchronising files": string;
Syncing: string;
"Target patterns": string;
"The following accepted nodes are missing its node information:\n- ${missingNodes}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.": string;
"The IndexedDB adapter often offers superior performance in certain scenarios, but it has been found to cause memory leaks when used with LiveSync mode. When using LiveSync mode, please use IDB adapter instead.": string;
"The minimum interval for automatic synchronisation on event.": string;
"This feature enables direct synchronisation between devices. No server is required, but both devices must be online at the same time for synchronisation to occur, and some features may be limited. Internet connection is only required to signalling (detecting peers) and not for data transfer.": string;
"This is an advanced option for users who do not have a URI or who wish to configure detailed settings.": string;
"This is the most suitable synchronisation method for the design. All functions are available. You must have set up a CouchDB instance.": string;
"This will recreate chunks for all files. If there were missing chunks, this may fix the errors.": string;
"Use a Setup URI (Recommended)": string;
"Verify all": string;
"Verify and repair all files": string;
"We will now guide you through a few questions to simplify the synchronisation setup.": string;
"We will now proceed with the server configuration.": string;
"Welcome to Self-hosted LiveSync": string;
"xxhash32 (Fast but less collision resistance)": string;
"xxhash64 (Fastest)": string;
"Yes, I want to add this device to my existing synchronisation": string;
"Yes, I want to set up a new synchronisation": string;
"You are adding this device to an existing synchronisation setup.": string;
};
};
File diff suppressed because it is too large Load Diff
+41
View File
@@ -0,0 +1,41 @@
export type CouchDBCredentials = BasicCredentials | JWTCredentials;
export type JWTAlgorithm = "HS256" | "HS512" | "ES256" | "ES512" | "";
export type Credential = {
username: string;
password: string;
};
export type BasicCredentials = {
username: string;
password: string;
type: "basic";
};
export type JWTCredentials = {
jwtAlgorithm: JWTAlgorithm;
jwtKey: string;
jwtKid: string;
jwtSub: string;
jwtExpDuration: number;
type: "jwt";
};
export interface JWTHeader {
alg: string;
typ: string;
kid?: string;
}
export interface JWTPayload {
sub: string;
exp: number;
iss?: string;
iat: number;
[key: string]: unknown;
}
export interface JWTParams {
header: JWTHeader;
payload: JWTPayload;
credentials: JWTCredentials;
}
export interface PreparedJWT {
header: JWTHeader;
payload: JWTPayload;
token: string;
}
+20
View File
@@ -0,0 +1,20 @@
import type { DocumentID } from "./db.type";
export declare const VERSIONING_DOCID: DocumentID;
export declare const MILESTONE_DOCID: DocumentID;
export declare const NODEINFO_DOCID: DocumentID;
export declare const SYNCINFO_ID: DocumentID;
export declare const EntryTypes: {
readonly NOTE_LEGACY: "notes";
readonly NOTE_BINARY: "newnote";
readonly NOTE_PLAIN: "plain";
readonly INTERNAL_FILE: "internalfile";
readonly CHUNK: "leaf";
readonly CHUNK_PACK: "chunkpack";
readonly VERSION_INFO: "versioninfo";
readonly SYNC_INFO: "syncinfo";
readonly SYNC_PARAMETERS: "sync-parameters";
readonly MILESTONE_INFO: "milestoneinfo";
readonly NODE_INFO: "nodeinfo";
};
export declare const NoteTypes: ("notes" | "newnote" | "plain")[];
export declare const ChunkTypes: ("leaf" | "chunkpack")[];
+56
View File
@@ -0,0 +1,56 @@
import type { MILESTONE_DOCID, NODEINFO_DOCID } from "./db.const";
import type { AnyEntry, ChunkVersionRange, DatabaseEntry, EntryChunkPack, EntryLeaf, EntryTypes, EntryVersionInfo, LoadedEntry, MetaEntry } from "./db.type";
import type { TweakValues } from "./tweak.definition";
export type NodeKey = string;
export interface DeviceInfo {
/**
* Name of the device (Initially from deviceAndVaultName setting, configurable).
*/
device_name: string;
/**
* Vault name (From vaultName setting).
*/
vault_name: string;
/**
* Obsidian App version of the device.
*/
app_version: string;
/**
* Plugin version of the device.
*/
plugin_version: string;
progress: string;
}
export interface NodeData extends DeviceInfo {
/**
* Epoch time in milliseconds when the device last connected.
*/
last_connected: number;
}
export interface EntryMilestoneInfo extends DatabaseEntry {
_id: typeof MILESTONE_DOCID;
type: EntryTypes["MILESTONE_INFO"];
created: number;
accepted_nodes: string[];
node_info: {
[key: NodeKey]: NodeData;
};
locked: boolean;
cleaned?: boolean;
node_chunk_info: {
[key: NodeKey]: ChunkVersionRange;
};
tweak_values: {
[key: NodeKey]: TweakValues;
};
}
export interface EntryNodeInfo extends DatabaseEntry {
_id: typeof NODEINFO_DOCID;
type: EntryTypes["NODE_INFO"];
nodeid: string;
v20220607?: boolean;
}
export type EntryBody = AnyEntry;
export type EntryDoc = EntryBody | LoadedEntry | EntryLeaf | EntryVersionInfo | EntryMilestoneInfo | EntryNodeInfo | EntryChunkPack;
export type EntryDocResponse = EntryDoc & PouchDB.Core.IdMeta & PouchDB.Core.GetMeta;
export declare function isMetaEntry(entry: AnyEntry): entry is MetaEntry;
+175
View File
@@ -0,0 +1,175 @@
import type { TaggedType } from "octagonal-wheels/common/types";
import type { EntryTypes, SYNCINFO_ID } from "./db.const";
export type FilePath = TaggedType<string, "FilePath">;
export type FilePathWithPrefixLC = TaggedType<string, "FilePathWithPrefixLC">;
export type FilePathWithPrefix = TaggedType<string, "FilePathWithPrefix"> | FilePath | FilePathWithPrefixLC;
export type DocumentID = TaggedType<string, "documentId">;
export type EntryType = (typeof EntryTypes)[keyof typeof EntryTypes];
export type EntryTypes = typeof EntryTypes;
export type EntryTypeNotes = EntryTypes["NOTE_BINARY"] | EntryTypes["NOTE_PLAIN"];
export type EntryTypeNotesWithLegacy = EntryTypeNotes | EntryTypes["NOTE_LEGACY"];
/**
* Represents an entry in the database.
*/
export interface DatabaseEntry {
/**
* The ID of the document.
*/
_id: DocumentID;
/**
* The revision of the document.
*/
_rev?: string;
/**
* Deleted flag.
*/
_deleted?: boolean;
/**
* Conflicts (if exists).
*/
_conflicts?: string[];
}
/**
* Represents the base structure for an entry that represents a file.
*/
export interface EntryBase {
/**
* The creation time of the file.
*/
ctime: number;
/**
* The modification time of the file.
*/
mtime: number;
/**
* The size of the file.
*/
size: number;
/**
* Deleted flag.
*/
deleted?: boolean;
}
export type EdenChunk = {
data: string;
epoch: number;
};
export type EntryWithEden = {
eden: Record<DocumentID, EdenChunk>;
};
/**
* Represents the common fields for all database entries representing physical files.
*/
export interface FileEntryBase extends DatabaseEntry, EntryBase, EntryWithEden {
/**
* The path of the file.
*/
path: FilePathWithPrefix;
}
/**
* Represents an entry that contains children (chunk IDs).
*/
export interface EntryWithChildren {
/**
* Chunk IDs indicating the contents of the file.
*/
children: string[];
}
/**
* Represents an entry that contains content data.
*/
export interface EntryWithData<T = string | string[] | Blob> {
/**
* Contents / payload of the entry.
*/
data: T;
}
/**
* Represents an entry that contains document body text.
*/
export type EntryWithBody = EntryWithData<string | string[]>;
/**
* Represents an entry that contains a binary Blob.
*/
export type EntryWithBlob = EntryWithData<Blob>;
/**
* Represents a legacy note entry where file content is stored directly in the metadata.
*/
export interface NoteEntry extends FileEntryBase, EntryWithBody {
/**
* The type of the entry.
*/
type: EntryTypes["NOTE_LEGACY"];
}
/**
* Represents a chunk-split binary file entry.
*/
export interface NewEntry extends FileEntryBase, EntryWithChildren {
/**
* The type of the entry.
*/
type: EntryTypes["NOTE_BINARY"];
}
/**
* Represents a chunk-split plain text file entry.
*/
export interface PlainEntry extends FileEntryBase, EntryWithChildren {
/**
* The type of the entry.
*/
type: EntryTypes["NOTE_PLAIN"];
}
/**
* Represents a customization / configuration file entry.
* @deprecated Use NewEntry or PlainEntry directly.
*/
export type InternalFileEntry = NewEntry;
/**
* Represents any file-related database entry.
*/
export type AnyEntry = NoteEntry | NewEntry | PlainEntry;
/**
* Represents a file entry after its contents have been loaded and assembled.
*/
export type LoadedEntry = AnyEntry & EntryWithBody & {
datatype: EntryTypeNotes;
};
/**
* Represents a file entry prepared for saving.
*/
export type SavingEntry = AnyEntry & EntryWithBlob & {
datatype: EntryTypeNotes;
};
/**
* Represents a metadata entry (chunked file entry) without full content.
*/
export type MetaEntry = NewEntry | PlainEntry;
/**
* Represents a leaf (chunk) document in the database.
*/
export interface EntryLeaf extends DatabaseEntry, EntryWithData<string> {
type: EntryTypes["CHUNK"];
isCorrupted?: boolean;
}
/**
* Represents a chunk pack document.
*/
export interface EntryChunkPack extends DatabaseEntry, EntryWithData<string> {
type: EntryTypes["CHUNK_PACK"];
}
export interface EntryVersionInfo extends DatabaseEntry {
type: EntryTypes["VERSION_INFO"];
version: number;
}
export interface EntryHasPath {
path: FilePathWithPrefix | FilePath;
}
export interface ChunkVersionRange {
min: number;
max: number;
current: number;
}
export interface SyncInfo extends DatabaseEntry, EntryWithData<string> {
_id: typeof SYNCINFO_ID;
type: EntryTypes["SYNC_INFO"];
}
+16
View File
@@ -0,0 +1,16 @@
import type { AUTO_MERGED, CANCELLED, MISSING_OR_ERROR, NOT_CONFLICTED } from "./shared.const.symbols";
export type diff_result_leaf = {
rev: string;
data: string;
ctime: number;
mtime: number;
deleted?: boolean;
};
export type dmp_result = Array<[number, string]>;
export type diff_result = {
left: diff_result_leaf;
right: diff_result_leaf;
diff: dmp_result;
};
export type DIFF_CHECK_RESULT_AUTO = typeof CANCELLED | typeof AUTO_MERGED | typeof NOT_CONFLICTED | typeof MISSING_OR_ERROR;
export type diff_check_result = DIFF_CHECK_RESULT_AUTO | diff_result;
@@ -0,0 +1,7 @@
export declare const CHeader = "h:";
export declare const PSCHeader = "ps:";
export declare const PSCHeaderEnd = "ps;";
export declare const ICHeader = "i:";
export declare const ICHeaderEnd = "i;";
export declare const ICHeaderLength: number;
export declare const ICXHeader = "ix:";
+83
View File
@@ -0,0 +1,83 @@
import type { FilePath, FilePathWithPrefix } from "./db.type";
export interface UXStat {
size: number;
mtime: number;
ctime: number;
type: "file" | "folder";
}
/**
* Represents the common base properties for any filesystem object stub.
*/
export interface UXFileSystemStubBase {
name: string;
path: FilePath | FilePathWithPrefix;
deleted?: boolean;
isInternal?: boolean;
}
/**
* Represents a stub for a regular file.
*/
export interface UXFileInfoStub extends UXFileSystemStubBase {
stat: UXStat;
isFolder?: false;
}
/**
* Represents a complete file containing its binary body.
*/
export interface UXFileInfo extends UXFileInfoStub {
body: Blob;
}
export type UXAbstractInfoStub = UXFileInfoStub | UXFolderInfo;
/**
* Represents a stub for an internal/hidden file.
*/
export interface UXInternalFileInfoStub extends UXFileSystemStubBase {
isFolder?: false;
isInternal: true;
stat: undefined;
}
/**
* Represents information about a folder.
*/
export interface UXFolderInfo extends UXFileSystemStubBase {
isFolder: true;
children: UXFileInfoStub[];
parent: FilePath | FilePathWithPrefix | undefined;
}
export interface UXDataWriteOptions {
/**
* Time of creation, represented as a unix timestamp, in milliseconds.
* Omit this if you want to keep the default behaviour.
* @public
* */
ctime?: number;
/**
* Time of last modification, represented as a unix timestamp, in milliseconds.
* Omit this if you want to keep the default behaviour.
* @public
* */
mtime?: number;
}
export type CacheData = string | ArrayBuffer;
export type FileEventType = "CREATE" | "DELETE" | "CHANGED" | "INTERNAL";
export interface FileEventArgs {
file: UXFileInfoStub | UXInternalFileInfoStub;
cache?: CacheData;
oldPath?: string;
ctx?: unknown;
}
export interface FileEventItem {
type: FileEventType;
args: FileEventArgs;
key: string;
skipBatchWait?: boolean;
cancelled?: boolean;
batched?: boolean;
}
export interface FileWithFileStat extends Omit<UXStat, "type"> {
path: FilePath;
}
export interface FileWithStatAsProp {
path: FilePath;
stat: Omit<UXStat, "type">;
}
+32
View File
@@ -0,0 +1,32 @@
import type { FilePath } from "./db.type";
export declare const PREFIXMD_LOGFILE = "livesync_log_";
export declare const PREFIXMD_LOGFILE_UC = "LIVESYNC_LOG_";
export declare const FlagFilesOriginal: {
readonly SUSPEND_ALL: FilePath;
readonly REBUILD_ALL: FilePath;
readonly FETCH_ALL: FilePath;
};
export declare const FlagFilesHumanReadable: {
readonly REBUILD_ALL: FilePath;
readonly FETCH_ALL: FilePath;
};
/**
* @deprecated Use `FlagFilesOriginal.SUSPEND_ALL` instead.
*/
export declare const FLAGMD_REDFLAG: FilePath;
/**
* @deprecated Use `FlagFilesHumanReadable.REBUILD_ALL` instead.
*/
export declare const FLAGMD_REDFLAG2: FilePath;
/**
* @deprecated Use `FlagFilesHumanReadable.FETCH_ALL` instead.
*/
export declare const FLAGMD_REDFLAG2_HR: FilePath;
/**
* @deprecated Use `FlagFilesOriginal.FETCH_ALL` instead.
*/
export declare const FLAGMD_REDFLAG3: FilePath;
/**
* @deprecated Use `FlagFilesHumanReadable.FETCH_ALL` instead.
*/
export declare const FLAGMD_REDFLAG3_HR: FilePath;
+49
View File
@@ -0,0 +1,49 @@
export declare const SETTING_VERSION_INITIAL = 0;
export declare const SETTING_VERSION_SUPPORT_CASE_INSENSITIVE = 10;
export declare const CURRENT_SETTING_VERSION = 10;
export declare const RemoteTypes: {
readonly REMOTE_COUCHDB: "";
readonly REMOTE_MINIO: "MINIO";
readonly REMOTE_P2P: "ONLY_P2P";
};
export declare const REMOTE_COUCHDB: "";
export declare const REMOTE_MINIO: "MINIO";
export declare const REMOTE_P2P: "ONLY_P2P";
export declare const E2EEAlgorithmNames: {
readonly "": "V1: Legacy";
readonly v2: "V2: AES-256-GCM With HKDF";
readonly forceV1: "Force-V1: Force Legacy (Not recommended)";
};
export declare const E2EEAlgorithms: {
readonly V1: "";
readonly V2: "v2";
readonly ForceV1: "forceV1";
};
export declare const HashAlgorithms: {
readonly XXHASH32: "xxhash32";
readonly XXHASH64: "xxhash64";
readonly MIXED_PUREJS: "mixed-purejs";
readonly SHA1: "sha1";
readonly LEGACY: "";
};
export declare const ChunkAlgorithmNames: {
readonly v1: "V1: Legacy";
readonly v2: "V2: Simple (Default)";
readonly "v2-segmenter": "V2.5: Lexical chunks";
readonly "v3-rabin-karp": "V3: Fine deduplication";
};
export declare const ChunkAlgorithms: {
readonly V1: "v1";
readonly V2: "v2";
readonly V2Segmenter: "v2-segmenter";
readonly RabinKarp: "v3-rabin-karp";
};
export declare const MODE_SELECTIVE = 0;
export declare const MODE_AUTOMATIC = 1;
export declare const MODE_PAUSED = 2;
export declare const MODE_SHINY = 3;
export declare const NetworkWarningStyles: {
readonly BANNER: "";
readonly ICON: "icon";
readonly HIDDEN: "hidden";
};
@@ -0,0 +1,3 @@
import { type ObsidianLiveSyncSettings, type P2PSyncSetting } from "./setting.type";
export declare const P2P_DEFAULT_SETTINGS: P2PSyncSetting;
export declare const DEFAULT_SETTINGS: ObsidianLiveSyncSettings;
@@ -0,0 +1,5 @@
import type { ObsidianLiveSyncSettings } from "./setting.type";
export declare const PREFERRED_BASE: Partial<ObsidianLiveSyncSettings>;
export declare const PREFERRED_SETTING_CLOUDANT: Partial<ObsidianLiveSyncSettings>;
export declare const PREFERRED_SETTING_SELF_HOSTED: Partial<ObsidianLiveSyncSettings>;
export declare const PREFERRED_JOURNAL_SYNC: Partial<ObsidianLiveSyncSettings>;
@@ -0,0 +1,2 @@
import type { ObsidianLiveSyncSettings } from "./setting.type";
export declare const KeyIndexOfSettings: Record<keyof ObsidianLiveSyncSettings, number>;
+893
View File
@@ -0,0 +1,893 @@
import type { ChunkAlgorithms, E2EEAlgorithms, HashAlgorithms, MODE_AUTOMATIC, MODE_PAUSED, MODE_SELECTIVE, MODE_SHINY, RemoteTypes } from "./setting.const";
import type { I18N_LANGS } from "@lib/common/rosetta";
import type { CustomRegExpSourceList } from "./shared.type.util";
import type { JWTAlgorithm } from "./auth.type";
/**
* Represents the connection details required to connect to a CouchDB instance.
*/
export interface CouchDBConnection {
/**
* The URI of the CouchDB instance.
*/
couchDB_URI: string;
/**
* The username to use when connecting to the CouchDB instance.
*/
couchDB_USER: string;
/**
* The password to use when connecting to the CouchDB instance.
*/
couchDB_PASSWORD: string;
/**
* The name of the database to use.
*/
couchDB_DBNAME: string;
/**
* e.g. `x-some-header: some-value\n x-some-header2: some-value2`
*/
couchDB_CustomHeaders: string;
useJWT: boolean;
jwtAlgorithm: JWTAlgorithm;
jwtKey: string;
jwtKid: string;
jwtSub: string;
jwtExpDuration: number;
/**
* Use Request API to avoid `inevitable` CORS problem.
* Seems stable, so promoted to the normal setting.
*/
useRequestAPI: boolean;
}
/**
* Interface representing the settings for periodic replication.
*/
interface PeriodicReplicationSettings {
/**
* Indicates whether periodic replication is enabled.
*/
periodicReplication: boolean;
/**
* The interval, in milliseconds, at which periodic replication occurs.
*/
periodicReplicationInterval: number;
}
export type ConfigPassphraseStore = "" | "LOCALSTORAGE" | "ASK_AT_LAUNCH";
/**
* Represents the user settings that are encrypted.
*/
interface EncryptedUserSettings {
/**
* The store for the configuration passphrase.
*/
configPassphraseStore: ConfigPassphraseStore;
/**
* The encrypted passphrase used for E2EE.
*/
encryptedPassphrase: string;
/**
* The encrypted connection details for CouchDB.
*/
encryptedCouchDBConnection: string;
}
/**
* Interface representing the settings for different sync invocation methods.
*/
interface SyncMethodSettings {
/**
* Synchronise in Live. This is an exclusive setting against other sync methods.
*/
liveSync: boolean;
/**
* automatically run sync on save.
* File modification will trigger the sync, even if the file is not changed on the editor.
*/
syncOnSave: boolean;
/**
* automatically run sync on starting the plug-in.
*/
syncOnStart: boolean;
/**
* automatically run sync on opening a file.
*/
syncOnFileOpen: boolean;
/**
* automatically run sync on editor save.
* Different from syncOnSave, this is only reacts to the editor save event.
*/
syncOnEditorSave: boolean;
/**
* The minimum delay between synchronisation operations (in milliseconds).
* If the operation is triggered before this delay, the operation will be delayed until the delay is over, and executed as a single operation.
*/
syncMinimumInterval: number;
}
/**
* Interface representing the settings for file handling.
*/
interface FileHandlingSettings {
/**
* Use trash instead of actually delete.
*/
trashInsteadDelete: boolean;
/**
* Do not delete the folder even if it has got empty.
*/
doNotDeleteFolder: boolean;
/**
* Thinning out the changes and make a single change for the same file.
*/
batchSave: boolean;
batchSaveMinimumDelay: number;
batchSaveMaximumDelay: number;
/**
* Maximum size of the file to be synchronized (in MB).
*/
syncMaxSizeInMB: number;
/**
* Use ignore files.
*/
useIgnoreFiles: boolean;
/**
* Ignore files pattern, i,e, `.gitignore, .obsidianignore` (This should be separated by comma)
*/
ignoreFiles: string;
/**
* Do not prevent write if the size is mismatched.
*/
processSizeMismatchedFiles: boolean;
}
/**
* Interface representing the settings for Hidden File Sync.
*/
interface InternalFileSettings {
/**
* Synchronise internal files.
*/
syncInternalFiles: boolean;
/**
* Scan internal files before replication.
*/
syncInternalFilesBeforeReplication: boolean;
/**
* Interval for scanning internal files (in seconds).
*/
syncInternalFilesInterval: number;
/**
* Ignore patterns for internal files.
* (Comma separated list of regular expressions)
*/
syncInternalFilesIgnorePatterns: CustomRegExpSourceList<",">;
/**
* Limit patterns for internal files.
*/
syncInternalFilesTargetPatterns: CustomRegExpSourceList<",">;
/**
* Enable watch internal file changes (This option uses the unexposed API)
*/
watchInternalFileChanges: boolean;
/**
* Suppress notification of hidden files change.
*/
suppressNotifyHiddenFilesChange: boolean;
/**
* Overwrite instead of merging patterns for internal files.
*/
syncInternalFileOverwritePatterns: CustomRegExpSourceList<",">;
}
export type SYNC_MODE = typeof MODE_SELECTIVE | typeof MODE_AUTOMATIC | typeof MODE_PAUSED | typeof MODE_SHINY;
export interface PluginSyncSettingEntry {
key: string;
mode: SYNC_MODE;
files: string[];
}
/**
* Interface representing the settings for plugin synchronisation.
*/
interface PluginSyncSettings {
/**
* Indicates whether plugin synchronisation is enabled.
*/
usePluginSync: boolean;
/**
* Indicates whether plugin settings synchronisation is enabled.
*/
usePluginSettings: boolean;
/**
* Indicates whether to show the device's own plugins.
*/
showOwnPlugins: boolean;
/**
* Indicates whether to automatically scan plugins.
*/
autoSweepPlugins: boolean;
/**
* Indicates whether to periodically scan plugins automatically.
*/
autoSweepPluginsPeriodic: boolean;
/**
* Indicates whether to notify when a plugin or setting is updated.
*/
notifyPluginOrSettingUpdated: boolean;
/**
* The name of the device and vault.
* This is used to identify the device and vault among synchronised devices and vaults.
* Hence, this should be unique among devices and vaults.
*/
deviceAndVaultName: string;
/**
* Indicates whether the v2 of plugin synchronisation is enabled.
*/
usePluginSyncV2: boolean;
/**
* Indicates whether additional plugin synchronisation settings are enabled.
* This setting is hidden from the UI.
*/
usePluginEtc: boolean;
/**
* Extended settings for plugin synchronisation.
*/
pluginSyncExtendedSetting: Record<PluginSyncSettingEntry["key"], PluginSyncSettingEntry>;
}
/**
* Interface representing the user interface settings.
*/
interface UISettings {
/**
* Indicates whether verbose logging has been enabled.
*/
showVerboseLog: boolean;
/**
* Indicates whether less information should be shown in the log.
*/
lessInformationInLog: boolean;
/**
* Indicates whether longer status line should be shown inside the editor.
*/
showLongerLogInsideEditor: boolean;
/**
* Indicates whether the status line should be shown on the editor.
*/
showStatusOnEditor: boolean;
/**
* Indicates whether the status line should be shown on the status bar.
*/
showStatusOnStatusbar: boolean;
/**
* Indicates whether only icons instead of status line should be shown on the editor.
*/
showOnlyIconsOnEditor: boolean;
/**
* Hide File warning notice bar.
*/
hideFileWarningNotice: boolean;
/**
* How to display connection error warnings.
* "banner" shows the full banner, "icon" shows only an icon, "hidden" suppresses entirely.
*/
networkWarningStyle: "" | "icon" | "hidden";
/**
* The language to be used for display.
*/
displayLanguage: I18N_LANGS;
}
/**
* Interface representing the settings for mode of exposing advanced things.
*/
interface ModeSettings {
/**
* Indicates whether the advanced mode is enabled.
*/
useAdvancedMode: boolean;
/**
* Indicates whether the power user mode is enabled.
*/
usePowerUserMode: boolean;
/**
* Indicates whether the edge case mode is enabled.
*/
useEdgeCaseMode: boolean;
}
/**
* Interface representing the settings for debug mode.
*/
interface DebugModeSettings {
/**
* Indicates whether the debug tools of Self-hosted LiveSync are enabled.
*/
enableDebugTools: boolean;
/**
* Indicates whether to write log to the file.
*/
writeLogToTheFile: boolean;
}
/**
* Interface representing additional tweak settings.
*/
interface ExtraTweakSettings {
/**
* The threshold value for notifying about the size of remote storage.
* When the size of the remote storage exceeds this threshold, a notification will be triggered.
*/
notifyThresholdOfRemoteStorageSize: number;
}
/**
* Interface representing the settings for beta tweaks.
*/
interface BetaTweakSettings {
/**
* Indicates whether to disable the WebWorker for generating chunks.
*/
disableWorkerForGeneratingChunks: boolean;
/**
* Indicates whether to process small files in the UI thread.
*/
processSmallFilesInUIThread: boolean;
}
/**
* Interface representing the settings for synchronising settings via file.
*/
interface SettingSyncSettings {
/**
* The file path where the settings is stored.
*/
settingSyncFile: string;
/**
* Indicates whether to write credentials for settings synchronising.
*/
writeCredentialsForSettingSync: boolean;
/**
* Indicates whether to notify all settings synchronising files events.
*/
notifyAllSettingSyncFile: boolean;
}
/**
* Represents settings that are considered obsolete and are not configurable from the UI.
*/
interface ObsoleteSettings {
/**
* Saving delay (in milliseconds).
*/
savingDelay: number;
/**
* Garbage collection delay (in milliseconds). Now, no longer GC is implemented.
*/
gcDelay: number;
/**
* Skip older files on sync. No effect now.
*/
skipOlderFilesOnSync: boolean;
/**
* Use the IndexedDB adapter. Now always true. Should be.
*/
useIndexedDBAdapter: boolean;
}
/**
* Interface representing some data stored in the settings for the plugin.
*/
interface DataOnSettings {
/**
* VersionUp flash message which is shown when some incompatible changes are made during the update.
*/
versionUpFlash: string;
/**
* Setting file version, to migrate the settings.
*/
settingVersion: number;
/**
* Indicates whether the setting of the plug-in is configured once.
*/
isConfigured?: boolean;
/**
* The user-last-read version number.
*/
lastReadUpdates: number;
/**
* The last checked version by the doctor.
*/
doctorProcessedVersion: string;
}
/**
* Interface representing the settings for a safety valve mechanism.
*/
interface SafetyValveSettings {
/**
* Indicates whether file watching should be suspended.
*/
suspendFileWatching: boolean;
/**
* Indicates whether parsing and reflecting of replication results should be suspended.
*/
suspendParseReplicationResult: boolean;
/**
* Indicates whether suspension should be avoided during fetching operations.
*/
doNotSuspendOnFetching: boolean;
/**
* Maximum file modification time applied to reflected file events
*/
maxMTimeForReflectEvents: number;
}
/**
* Represents the settings required to synchronise with a bucket.
*/
export interface BucketSyncSetting {
/**
* The access key to use when connecting to the bucket.
*/
accessKey: string;
/**
* The secret to use when connecting to the bucket.
*/
secretKey: string;
/**
* The name of bucket to use.
*/
bucket: string;
/**
* The region of the bucket.
*/
region: string;
/**
* The endpoint of the bucket.
*/
endpoint: string;
/**
* Indicates whether to use a custom request handler.
* (This is for CORS issue).
*/
useCustomRequestHandler: boolean;
bucketCustomHeaders: string;
/**
* The prefix to use for the bucket (e.g., "my-bucket/", means mostly like a folder).
*/
bucketPrefix: string;
/**
* Indicates whether to force path style access.
*/
forcePathStyle: boolean;
}
export interface LocalDBSettings {
/**
* Indicates whether to use the IndexedDB adapter for the local database.
* @deprecated
*/
useIndexedDBAdapter: boolean;
}
export type RemoteType = (typeof RemoteTypes)[keyof typeof RemoteTypes];
export declare enum AutoAccepting {
NONE = 0,
ALL = 1
}
export interface P2PConnectionInfo {
/**
* Indicates whether P2P connection is enabled.
*/
P2P_Enabled: boolean;
/**
* Nostr relay server URL. (Comma separated list)
* This is only for the channelling server to establish for the P2P connection.
* No data is transferred through this server.
*/
P2P_relays: string;
/**
* The room ID for `your devices`. This should be unique among the users.
* (Or, lines will be got mixed up).
*/
P2P_roomID: string;
/**
* The passphrase for your devices.
* It can be empty, but it will help you if you have a duplicate Room ID.
*/
P2P_passphrase: string;
/**
* The Application ID for the P2P connection.
* This is used to identify the application using the P2P network.
* In Self-hosted LiveSync, fixed to "self-hosted-livesync".
*/
P2P_AppID: string;
/**
* Indicates whether to auto-start the P2P connection on launch.
*/
P2P_AutoStart: boolean;
/**
* Indicates whether to automatically broadcast changes to connected peers.
*/
P2P_AutoBroadcast: boolean;
/**
* The name of the device peer (This only for editing-setting purpose, not saved in the actual setting file, due to avoid setting-sync issues).
*/
P2P_DevicePeerName?: string;
/**
* The TURN server URLs for the P2P connection. (Comma separated list)
*/
P2P_turnServers: string;
/**
* The TURN username for the P2P connection.
*/
P2P_turnUsername: string;
/**
* The TURN credential (password, secret, etc...) for the P2P connection.
*/
P2P_turnCredential: string;
/**
* Use Diagnostic Wrapper for RTCPeerConnection to collect statistics.
*/
P2P_useDiagRTC?: boolean;
}
export interface P2PSyncSetting extends P2PConnectionInfo {
P2P_AutoAccepting: AutoAccepting;
P2P_AutoSyncPeers: string;
P2P_AutoWatchPeers: string;
P2P_SyncOnReplication: string;
P2P_RebuildFrom: string;
P2P_AutoAcceptingPeers: string;
P2P_AutoDenyingPeers: string;
P2P_IsHeadless?: boolean;
}
/**
* Interface representing the settings for a remote type.
*/
export interface RemoteTypeSettings {
/**
* The type of the remote.
*/
remoteType: RemoteType;
}
export type E2EEAlgorithm = (typeof E2EEAlgorithms)[keyof typeof E2EEAlgorithms] | "";
/**
* Represents the settings used for End-to-End encryption.
*/
export interface EncryptionSettings {
/**
* Indicates whether E2EE is enabled.
*/
encrypt: boolean;
/**
* The passphrase used for E2EE.
*/
passphrase: string;
/**
* Indicates whether path obfuscation is used.
* If not, the path will be stored as it is, as the document ID.
*/
usePathObfuscation: boolean;
/**
* The algorithm used for hashing the passphrase.
* This is used for E2EE.
*/
E2EEAlgorithm: E2EEAlgorithm;
}
export type HashAlgorithm = (typeof HashAlgorithms)[keyof typeof HashAlgorithms];
export type ChunkSplitterVersion = (typeof ChunkAlgorithms)[keyof typeof ChunkAlgorithms] | "";
/**
* Interface representing the settings for chunk processing.
*/
interface ChunkSettings {
/**
* The algorithm used for hashing chunks.
*/
hashAlg: HashAlgorithm;
/**
* The minimum size of a chunk in chars.
*/
minimumChunkSize: number;
/**
* The custom size of a chunk.
* Note: This value used as a coefficient for the normal chunk size.
*/
customChunkSize: number;
/**
* The threshold for considering a line as long.
* (Not respected in v0.24.x).
*/
longLineThreshold: number;
/**
* Flag indicating whether to use a segmenter for chunking.
* @deprecated use chunkSplitterVersion instead.
*/
useSegmenter: boolean;
/**
* Flag indicating whether to enable version 2 of the chunk splitter.
* @deprecated use chunkSplitterVersion instead.
*/
enableChunkSplitterV2: boolean;
/**
* Flag indicating whether to avoid using a fixed revision for chunks.
*/
doNotUseFixedRevisionForChunks: boolean;
/**
* The version of the chunk splitter to use.
*/
chunkSplitterVersion: ChunkSplitterVersion;
}
/**
* Settings for on-demand chunk fetching.
*/
interface OnDemandChunkSettings {
/**
* Indicates whether chunks should be fetch online. (means replication transfers only metadata).
*/
readChunksOnline: boolean;
/**
* Indicates whether to use only local chunks without fetching online.
*/
useOnlyLocalChunk: boolean;
/**
* The number of concurrent chunk reads allowed when fetching online.
*/
concurrencyOfReadChunksOnline: number;
/**
* The minimum interval (in milliseconds) between consecutive online chunk fetching.
*/
minimumIntervalOfReadChunksOnline: number;
}
/**
* Configuration settings for Eden.
*/
interface EdenSettings {
/**
* Indicates whether Eden is enabled.
*/
useEden: boolean;
/**
* The maximum number of chunks allowed in Eden.
*/
maxChunksInEden: number;
/**
* The maximum total length allowed in Eden.
*/
maxTotalLengthInEden: number;
/**
* The maximum age allowed in Eden.
*/
maxAgeInEden: number;
}
/**
* Interface representing obsolete settings for an remote database.
*/
interface ObsoleteRemoteDBSettings {
/**
* Indicates whether to check the integrity of the data on save.
*/
checkIntegrityOnSave: boolean;
/**
* Indicates whether to use history tracking.
* (Now always true)
*/
useHistory: boolean;
/**
* Indicates whether to disable using API of Obsidian.
* (Now always true: Note: Obsidian cannot handle multiple requests at the same time).
*/
disableRequestURI: boolean;
/**
* Indicates whether to send data in bulk chunks.
*/
sendChunksBulk: boolean;
/**
* The maximum size of the bulk chunks to be sent.
*/
sendChunksBulkMaxSize: number;
/**
* Indicates whether to use a dynamic iteration count.
*/
useDynamicIterationCount: boolean;
/**
* Indicates weather to pace the replication processing interval.
* Now (v0.24.x) not be respected.
*/
doNotPaceReplication: boolean;
}
/**
* Interface representing the settings for beta tweaks for the remote database.
*/
interface BetaRemoteDBSettings {
/**
* Indicates whether compression is enabled for the remote database.
*/
enableCompression: boolean;
}
/**
* Interface representing the some data stored on the settings.
*/
interface DataOnRemoteDBSettings {
/**
* VersionUp flash message which is shown when some incompatible changes are made during the update.
*/
versionUpFlash: string;
/**
* Unix timestamp (ms) of the latest tweak update.
* Used to determine which side has newer tweak values.
*/
tweakModified: number | undefined;
}
/**
* Interface representing the settings for replication.
*/
interface ReplicationSetting {
/**
* The maximum number of documents to be processed in a batch.
*/
batch_size: number;
/**
* The maximum number of batches to be processed.
*/
batches_limit: number;
}
/**
* Interface representing the settings for targetting files.
*/
interface FileHandlingSettings {
/**
* The regular expression for files to be synchronised.
*/
syncOnlyRegEx: CustomRegExpSourceList<"|[]|">;
/**
* The regular expression for files to be ignored during synchronisation.
*/
syncIgnoreRegEx: CustomRegExpSourceList<"|[]|">;
}
/**
* Interface representing the settings for processing behaviour.
*/
interface ProcessingBehaviourSettings {
/**
* Hash cache maximum count.
*/
hashCacheMaxCount: number;
/**
* Hash cache maximum amount.
*/
hashCacheMaxAmount: number;
}
/**
* Interface representing the settings for remote database tweaks.
*/
interface RemoteDBTweakSettings {
/**
* Indicates whether to ignore the version check.
*/
ignoreVersionCheck: boolean;
/**
* Indicates whether to ignore and continue syncing even if the configuration-mismatch is detected.
* (Note: Mismatched settings can lead to inappropriate de-duplication, leading to storage wastage and increased traffic).
*/
disableCheckingConfigMismatch: boolean;
/**
* Automatically accepts compatible-but-lossy tweak mismatches.
* If undefined, the feature is not configured yet.
*/
autoAcceptCompatibleTweak: boolean | undefined;
}
/**
* Interface representing the settings for optional and not exposed remote database settings.
*/
interface OptionalAndNotExposedRemoteDBSettings {
/**
* Indicates whether to accept empty passphrase.
* This not meant to `Not be encrypted`, but `Be encrypted with empty passphrase`.
*/
permitEmptyPassphrase: boolean;
}
/**
* Interface representing the settings for cross-platform interoperability.
*/
interface CrossPlatformInteroperabilitySettings {
/**
* Indicates whether to handle filename case sensitively.
*/
handleFilenameCaseSensitive: boolean;
}
/**
* Interface representing the settings for conflict handling.
*/
interface ConflictHandlingSettings {
/**
* Indicates whether to check conflicts only on file open.
*/
checkConflictOnlyOnOpen: boolean;
/**
* Indicates whether to show the merge dialog only on active file.
*/
showMergeDialogOnlyOnActive: boolean;
}
/**
* Settings that define the behavior of the merge process.
*/
interface MergeBehaviourSettings {
/**
* Indicates whether to synchronise after merging.
*/
syncAfterMerge: boolean;
/**
* Determines if conflicts should be resolved by choosing the newer file.
*/
resolveConflictsByNewerFile: boolean;
/**
* Specifies whether to write documents even if there are conflicts.
*/
writeDocumentsIfConflicted: boolean;
/**
* Disables automatic merging of markdown files.
*/
disableMarkdownAutoMerge: boolean;
}
/**
* Configuration settings for handling edge cases in the application.
*/
interface EdgeCaseHandlingSettings {
/**
* An optional suffix to append to the database name after the vault name.
*/
additionalSuffixOfDatabaseName: string | undefined;
/**
* Flag to disable the worker thread for generating chunks.
*/
disableWorkerForGeneratingChunks: boolean;
/**
* Flag to process small files in the UI thread instead of a worker thread.
*/
processSmallFilesInUIThread: boolean;
/**
* Indicates whether to use timeout for PouchDB replication.
*/
useTimeouts: boolean;
}
/**
* Configuration settings for handling deleted files.
*/
interface DeletedFileMetadataSettings {
/**
* Indicates whether to delete metadata of deleted files.
*/
deleteMetadataOfDeletedFiles: boolean;
/**
* The number of days to wait before automatically deleting metadata of deleted files.
*/
automaticallyDeleteMetadataOfDeletedFiles: number;
}
/**
* Represents a single remote configuration.
*/
export interface RemoteConfiguration {
/**
* Unique identifier for this configuration.
*/
id: string;
/**
* Display name for the configuration.
*/
name: string;
/**
* The connection string (URI) for the remote.
* This may be an encrypted string if configPassphraseStore is set.
*/
uri: string;
/**
* Indicates whether this configuration is encrypted.
*/
isEncrypted: boolean;
}
export interface RemoteConfigurations {
/**
* The list of remote configurations.
*/
remoteConfigurations: Record<string, RemoteConfiguration>;
/**
* The ID of the currently active remote configuration.
*/
activeConfigurationId: string;
/**
* The ID of the active remote configuration dedicated for P2P features.
* If empty, P2P features should request explicit selection from the user.
*/
P2P_ActiveRemoteConfigurationId: string;
}
interface ObsidianLiveSyncSettings_PluginSetting extends SyncMethodSettings, UISettings, FileHandlingSettings, MergeBehaviourSettings, EncryptedUserSettings, PeriodicReplicationSettings, InternalFileSettings, PluginSyncSettings, ModeSettings, ExtraTweakSettings, BetaTweakSettings, ObsoleteSettings, DebugModeSettings, SettingSyncSettings, SafetyValveSettings, DataOnSettings, RemoteConfigurations {
}
export type RemoteDBSettings = CouchDBConnection & BucketSyncSetting & RemoteTypeSettings & EncryptionSettings & ChunkSettings & EdenSettings & DataOnRemoteDBSettings & ObsoleteRemoteDBSettings & OnDemandChunkSettings & BetaRemoteDBSettings & ReplicationSetting & RemoteDBTweakSettings & FileHandlingSettings & ProcessingBehaviourSettings & OptionalAndNotExposedRemoteDBSettings & CrossPlatformInteroperabilitySettings & ConflictHandlingSettings & EdgeCaseHandlingSettings & DeletedFileMetadataSettings & P2PSyncSetting & RemoteConfigurations;
export type ObsidianLiveSyncSettings = ObsidianLiveSyncSettings_PluginSetting & RemoteDBSettings & LocalDBSettings;
export interface HasSettings<T extends Partial<ObsidianLiveSyncSettings>> {
settings: T;
}
export {};
@@ -0,0 +1,28 @@
export declare const MAX_DOC_SIZE = 1000;
export declare const MAX_DOC_SIZE_BIN = 102400;
export declare const VER = 12;
export declare const RECENT_MODIFIED_DOCS_QTY = 30;
export declare const LEAF_WAIT_TIMEOUT = 30000;
export declare const LEAF_WAIT_ONLY_REMOTE = 5000;
export declare const LEAF_WAIT_TIMEOUT_SEQUENTIAL_REPLICATOR = 5000;
export declare const REPLICATION_BUSY_TIMEOUT = 3000000;
export declare const SALT_OF_PASSPHRASE = "rHGMPtr6oWw7VSa3W3wpa8fT8U";
export declare const SALT_OF_ID = "a83hrf7f\u0003y7sa8g31";
export declare const SEED_MURMURHASH = 305419896;
export declare const IDPrefixes: {
Obfuscated: string;
Chunk: string;
EncryptedChunk: string;
};
/**
* @deprecated Use `IDPrefixes.Obfuscated` instead.
*/
export declare const PREFIX_OBFUSCATED = "f:";
/**
* @deprecated Use `IDPrefixes.Chunk` instead.
*/
export declare const PREFIX_CHUNK = "h:";
/**
* @deprecated Use `IDPrefixes.EncryptedChunk` instead.
*/
export declare const PREFIX_ENCRYPTED_CHUNK = "h:+";
+5
View File
@@ -0,0 +1,5 @@
export declare const SETTING_KEY_P2P_DEVICE_NAME = "p2p_device_name";
export declare const configURIBase = "obsidian://setuplivesync?settings=";
export declare const configURIBaseQR = "obsidian://setuplivesync?settingsQR=";
export declare const SuffixDatabaseName = "-livesync-v2";
export declare const ExtraSuffixIndexedDB = "-indexeddb";
@@ -0,0 +1,9 @@
export declare const CANCELLED: unique symbol;
export declare const AUTO_MERGED: unique symbol;
export declare const NOT_CONFLICTED: unique symbol;
export declare const MISSING_OR_ERROR: unique symbol;
export declare const LEAVE_TO_SUBSEQUENT: unique symbol;
export declare const TIME_ARGUMENT_INFINITY: unique symbol;
export declare const BASE_IS_NEW: unique symbol;
export declare const TARGET_IS_NEW: unique symbol;
export declare const EVEN: unique symbol;
@@ -0,0 +1,36 @@
import type { ObsidianLiveSyncSettings } from "./setting.type";
export declare const LEVEL_ADVANCED = "ADVANCED";
export declare const LEVEL_POWER_USER = "POWER_USER";
export declare const LEVEL_EDGE_CASE = "EDGE_CASE";
export type ConfigLevel = "" | "ADVANCED" | "POWER_USER" | "EDGE_CASE";
export type ConfigurationItem = {
name: string;
desc?: string;
placeHolder?: string;
status?: "BETA" | "ALPHA" | "EXPERIMENTAL";
obsolete?: boolean;
level?: ConfigLevel;
isHidden?: boolean;
isAdvanced?: boolean;
};
export declare const configurationNames: Partial<Record<keyof ObsidianLiveSyncSettings, ConfigurationItem>>;
/**
* Get human readable Configuration stability
* @param status
* @returns
*/
export declare function statusDisplay(status?: string): string;
/**
* Get human readable configuration name.
* @param key configuration key
* @param alt
* @returns
*/
export declare function confName(key: keyof ObsidianLiveSyncSettings, alt?: string): string;
/**
* Get human readable configuration description.
* @param key configuration key
* @param alt
* @returns
*/
export declare function confDesc(key: keyof ObsidianLiveSyncSettings, alt?: string): string | undefined;
+22
View File
@@ -0,0 +1,22 @@
export declare const DatabaseConnectingStatuses: {
readonly STARTED: "STARTED";
readonly NOT_CONNECTED: "NOT_CONNECTED";
readonly PAUSED: "PAUSED";
readonly CONNECTED: "CONNECTED";
readonly COMPLETED: "COMPLETED";
readonly CLOSED: "CLOSED";
readonly ERRORED: "ERRORED";
readonly JOURNAL_SEND: "JOURNAL_SEND";
readonly JOURNAL_RECEIVE: "JOURNAL_RECEIVE";
};
export type DatabaseConnectingStatus = (typeof DatabaseConnectingStatuses)[keyof typeof DatabaseConnectingStatuses];
export type ReplicationStatics = {
sent: number;
arrived: number;
maxPullSeq: number;
maxPushSeq: number;
lastSyncPullSeq: number;
lastSyncPushSeq: number;
syncStatus: DatabaseConnectingStatus;
};
export declare const DEFAULT_REPLICATION_STATICS: ReplicationStatics;
@@ -0,0 +1,8 @@
import type { TaggedType } from "octagonal-wheels/common/types";
export type { TaggedType };
export type CustomRegExpSource = TaggedType<string, "CustomRegExp">;
export type CustomRegExpSourceList<D extends string = ","> = TaggedType<string, `CustomRegExpList${D}`>;
export type ParsedCustomRegExp = [isInverted: boolean, pattern: string];
export type Prettify<T> = {
[K in keyof T]: T[K];
} & {};
+18
View File
@@ -0,0 +1,18 @@
import { EntryTypes } from "./db.const";
import type { DatabaseEntry, DocumentID } from "./db.type";
export declare const ProtocolVersions: {
readonly UNSET: undefined;
readonly LEGACY: 1;
readonly ADVANCED_E2EE: 2;
};
export type ProtocolVersion = (typeof ProtocolVersions)[keyof typeof ProtocolVersions];
export declare const DOCID_SYNC_PARAMETERS: DocumentID;
export declare const DOCID_JOURNAL_SYNC_PARAMETERS: DocumentID;
export interface SyncParameters extends DatabaseEntry {
_id: typeof DOCID_SYNC_PARAMETERS;
_rev?: string;
type: (typeof EntryTypes)["SYNC_PARAMETERS"];
protocolVersion: ProtocolVersion;
pbkdf2salt: string;
}
export declare const DEFAULT_SYNC_PARAMETERS: SyncParameters;
+190
View File
@@ -0,0 +1,190 @@
import type { ObsidianLiveSyncSettings } from "./setting.type";
export declare const TweakValuesShouldMatchedTemplate: Partial<ObsidianLiveSyncSettings>;
type TweakKeys = keyof TweakValues;
export declare const IncompatibleChanges: TweakKeys[];
export declare const CompatibleButLossyChanges: TweakKeys[];
type IncompatibleRecommendationPatterns<T extends TweakKeys> = {
key: T;
isRecommendation?: boolean;
} & ({
from: TweakValues[T];
to: TweakValues[T];
} | {
from: TweakValues[T];
} | {
to: TweakValues[T];
});
export declare const IncompatibleChangesInSpecificPattern: IncompatibleRecommendationPatterns<TweakKeys>[];
export declare const TweakValuesRecommendedTemplate: Partial<ObsidianLiveSyncSettings>;
export declare const TweakValuesDefault: Partial<ObsidianLiveSyncSettings>;
export declare const TweakValuesTemplate: {
tweakModified: number;
liveSync?: boolean | undefined;
syncOnSave?: boolean | undefined;
syncOnStart?: boolean | undefined;
syncOnFileOpen?: boolean | undefined;
syncOnEditorSave?: boolean | undefined;
syncMinimumInterval?: number | undefined;
showVerboseLog?: boolean | undefined;
lessInformationInLog?: boolean | undefined;
showLongerLogInsideEditor?: boolean | undefined;
showStatusOnEditor?: boolean | undefined;
showStatusOnStatusbar?: boolean | undefined;
showOnlyIconsOnEditor?: boolean | undefined;
hideFileWarningNotice?: boolean | undefined;
networkWarningStyle?: "" | "icon" | "hidden" | undefined;
displayLanguage?: import("../rosetta").I18N_LANGS | undefined;
trashInsteadDelete?: boolean | undefined;
doNotDeleteFolder?: boolean | undefined;
batchSave?: boolean | undefined;
batchSaveMinimumDelay?: number | undefined;
batchSaveMaximumDelay?: number | undefined;
syncMaxSizeInMB?: number | undefined;
useIgnoreFiles?: boolean | undefined;
ignoreFiles?: string | undefined;
processSizeMismatchedFiles?: boolean | undefined;
syncOnlyRegEx?: import("./shared.type.util").CustomRegExpSourceList<"|[]|"> | undefined;
syncIgnoreRegEx?: import("./shared.type.util").CustomRegExpSourceList<"|[]|"> | undefined;
syncAfterMerge?: boolean | undefined;
resolveConflictsByNewerFile?: boolean | undefined;
writeDocumentsIfConflicted?: boolean | undefined;
disableMarkdownAutoMerge?: boolean | undefined;
configPassphraseStore?: import("./setting.type").ConfigPassphraseStore | undefined;
encryptedPassphrase?: string | undefined;
encryptedCouchDBConnection?: string | undefined;
periodicReplication?: boolean | undefined;
periodicReplicationInterval?: number | undefined;
syncInternalFiles?: boolean | undefined;
syncInternalFilesBeforeReplication?: boolean | undefined;
syncInternalFilesInterval?: number | undefined;
syncInternalFilesIgnorePatterns?: import("./shared.type.util").CustomRegExpSourceList<","> | undefined;
syncInternalFilesTargetPatterns?: import("./shared.type.util").CustomRegExpSourceList<","> | undefined;
watchInternalFileChanges?: boolean | undefined;
suppressNotifyHiddenFilesChange?: boolean | undefined;
syncInternalFileOverwritePatterns?: import("./shared.type.util").CustomRegExpSourceList<","> | undefined;
usePluginSync?: boolean | undefined;
usePluginSettings?: boolean | undefined;
showOwnPlugins?: boolean | undefined;
autoSweepPlugins?: boolean | undefined;
autoSweepPluginsPeriodic?: boolean | undefined;
notifyPluginOrSettingUpdated?: boolean | undefined;
deviceAndVaultName?: string | undefined;
usePluginSyncV2?: boolean | undefined;
usePluginEtc?: boolean | undefined;
pluginSyncExtendedSetting?: Record<string, import("./setting.type").PluginSyncSettingEntry> | undefined;
useAdvancedMode?: boolean | undefined;
usePowerUserMode?: boolean | undefined;
useEdgeCaseMode?: boolean | undefined;
notifyThresholdOfRemoteStorageSize?: number | undefined;
disableWorkerForGeneratingChunks?: boolean | undefined;
processSmallFilesInUIThread?: boolean | undefined;
savingDelay?: number | undefined;
gcDelay?: number | undefined;
skipOlderFilesOnSync?: boolean | undefined;
useIndexedDBAdapter?: boolean | undefined;
enableDebugTools?: boolean | undefined;
writeLogToTheFile?: boolean | undefined;
settingSyncFile?: string | undefined;
writeCredentialsForSettingSync?: boolean | undefined;
notifyAllSettingSyncFile?: boolean | undefined;
suspendFileWatching?: boolean | undefined;
suspendParseReplicationResult?: boolean | undefined;
doNotSuspendOnFetching?: boolean | undefined;
maxMTimeForReflectEvents?: number | undefined;
versionUpFlash?: string | undefined;
settingVersion?: number | undefined;
isConfigured?: boolean;
lastReadUpdates?: number | undefined;
doctorProcessedVersion?: string | undefined;
remoteConfigurations?: Record<string, import("./setting.type").RemoteConfiguration> | undefined;
activeConfigurationId?: string | undefined;
P2P_ActiveRemoteConfigurationId?: string | undefined;
couchDB_URI?: string | undefined;
couchDB_USER?: string | undefined;
couchDB_PASSWORD?: string | undefined;
couchDB_DBNAME?: string | undefined;
couchDB_CustomHeaders?: string | undefined;
useJWT?: boolean | undefined;
jwtAlgorithm?: import("./auth.type").JWTAlgorithm | undefined;
jwtKey?: string | undefined;
jwtKid?: string | undefined;
jwtSub?: string | undefined;
jwtExpDuration?: number | undefined;
useRequestAPI?: boolean | undefined;
accessKey?: string | undefined;
secretKey?: string | undefined;
bucket?: string | undefined;
region?: string | undefined;
endpoint?: string | undefined;
useCustomRequestHandler?: boolean | undefined;
bucketCustomHeaders?: string | undefined;
bucketPrefix?: string | undefined;
forcePathStyle?: boolean | undefined;
remoteType?: import("./setting.type").RemoteType | undefined;
encrypt?: boolean | undefined;
passphrase?: string | undefined;
usePathObfuscation?: boolean | undefined;
E2EEAlgorithm?: import("./setting.type").E2EEAlgorithm | undefined;
hashAlg?: import("./setting.type").HashAlgorithm | undefined;
minimumChunkSize?: number | undefined;
customChunkSize?: number | undefined;
longLineThreshold?: number | undefined;
useSegmenter?: boolean | undefined;
enableChunkSplitterV2?: boolean | undefined;
doNotUseFixedRevisionForChunks?: boolean | undefined;
chunkSplitterVersion?: import("./setting.type").ChunkSplitterVersion | undefined;
useEden?: boolean | undefined;
maxChunksInEden?: number | undefined;
maxTotalLengthInEden?: number | undefined;
maxAgeInEden?: number | undefined;
checkIntegrityOnSave?: boolean | undefined;
useHistory?: boolean | undefined;
disableRequestURI?: boolean | undefined;
sendChunksBulk?: boolean | undefined;
sendChunksBulkMaxSize?: number | undefined;
useDynamicIterationCount?: boolean | undefined;
doNotPaceReplication?: boolean | undefined;
readChunksOnline?: boolean | undefined;
useOnlyLocalChunk?: boolean | undefined;
concurrencyOfReadChunksOnline?: number | undefined;
minimumIntervalOfReadChunksOnline?: number | undefined;
enableCompression?: boolean | undefined;
batch_size?: number | undefined;
batches_limit?: number | undefined;
ignoreVersionCheck?: boolean | undefined;
disableCheckingConfigMismatch?: boolean | undefined;
autoAcceptCompatibleTweak?: boolean | undefined;
hashCacheMaxCount?: number | undefined;
hashCacheMaxAmount?: number | undefined;
permitEmptyPassphrase?: boolean | undefined;
handleFilenameCaseSensitive?: boolean | undefined;
checkConflictOnlyOnOpen?: boolean | undefined;
showMergeDialogOnlyOnActive?: boolean | undefined;
additionalSuffixOfDatabaseName?: string | undefined;
useTimeouts?: boolean | undefined;
deleteMetadataOfDeletedFiles?: boolean | undefined;
automaticallyDeleteMetadataOfDeletedFiles?: number | undefined;
P2P_AutoAccepting?: import("./setting.type").AutoAccepting | undefined;
P2P_AutoSyncPeers?: string | undefined;
P2P_AutoWatchPeers?: string | undefined;
P2P_SyncOnReplication?: string | undefined;
P2P_RebuildFrom?: string | undefined;
P2P_AutoAcceptingPeers?: string | undefined;
P2P_AutoDenyingPeers?: string | undefined;
P2P_IsHeadless?: boolean;
P2P_Enabled?: boolean | undefined;
P2P_relays?: string | undefined;
P2P_roomID?: string | undefined;
P2P_passphrase?: string | undefined;
P2P_AppID?: string | undefined;
P2P_AutoStart?: boolean | undefined;
P2P_AutoBroadcast?: boolean | undefined;
P2P_DevicePeerName?: string;
P2P_turnServers?: string | undefined;
P2P_turnUsername?: string | undefined;
P2P_turnCredential?: string | undefined;
P2P_useDiagRTC?: boolean;
};
export type TweakValues = Partial<typeof TweakValuesTemplate>;
export declare const DEVICE_ID_PREFERRED = "PREFERRED";
export {};
+42
View File
@@ -0,0 +1,42 @@
/**
# Rosetta stone
- To localise messages to your language, please write a translation to this file and submit a PR.
- Please order languages in alphabetic order, if you write multiple items.
## Notice to ensure that your favours are not wasted.
If you plan to utilise machine translation engines to contribute translated resources,
please ensure the engine's terms of service are compatible with our project's license.
Your diligence in this matter helps maintain compliance and avoid potential licensing issues.
Thank you for your consideration.
Usually, our projects (Self-hosted LiveSync and its families) are licensed under MIT License.
To see details, please refer to the LICENSES file on each repository.
## How to internationalise untranslated items?
1. Change the message literal to use `$msg`
"Could not parse YAML" -> $msg('anyKey')
2. Create `ls-debug` folder under the `.obsidian` folder of your vault.
3. Run Self-hosted LiveSync in dev mode (npm run dev).
4. You will get the `missing-translation-YYYY-MM-DD.jsonl` under `ls-debug`. Please copy and paste inside `allMessages` and write the translations.
5. Send me the PR!
*/
declare const LANG_DE = "de";
declare const LANG_ES = "es";
declare const LANG_FR = "fr";
declare const LANG_HE = "he";
declare const LANG_JA = "ja";
declare const LANG_RU = "ru";
declare const LANG_ZH = "zh";
declare const LANG_KO = "ko";
declare const LANG_ZH_TW = "zh-tw";
declare const LANG_DEF = "def";
export declare const SUPPORTED_I18N_LANGS: string[];
export type I18N_LANGS = typeof LANG_DEF | typeof LANG_DE | typeof LANG_ES | typeof LANG_FR | typeof LANG_HE | typeof LANG_JA | typeof LANG_KO | typeof LANG_RU | typeof LANG_ZH | typeof LANG_ZH_TW | "";
export type MESSAGE = {
[key in I18N_LANGS]?: string;
};
import { type MessageKeys } from "./messages/combinedMessages.dev";
export declare function expandKeywords<T extends Record<string, U>, U extends Record<string, string>>(message: T, lang: I18N_LANGS, recurseLimit?: number): T;
export type AllMessageKeys = MessageKeys;
export {};
+215
View File
@@ -0,0 +1,215 @@
import type { ConfigurationItem } from "@lib/common/models/shared.definition.configNames";
import type { ObsidianLiveSyncSettings } from "@lib/common/models/setting.type";
type ExtractPropertiesByType<T, U> = {
[K in keyof T as T[K] extends U ? K : never]: T[K] extends U ? K : never;
};
export type FilterStringKeys<T> = keyof ExtractPropertiesByType<T, string | undefined>;
export type FilterBooleanKeys<T> = keyof ExtractPropertiesByType<T, boolean | undefined>;
export type FilterNumberKeys<T> = keyof ExtractPropertiesByType<T, number | undefined>;
import type { FilePath, FilePathWithPrefixLC, FilePathWithPrefix, DocumentID } from "./models/db.type.ts";
export type { FilePath, FilePathWithPrefixLC, FilePathWithPrefix, DocumentID };
/**
* Self-hosted LiveSync settings pane items.
*/
export type OnDialogSettings = {
configPassphrase: string;
preset: "" | "PERIODIC" | "LIVESYNC" | "DISABLE";
syncMode: "ONEVENTS" | "PERIODIC" | "LIVESYNC";
dummy: number;
deviceAndVaultName: string;
};
/**
* Default settings for the OnDialogSettings.
* Not used for the common library, but used for the Obsidian plugin.
*/
export declare const OnDialogSettingsDefault: OnDialogSettings;
export declare const AllSettingDefault: {
configPassphrase: string;
preset: "" | "PERIODIC" | "LIVESYNC" | "DISABLE";
syncMode: "ONEVENTS" | "PERIODIC" | "LIVESYNC";
dummy: number;
deviceAndVaultName: string;
liveSync: boolean;
syncOnSave: boolean;
syncOnStart: boolean;
syncOnFileOpen: boolean;
syncOnEditorSave: boolean;
syncMinimumInterval: number;
showVerboseLog: boolean;
lessInformationInLog: boolean;
showLongerLogInsideEditor: boolean;
showStatusOnEditor: boolean;
showStatusOnStatusbar: boolean;
showOnlyIconsOnEditor: boolean;
hideFileWarningNotice: boolean;
networkWarningStyle: "" | "icon" | "hidden";
displayLanguage: import("./rosetta.ts").I18N_LANGS;
trashInsteadDelete: boolean;
doNotDeleteFolder: boolean;
batchSave: boolean;
batchSaveMinimumDelay: number;
batchSaveMaximumDelay: number;
syncMaxSizeInMB: number;
useIgnoreFiles: boolean;
ignoreFiles: string;
processSizeMismatchedFiles: boolean;
syncOnlyRegEx: import("./types.ts").CustomRegExpSourceList<"|[]|">;
syncIgnoreRegEx: import("./types.ts").CustomRegExpSourceList<"|[]|">;
syncAfterMerge: boolean;
resolveConflictsByNewerFile: boolean;
writeDocumentsIfConflicted: boolean;
disableMarkdownAutoMerge: boolean;
configPassphraseStore: import("@lib/common/models/setting.type").ConfigPassphraseStore;
encryptedPassphrase: string;
encryptedCouchDBConnection: string;
periodicReplication: boolean;
periodicReplicationInterval: number;
syncInternalFiles: boolean;
syncInternalFilesBeforeReplication: boolean;
syncInternalFilesInterval: number;
syncInternalFilesIgnorePatterns: import("./types.ts").CustomRegExpSourceList<",">;
syncInternalFilesTargetPatterns: import("./types.ts").CustomRegExpSourceList<",">;
watchInternalFileChanges: boolean;
suppressNotifyHiddenFilesChange: boolean;
syncInternalFileOverwritePatterns: import("./types.ts").CustomRegExpSourceList<",">;
usePluginSync: boolean;
usePluginSettings: boolean;
showOwnPlugins: boolean;
autoSweepPlugins: boolean;
autoSweepPluginsPeriodic: boolean;
notifyPluginOrSettingUpdated: boolean;
usePluginSyncV2: boolean;
usePluginEtc: boolean;
pluginSyncExtendedSetting: Record<import("@lib/common/models/setting.type").PluginSyncSettingEntry["key"], import("@lib/common/models/setting.type").PluginSyncSettingEntry>;
useAdvancedMode: boolean;
usePowerUserMode: boolean;
useEdgeCaseMode: boolean;
notifyThresholdOfRemoteStorageSize: number;
disableWorkerForGeneratingChunks: boolean;
processSmallFilesInUIThread: boolean;
savingDelay: number;
gcDelay: number;
skipOlderFilesOnSync: boolean;
useIndexedDBAdapter: boolean;
enableDebugTools: boolean;
writeLogToTheFile: boolean;
settingSyncFile: string;
writeCredentialsForSettingSync: boolean;
notifyAllSettingSyncFile: boolean;
suspendFileWatching: boolean;
suspendParseReplicationResult: boolean;
doNotSuspendOnFetching: boolean;
maxMTimeForReflectEvents: number;
versionUpFlash: string;
settingVersion: number;
isConfigured?: boolean;
lastReadUpdates: number;
doctorProcessedVersion: string;
remoteConfigurations: Record<string, import("@lib/common/models/setting.type").RemoteConfiguration>;
activeConfigurationId: string;
P2P_ActiveRemoteConfigurationId: string;
couchDB_URI: string;
couchDB_USER: string;
couchDB_PASSWORD: string;
couchDB_DBNAME: string;
couchDB_CustomHeaders: string;
useJWT: boolean;
jwtAlgorithm: import("./models/auth.type.ts").JWTAlgorithm;
jwtKey: string;
jwtKid: string;
jwtSub: string;
jwtExpDuration: number;
useRequestAPI: boolean;
accessKey: string;
secretKey: string;
bucket: string;
region: string;
endpoint: string;
useCustomRequestHandler: boolean;
bucketCustomHeaders: string;
bucketPrefix: string;
forcePathStyle: boolean;
remoteType: import("@lib/common/models/setting.type").RemoteType;
encrypt: boolean;
passphrase: string;
usePathObfuscation: boolean;
E2EEAlgorithm: import("@lib/common/models/setting.type").E2EEAlgorithm;
hashAlg: import("@lib/common/models/setting.type").HashAlgorithm;
minimumChunkSize: number;
customChunkSize: number;
longLineThreshold: number;
useSegmenter: boolean;
enableChunkSplitterV2: boolean;
doNotUseFixedRevisionForChunks: boolean;
chunkSplitterVersion: import("@lib/common/models/setting.type").ChunkSplitterVersion;
useEden: boolean;
maxChunksInEden: number;
maxTotalLengthInEden: number;
maxAgeInEden: number;
tweakModified: number | undefined;
checkIntegrityOnSave: boolean;
useHistory: boolean;
disableRequestURI: boolean;
sendChunksBulk: boolean;
sendChunksBulkMaxSize: number;
useDynamicIterationCount: boolean;
doNotPaceReplication: boolean;
readChunksOnline: boolean;
useOnlyLocalChunk: boolean;
concurrencyOfReadChunksOnline: number;
minimumIntervalOfReadChunksOnline: number;
enableCompression: boolean;
batch_size: number;
batches_limit: number;
ignoreVersionCheck: boolean;
disableCheckingConfigMismatch: boolean;
autoAcceptCompatibleTweak: boolean | undefined;
hashCacheMaxCount: number;
hashCacheMaxAmount: number;
permitEmptyPassphrase: boolean;
handleFilenameCaseSensitive: boolean;
checkConflictOnlyOnOpen: boolean;
showMergeDialogOnlyOnActive: boolean;
additionalSuffixOfDatabaseName: string | undefined;
useTimeouts: boolean;
deleteMetadataOfDeletedFiles: boolean;
automaticallyDeleteMetadataOfDeletedFiles: number;
P2P_AutoAccepting: import("@lib/common/models/setting.type").AutoAccepting;
P2P_AutoSyncPeers: string;
P2P_AutoWatchPeers: string;
P2P_SyncOnReplication: string;
P2P_RebuildFrom: string;
P2P_AutoAcceptingPeers: string;
P2P_AutoDenyingPeers: string;
P2P_IsHeadless?: boolean;
P2P_Enabled: boolean;
P2P_relays: string;
P2P_roomID: string;
P2P_passphrase: string;
P2P_AppID: string;
P2P_AutoStart: boolean;
P2P_AutoBroadcast: boolean;
P2P_DevicePeerName?: string;
P2P_turnServers: string;
P2P_turnUsername: string;
P2P_turnCredential: string;
P2P_useDiagRTC?: boolean;
};
export type AllSettings = ObsidianLiveSyncSettings & OnDialogSettings;
export type AllStringItemKey = FilterStringKeys<AllSettings>;
export type AllNumericItemKey = FilterNumberKeys<AllSettings>;
export type AllBooleanItemKey = FilterBooleanKeys<AllSettings>;
export type AllSettingItemKey = AllStringItemKey | AllNumericItemKey | AllBooleanItemKey;
export type ValueOf<T extends AllSettingItemKey> = T extends AllStringItemKey ? string : T extends AllNumericItemKey ? number : T extends AllBooleanItemKey ? boolean : AllSettings[T];
export declare const SettingInformation: Partial<Record<keyof AllSettings, ConfigurationItem>>;
export declare function getConfig(key: AllSettingItemKey): false | {
name: string;
desc?: string;
placeHolder?: string;
status?: "BETA" | "ALPHA" | "EXPERIMENTAL";
obsolete?: boolean;
level?: import("@lib/common/models/shared.definition.configNames").ConfigLevel;
isHidden?: boolean;
isAdvanced?: boolean;
};
export declare function getConfName(key: AllSettingItemKey): string;
+17
View File
@@ -0,0 +1,17 @@
import type { DocumentID, FilePath, FilePathWithPrefix } from "./models/db.type";
import type { UXFileInfoStub } from "@lib/common/models/fileaccess.type";
/**
* returns is internal chunk of file
* @param id ID
* @returns
*/
export declare function isInternalMetadata(id: FilePath | FilePathWithPrefix | DocumentID): boolean;
export declare function isInternalFile(file: UXFileInfoStub | string | FilePathWithPrefix): boolean;
export declare function stripInternalMetadataPrefix<T extends FilePath | FilePathWithPrefix | DocumentID>(id: T): T;
export declare function id2InternalMetadataId(id: DocumentID): DocumentID;
export declare function isChunk(str: string): boolean;
export declare function isPluginMetadata(str: string): boolean;
export declare function isCustomisationSyncMetadata(str: string): boolean;
export declare function getPathFromUXFileInfo(file: UXFileInfoStub | string | FilePathWithPrefix): FilePathWithPrefix;
export declare function getStoragePathFromUXFileInfo(file: UXFileInfoStub | string | FilePathWithPrefix): FilePath;
export declare function getDatabasePathFromUXFileInfo(file: UXFileInfoStub | string | FilePathWithPrefix): FilePathWithPrefix;
+107
View File
@@ -0,0 +1,107 @@
export type { TaggedType } from "./models/shared.type.util.ts";
export { LOG_LEVEL_DEBUG, LOG_LEVEL_INFO, LOG_LEVEL_NOTICE, LOG_LEVEL_URGENT, LOG_LEVEL_VERBOSE, } from "octagonal-wheels/common/logger";
export type { LOG_LEVEL } from "octagonal-wheels/common/logger";
import { RESULT_NOT_FOUND, RESULT_TIMED_OUT } from "octagonal-wheels/common/const";
import type { Credential } from "./models/auth.type.ts";
import type { AnyEntry, ChunkVersionRange, DatabaseEntry, EdenChunk, EntryBase, EntryChunkPack, EntryHasPath, EntryLeaf, EntryType, EntryTypeNotes, EntryTypeNotesWithLegacy, EntryVersionInfo, EntryWithEden, InternalFileEntry, LoadedEntry, MetaEntry, NewEntry, NoteEntry, PlainEntry, SavingEntry, SyncInfo } from "./models/db.type.ts";
import { ChunkTypes, EntryTypes, MILESTONE_DOCID, NODEINFO_DOCID, NoteTypes, SYNCINFO_ID, VERSIONING_DOCID } from "./models/db.const.ts";
import { AUTO_MERGED, CANCELLED, LEAVE_TO_SUBSEQUENT, MISSING_OR_ERROR, NOT_CONFLICTED, TIME_ARGUMENT_INFINITY } from "./models/shared.const.symbols.ts";
import { IDPrefixes, LEAF_WAIT_ONLY_REMOTE, LEAF_WAIT_TIMEOUT, LEAF_WAIT_TIMEOUT_SEQUENTIAL_REPLICATOR, MAX_DOC_SIZE, MAX_DOC_SIZE_BIN, PREFIX_CHUNK, PREFIX_ENCRYPTED_CHUNK, PREFIX_OBFUSCATED, RECENT_MODIFIED_DOCS_QTY, REPLICATION_BUSY_TIMEOUT, SALT_OF_ID, SALT_OF_PASSPHRASE, SEED_MURMURHASH, VER } from "./models/shared.const.behabiour.ts";
import { AutoAccepting, type BucketSyncSetting, type ChunkSplitterVersion, type ConfigPassphraseStore, type CouchDBConnection, type E2EEAlgorithm, type EncryptionSettings, type HashAlgorithm, type HasSettings, type LocalDBSettings, type ObsidianLiveSyncSettings, type P2PConnectionInfo, type P2PSyncSetting, type PluginSyncSettingEntry, type RemoteDBSettings, type RemoteType, type RemoteTypeSettings, type SYNC_MODE } from "./models/setting.type.ts";
import { ChunkAlgorithmNames, ChunkAlgorithms, CURRENT_SETTING_VERSION, E2EEAlgorithmNames, E2EEAlgorithms, HashAlgorithms, REMOTE_COUCHDB, REMOTE_MINIO, REMOTE_P2P, RemoteTypes, SETTING_VERSION_INITIAL, SETTING_VERSION_SUPPORT_CASE_INSENSITIVE, MODE_AUTOMATIC, MODE_PAUSED, MODE_SELECTIVE, MODE_SHINY } from "./models/setting.const.ts";
import { PREFERRED_BASE, PREFERRED_JOURNAL_SYNC, PREFERRED_SETTING_CLOUDANT, PREFERRED_SETTING_SELF_HOSTED } from "./models/setting.const.preferred.ts";
import { P2P_DEFAULT_SETTINGS, DEFAULT_SETTINGS } from "./models/setting.const.defaults.ts";
import { KeyIndexOfSettings } from "./models/setting.const.qr.ts";
import type { DeviceInfo, EntryBody, EntryDoc, EntryDocResponse, EntryMilestoneInfo, EntryNodeInfo, NodeData, NodeKey } from "./models/db.definition.ts";
import { isMetaEntry } from "./models/db.definition.ts";
import type { CouchDBCredentials, BasicCredentials, JWTCredentials, JWTHeader, JWTPayload, JWTParams, PreparedJWT } from "./models/auth.type.ts";
import type { CacheData, FileEventArgs, FileEventItem, FileEventType, UXAbstractInfoStub, UXDataWriteOptions, UXFileInfo, UXFileInfoStub, UXFolderInfo, UXInternalFileInfoStub, UXStat } from "./models/fileaccess.type.ts";
import { SETTING_KEY_P2P_DEVICE_NAME, configURIBase, configURIBaseQR, SuffixDatabaseName, ExtraSuffixIndexedDB } from "./models/shared.const.ts";
import { configurationNames, LEVEL_ADVANCED, LEVEL_POWER_USER, LEVEL_EDGE_CASE, type ConfigLevel, type ConfigurationItem, statusDisplay, confName, confDesc } from "./models/shared.definition.configNames.ts";
import type { CustomRegExpSource, CustomRegExpSourceList, ParsedCustomRegExp, Prettify } from "./models/shared.type.util.ts";
import { ProtocolVersions, type ProtocolVersion, DOCID_SYNC_PARAMETERS, DOCID_JOURNAL_SYNC_PARAMETERS, type SyncParameters, DEFAULT_SYNC_PARAMETERS } from "./models/sync.definition.ts";
import { TweakValuesShouldMatchedTemplate, IncompatibleChanges, CompatibleButLossyChanges, IncompatibleChangesInSpecificPattern, TweakValuesRecommendedTemplate, TweakValuesDefault, TweakValuesTemplate, type TweakValues, DEVICE_ID_PREFERRED } from "./models/tweak.definition.ts";
import type { diff_result_leaf, dmp_result, diff_result, DIFF_CHECK_RESULT_AUTO, diff_check_result } from "./models/diff.definition.ts";
import { PREFIXMD_LOGFILE, PREFIXMD_LOGFILE_UC, FlagFilesOriginal, FlagFilesHumanReadable, FLAGMD_REDFLAG, FLAGMD_REDFLAG2, FLAGMD_REDFLAG2_HR, FLAGMD_REDFLAG3, FLAGMD_REDFLAG3_HR } from "./models/redflag.const.ts";
import { DatabaseConnectingStatuses, type DatabaseConnectingStatus } from "./models/shared.definition.ts";
export { RESULT_NOT_FOUND, RESULT_TIMED_OUT };
export type { FilePath, FilePathWithPrefixLC, FilePathWithPrefix, DocumentID } from "./models/db.type.ts";
export { MAX_DOC_SIZE, MAX_DOC_SIZE_BIN, VER, RECENT_MODIFIED_DOCS_QTY, LEAF_WAIT_TIMEOUT, LEAF_WAIT_ONLY_REMOTE, LEAF_WAIT_TIMEOUT_SEQUENTIAL_REPLICATOR, REPLICATION_BUSY_TIMEOUT, CANCELLED, AUTO_MERGED, NOT_CONFLICTED, MISSING_OR_ERROR, LEAVE_TO_SUBSEQUENT, TIME_ARGUMENT_INFINITY, VERSIONING_DOCID, MILESTONE_DOCID, NODEINFO_DOCID, };
export { type CouchDBConnection };
export type { ConfigPassphraseStore };
export { MODE_SELECTIVE, MODE_AUTOMATIC, MODE_PAUSED, MODE_SHINY, type SYNC_MODE };
export { type PluginSyncSettingEntry };
export { SETTING_VERSION_INITIAL, SETTING_VERSION_SUPPORT_CASE_INSENSITIVE, CURRENT_SETTING_VERSION };
export type { BucketSyncSetting, LocalDBSettings };
export { RemoteTypes, REMOTE_COUCHDB, REMOTE_MINIO, REMOTE_P2P, type RemoteType, AutoAccepting };
export type { P2PConnectionInfo, P2PSyncSetting };
export { P2P_DEFAULT_SETTINGS };
export type { RemoteTypeSettings };
export { E2EEAlgorithmNames, E2EEAlgorithms, type E2EEAlgorithm };
export type { EncryptionSettings };
export { HashAlgorithms, type HashAlgorithm, ChunkAlgorithmNames, ChunkAlgorithms, type ChunkSplitterVersion };
export type { RemoteDBSettings };
export type { ObsidianLiveSyncSettings };
export { DEFAULT_SETTINGS };
export { KeyIndexOfSettings };
export { type HasSettings };
export { PREFERRED_BASE, PREFERRED_SETTING_CLOUDANT, PREFERRED_SETTING_SELF_HOSTED, PREFERRED_JOURNAL_SYNC };
export { EntryTypes, NoteTypes, ChunkTypes, type EntryType, type EntryTypeNotes, type EntryTypeNotesWithLegacy, type DatabaseEntry, type EntryBase, type EdenChunk, type EntryWithEden, type NoteEntry, type NewEntry, type PlainEntry, type InternalFileEntry, type AnyEntry, type LoadedEntry, type SavingEntry, type MetaEntry, isMetaEntry, type EntryLeaf, type EntryChunkPack, type EntryVersionInfo, type EntryHasPath, };
export type { ChunkVersionRange };
export { TweakValuesShouldMatchedTemplate };
export { IncompatibleChanges };
export { CompatibleButLossyChanges };
export { IncompatibleChangesInSpecificPattern };
export { TweakValuesRecommendedTemplate };
export { TweakValuesDefault };
export { configurationNames };
export { LEVEL_ADVANCED };
export { LEVEL_POWER_USER };
export { LEVEL_EDGE_CASE };
export type { ConfigLevel };
export type { ConfigurationItem };
export { statusDisplay };
export { confName };
export { confDesc };
export { TweakValuesTemplate };
export type { TweakValues };
export { DEVICE_ID_PREFERRED };
export type { NodeKey };
export type { DeviceInfo };
export type { NodeData };
export type { EntryMilestoneInfo };
export type { EntryNodeInfo };
export type { EntryBody };
export type { EntryDoc };
export type { diff_result_leaf };
export type { dmp_result };
export type { diff_result };
export type { DIFF_CHECK_RESULT_AUTO };
export type { diff_check_result };
export type { Credential };
export type { EntryDocResponse };
export { DatabaseConnectingStatuses };
export type { DatabaseConnectingStatus };
export { PREFIXMD_LOGFILE, PREFIXMD_LOGFILE_UC, FlagFilesOriginal, FlagFilesHumanReadable, FLAGMD_REDFLAG, FLAGMD_REDFLAG2, FLAGMD_REDFLAG2_HR, FLAGMD_REDFLAG3, FLAGMD_REDFLAG3_HR, };
export { SYNCINFO_ID };
export type { SyncInfo };
export { SALT_OF_PASSPHRASE, SALT_OF_ID, SEED_MURMURHASH, IDPrefixes, PREFIX_OBFUSCATED, PREFIX_CHUNK, PREFIX_ENCRYPTED_CHUNK, };
export type { UXStat, UXFileInfo, UXAbstractInfoStub, UXFileInfoStub, UXInternalFileInfoStub, UXFolderInfo, UXDataWriteOptions, CacheData, FileEventType, FileEventArgs, FileEventItem, };
export type { Prettify };
export type { CouchDBCredentials };
export type { BasicCredentials };
export type { JWTCredentials };
export type { JWTHeader };
export type { JWTPayload };
export type { JWTParams };
export type { PreparedJWT };
export type { CustomRegExpSource };
export type { CustomRegExpSourceList };
export type { ParsedCustomRegExp };
export { ProtocolVersions };
export type { ProtocolVersion };
export { DOCID_SYNC_PARAMETERS };
export { DOCID_JOURNAL_SYNC_PARAMETERS };
export type { SyncParameters };
export { DEFAULT_SYNC_PARAMETERS };
export { SETTING_KEY_P2P_DEVICE_NAME, configURIBase, configURIBaseQR, SuffixDatabaseName, ExtraSuffixIndexedDB };
+10
View File
@@ -0,0 +1,10 @@
export declare function resolveWithIgnoreKnownError<T>(p: Promise<T>, def: T): Promise<T>;
export declare const Parallels: (ps?: Set<Promise<unknown>>) => {
add: (p: Promise<unknown>) => Set<Promise<unknown>>;
wait: (limit: number) => false | Promise<unknown>;
all: () => Promise<unknown[]>;
};
export declare function allSettledWithConcurrencyLimit<T>(processes: Promise<T>[], limit: number): Promise<void>;
export declare const globalConcurrencyController: import("octagonal-wheels/concurrency/semaphore_v2").SemaphoreObject;
export declare function wrapException<T>(func: () => Promise<Awaited<T>>): Promise<Awaited<T> | Error>;
export declare function wrapByDefault<T, U>(func: () => T, onError: (err: Error) => U): T | U;
+25
View File
@@ -0,0 +1,25 @@
import { replaceAll, replaceAllPairs } from "octagonal-wheels/string";
export { replaceAll, replaceAllPairs };
import { concatUInt8Array } from "octagonal-wheels/binary";
export { concatUInt8Array };
import { delay, fireAndForget } from "octagonal-wheels/promises";
export { delay, fireAndForget };
import { arrayToChunkedArray, unique } from "octagonal-wheels/collection";
export { arrayToChunkedArray, unique };
import { extractObject, isObjectDifferent } from "octagonal-wheels/object";
export { extractObject, isObjectDifferent };
import { sendValue, sendSignal, waitForSignal, waitForValue } from "octagonal-wheels/messagepassing/signal";
export { sendValue, sendSignal, waitForSignal, waitForValue };
import { throttle } from "octagonal-wheels/function";
export { throttle };
import type { SimpleStore } from "octagonal-wheels/databases/SimpleStoreBase";
export type { SimpleStore };
export { sizeToHumanReadable } from "octagonal-wheels/number";
export * from "./utils.concurrency";
export * from "./utils.timer";
export * from "./utils.notations";
export * from "./utils.database";
export * from "./utils.regexp";
export * from "./utils.settings";
export * from "./utils.patch";
export * from "./utils.misc";
+23
View File
@@ -0,0 +1,23 @@
import type { AnyEntry, DatabaseEntry, EntryLeaf, SyncInfo, LoadedEntry, SavingEntry, NewEntry, PlainEntry } from "@lib/common/models/db.type";
import { BASE_IS_NEW, EVEN, TARGET_IS_NEW } from "./models/shared.const.symbols.ts";
export declare function getDocData(doc: string | string[]): string;
export declare function getDocDataAsArray(doc: string | string[]): string[];
export declare function getDocDataAsArrayBuffer(doc: string | string[] | ArrayBuffer): Uint8Array<ArrayBuffer>;
export declare function isTextBlob(blob: Blob): boolean;
export declare function createTextBlob(data: string | string[]): Blob;
export declare function createBinaryBlob(data: Uint8Array<ArrayBuffer> | ArrayBuffer): Blob;
export declare function createBlob(data: string | string[] | Uint8Array<ArrayBuffer> | ArrayBuffer | Blob): Blob;
export declare function isTextDocument(doc: LoadedEntry): boolean;
export declare function readAsBlob(doc: LoadedEntry): Blob;
export declare function readContent(doc: LoadedEntry): string | ArrayBuffer;
export declare function isDocContentSame(docA: string | string[] | Blob | ArrayBuffer, docB: string | string[] | Blob | ArrayBuffer): Promise<boolean>;
export declare function isObfuscatedEntry(doc: DatabaseEntry): doc is AnyEntry;
export declare function isEncryptedChunkEntry(doc: DatabaseEntry): doc is EntryLeaf;
export declare function isSyncInfoEntry(doc: DatabaseEntry): doc is SyncInfo;
export declare function determineTypeFromBlob(data: Blob): "newnote" | "plain";
export declare function determineType(path: string, data: string | string[] | Uint8Array | ArrayBuffer | Blob): "newnote" | "plain";
export declare function isAnyNote(doc: DatabaseEntry): doc is NewEntry | PlainEntry;
export declare function isLoadedEntry(doc: DatabaseEntry): doc is LoadedEntry;
export declare function isDeletedEntry(doc: LoadedEntry): boolean;
export declare function createSavingEntryFromLoadedEntry(doc: LoadedEntry): SavingEntry;
export declare function compareMTime(baseMTime: number, targetMTime: number): typeof BASE_IS_NEW | typeof TARGET_IS_NEW | typeof EVEN;

Some files were not shown because too many files have changed in this diff Show More