mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-06-11 17:00:13 +00:00
Compare commits
906 Commits
0.21.2
...
address_warn_2
| Author | SHA1 | Date | |
|---|---|---|---|
| 1e7c1db1c4 | |||
| 8df9a1b53b | |||
| 32c9f76c93 | |||
| 7e65e5dc68 | |||
| c03fa5213f | |||
| 3b538a143a | |||
| 3c6ec75c00 | |||
| 27e9b68510 | |||
| e4b36602ec | |||
| 36827d4799 | |||
| f596e7dd68 | |||
| b0ac01e52f | |||
| b4077bd1f5 | |||
| 675de883e9 | |||
| 4b8de7c915 | |||
| 4f8a74107c | |||
| 42ed0d8795 | |||
| 54c2b1c6db | |||
| 0856693aac | |||
| 39d78a04ac | |||
| 0b8d73ccd8 | |||
| 5921a71227 | |||
| a40929c9e4 | |||
| 2d8a285201 | |||
| d9903bfe9e | |||
| a6e7dddf7f | |||
| 9a51c78011 | |||
| 7b9c0b011f | |||
| 26a050e6f6 | |||
| 34162f747c | |||
| 9e87ee4da1 | |||
| ba5d4c434b | |||
| 8f44f4c61d | |||
| 23d8a1ecc3 | |||
| a46abcad52 | |||
| 347e1fcee5 | |||
| d85d8bc5e4 | |||
| c493fb6f66 | |||
| cf173caf88 | |||
| a41c7b2f70 | |||
| 3acaa7f269 | |||
| 85787eddb3 | |||
| 8cbb233df7 | |||
| 5922186a0e | |||
| 60f21eb9d2 | |||
| 6b7816d334 | |||
| 369e62ee8d | |||
| 37593bbee6 | |||
| baa51a66a7 | |||
| be979a3bf1 | |||
| 31050c9cb8 | |||
| 1b44ab9f2b | |||
| 3a78c70539 | |||
| 0f08ad435f | |||
| 96abd930b3 | |||
| 4581db45c4 | |||
| 05cab8ec66 | |||
| b005625ef3 | |||
| e5408b4dd7 | |||
| 95a9b1b41c | |||
| 2aa8bc1165 | |||
| f8998d5441 | |||
| 26f5f54f24 | |||
| 99f3aca024 | |||
| 194397dd94 | |||
| afa79d78dc | |||
| 9a9440a768 | |||
| e375860af8 | |||
| b57f34c15b | |||
| b82fd9f04b | |||
| bb77426b7b | |||
| 1bef5fbef3 | |||
| 7d2ba1b0b9 | |||
| ac6b9a4dad | |||
| 225e2c5096 | |||
| 674d68b7d9 | |||
| 0e6dd300ef | |||
| 8171db353a | |||
| 6ab1556880 | |||
| cd2bff5fc7 | |||
| 5a280c7919 | |||
| c6697327d5 | |||
| 7c203a522a | |||
| c80c294d93 | |||
| 3e65ae932d | |||
| f710f03380 | |||
| b887269fc1 | |||
| 56a234e6d7 | |||
| 39014b2294 | |||
| 24e6c110a3 | |||
| f24d110552 | |||
| 7189c1c05a | |||
| 547afe9a86 | |||
| 7b5876037d | |||
| b714c00644 | |||
| fff6df535f | |||
| e14e771bfb | |||
| 1130bbcee8 | |||
| 8841ef4619 | |||
| 45fe0b3682 | |||
| 8d3825abc9 | |||
| c5f9841b85 | |||
| d36d176d99 | |||
| 38b2cf73ed | |||
| 40b15a6950 | |||
| e312bb7640 | |||
| 852c0e6c13 | |||
| 7c1bcf9e9b | |||
| 2b79bed085 | |||
| 6b1e0c4aa8 | |||
| 3c3645eba4 | |||
| 009cc3c87a | |||
| fc5fd4be94 | |||
| 8ed1acf79d | |||
| c518223d21 | |||
| caaff618e9 | |||
| 148aa8505e | |||
| f9a626a858 | |||
| 2f10121d6c | |||
| 1b8747115c | |||
| e739302fb9 | |||
| 8f20d53f55 | |||
| 3ab80190d6 | |||
| 8948bf2803 | |||
| 486fd15c60 | |||
| 5fd85c71ca | |||
| c1f41910c4 | |||
| 3693d6a6b6 | |||
| cc3c992b1d | |||
| df390ac456 | |||
| fd84b0377b | |||
| 340d416b76 | |||
| 3034af8d69 | |||
| da3020bd45 | |||
| ce232c1002 | |||
| 0e13926400 | |||
| fab7ec996a | |||
| 88e22f99c5 | |||
| 83cbabf06f | |||
| 5e8d3b8f02 | |||
| 1167b41340 | |||
| 67da3964e5 | |||
| 45ebc7eb6b | |||
| cc5ead68bc | |||
| 9b9e4f22f3 | |||
| 7823f46053 | |||
| d6d8e548b3 | |||
| 44b1ed7610 | |||
| 5786da5534 | |||
| 042a80dd44 | |||
| ee30f6cd6d | |||
| 977a300808 | |||
| a392ccab6a | |||
| dfdfa5383b | |||
| a08294ab16 | |||
| e8c33a0d6a | |||
| d6bf453a6d | |||
| e80cdc2dae | |||
| 60780678fd | |||
| 273e7a2b63 | |||
| 2572c54744 | |||
| 6a7c987985 | |||
| 6ef866a77c | |||
| eea26dee74 | |||
| ee24fe8c24 | |||
| 9d9364af36 | |||
| 83228e2077 | |||
| a379b5bd78 | |||
| 4ed1749652 | |||
| 9a90256a8a | |||
| f0628a0d2c | |||
| d5e2f57781 | |||
| 02673a1631 | |||
| 91c9746886 | |||
| 75b44b1636 | |||
| f1fe48c1ee | |||
| 437e7c0d9c | |||
| 5ffa7ec7ee | |||
| a1859f5d2e | |||
| 785af8cb8f | |||
| 06e1f4aa4a | |||
| 767f22ce9c | |||
| 6a9bba702c | |||
| de2397dc3f | |||
| daaad9212e | |||
| a6891374a1 | |||
| b1cadf0549 | |||
| 95f40cc954 | |||
| 8deaf123d6 | |||
| 053813bffb | |||
| cc7af03618 | |||
| a130e3700e | |||
| 0549e901b2 | |||
| e9afe06968 | |||
| c45aca4794 | |||
| e2c54aaf43 | |||
| 37715d4c9f | |||
| 106367fa41 | |||
| 538130aa91 | |||
| c9d0357fec | |||
| d05c76da36 | |||
| d2eb6ecbaf | |||
| 25a6fde212 | |||
| e8f8b680ef | |||
| 6c30f2b863 | |||
| 8dda24a689 | |||
| fbbb63906a | |||
| 1e66a7f144 | |||
| df79d81475 | |||
| ad71355859 | |||
| 95dc079fad | |||
| 770d4af4a0 | |||
| 3b311248cb | |||
| 67996f6d0a | |||
| 5772811a45 | |||
| 55529cd71e | |||
| 2e9b8b7b62 | |||
| 4ab2e41d18 | |||
| c0ad8ee15a | |||
| e6ae516493 | |||
| a4d5ef4620 | |||
| 3f7bb047ac | |||
| 5454e1106f | |||
| 0d9397c8b9 | |||
| 429a3ff1fd | |||
| bfff6ea7b8 | |||
| b6b153c0de | |||
| eca6a6e0ba | |||
| ca43d96c46 | |||
| 112e3c8b1d | |||
| d1eb105801 | |||
| d5b93e89cd | |||
| e96fe7cde1 | |||
| 68e0610f1d | |||
| a6be20695a | |||
| 772b6ecf26 | |||
| 81dc7f604b | |||
| a9c87fa52e | |||
| e81f023943 | |||
| 2afe12ad2d | |||
| 4a9d6c1349 | |||
| 279fc8876e | |||
| cc3d30dbcf | |||
| 39e82cc8a1 | |||
| 7a4b76a550 | |||
| f9294446ba | |||
| fa7ef62302 | |||
| 81d8224330 | |||
| cc466a4b3c | |||
| ceebca7de9 | |||
| c2f696d0a4 | |||
| 1aa7c45794 | |||
| faefa80cbd | |||
| 3737eacffd | |||
| 4c0af0b608 | |||
| bb69eb13e7 | |||
| 7c9db6376f | |||
| 4c04e4e676 | |||
| 14ec35b257 | |||
| b609e4973c | |||
| 354f0be9a3 | |||
| 16804ed34c | |||
| 31bd270869 | |||
| b5d054f259 | |||
| 1ef2955d00 | |||
| 6ef56063b3 | |||
| a912585800 | |||
| 7a863625bc | |||
| 99b4037820 | |||
| d59b5dc2f9 | |||
| 4d0203e4ca | |||
| 3e4db571cd | |||
| b0a9bd84d6 | |||
| 8c4e62e7c1 | |||
| 3e03d1dbd5 | |||
| 0dbf4cface | |||
| bc22d61a3a | |||
| d709bcc1d0 | |||
| d7088be8af | |||
| f17f1ecd93 | |||
| bf556bd9f4 | |||
| 8b40969fa3 | |||
| 6cce931a88 | |||
| 216861f2c3 | |||
| 6ce724afb4 | |||
| 2e3e106fb2 | |||
| 00f2606a2f | |||
| 3c94a44285 | |||
| 4c0908acde | |||
| cda27fb7f8 | |||
| 837a828cec | |||
| 4c8e13ccb9 | |||
| 1ae4eaab02 | |||
| b1efbf74c7 | |||
| 12f04f6cf7 | |||
| a937feed3f | |||
| 2de9899a99 | |||
| a0af6201a5 | |||
| 9c7c6c8859 | |||
| 38d7cae1bc | |||
| fee34f0dcb | |||
| e01f7f4d92 | |||
| 985004bc0e | |||
| 967a78d657 | |||
| 2ff60dd5ac | |||
| c3341da242 | |||
| c2bfaeb5a9 | |||
| c454616e1c | |||
| c88e73b7d3 | |||
| 3a29818612 | |||
| ee69085830 | |||
| 3963f7c971 | |||
| 602fcef949 | |||
| 075d260fdd | |||
| 0717093d81 | |||
| 1f87a9fd3d | |||
| fdd3a3aecb | |||
| d8281390c4 | |||
| 08b1712f39 | |||
| 6c69547cef | |||
| 89bf0488c3 | |||
| 653cf8dfbe | |||
| 33338506cf | |||
| 9dd479e597 | |||
| 8cad4cdf80 | |||
| beced219c7 | |||
| dfe13b1abd | |||
| bf93bddbdd | |||
| 44890a34e8 | |||
| a14aa201a8 | |||
| 338a9ba9fa | |||
| 0c65b5add9 | |||
| 29ce9a5df4 | |||
| 10f5cb8b42 | |||
| 8aad3716d4 | |||
| d45f41500a | |||
| 4cc0a11d86 | |||
| ad0a6b458f | |||
| 6ae1d5d6a5 | |||
| 84110aee97 | |||
| 4646577f35 | |||
| 822d957976 | |||
| d4aedf59f3 | |||
| 5d80258a77 | |||
| fa14531599 | |||
| 7992b3c2b9 | |||
| 5872cad1e5 | |||
| 16c0dfef4c | |||
| 70c7624c7a | |||
| 4a0d5e99d0 | |||
| 0742773e1e | |||
| 2f8bc4fef2 | |||
| 0dfd42259d | |||
| 9cf630320c | |||
| 584adc9296 | |||
| f7dba6854f | |||
| 1d83e0ee31 | |||
| d0244bd6d0 | |||
| 79bb5e1c77 | |||
| 3403712e24 | |||
| 8faa19629b | |||
| 7ff9c666ce | |||
| d8bc2806e0 | |||
| 62f78b4028 | |||
| cf9d2720ce | |||
| 09115dfe15 | |||
| 4cbb833e9d | |||
| 7419d0d2a1 | |||
| f3e83d4045 | |||
| 28e06a21e4 | |||
| e08fbbd223 | |||
| a1e331d452 | |||
| 646f8af680 | |||
| 392f76fd36 | |||
| f61a3eb85b | |||
| 19c03ec8d8 | |||
| be1642f1c1 | |||
| c9a71e2076 | |||
| 2199c1ebd3 | |||
| 278935f85d | |||
| 010631f553 | |||
| 8c0c65307a | |||
| 988cb34d7c | |||
| 6eec8117f5 | |||
| 9f6a909143 | |||
| 09f283721a | |||
| 235c702223 | |||
| b923b43b6b | |||
| fdcf3be0f9 | |||
| 25dd907591 | |||
| 80c049d276 | |||
| 310496d0b8 | |||
| e961f01187 | |||
| 14b4c3cd50 | |||
| 4f987e7c2b | |||
| f4d8c0a8db | |||
| 556ce471f8 | |||
| 32b6717114 | |||
| e0e72fae72 | |||
| 203dd17421 | |||
| 1bde2b2ff1 | |||
| 2bf1c775ee | |||
| 4658e3735d | |||
| 627edc96bf | |||
| 0a1917e83c | |||
| 48b0d22da6 | |||
| 3201399bdf | |||
| 2ae70e8f07 | |||
| 2b9bb1ed06 | |||
| e63e3e6725 | |||
| 6e9ac6a9f9 | |||
| fb59c4a723 | |||
| 1b5ca9e52c | |||
| 787627a156 | |||
| b1bba7685e | |||
| cdfc0ccead | |||
| 0635cad350 | |||
| 6fd1fa6313 | |||
| 12b1f881dc | |||
| bf3efab1af | |||
| da72fda221 | |||
| 665501f485 | |||
| 6ee332fff8 | |||
| f66447cb59 | |||
| eb3120a8fd | |||
| 5fa39b3c6e | |||
| 91c35a88dd | |||
| 49f4d79f4f | |||
| abfd010467 | |||
| cde1013359 | |||
| 9c7f9e4316 | |||
| aceda16c64 | |||
| 3656e5c725 | |||
| 6915b160a2 | |||
| f464623bf6 | |||
| b1f518071c | |||
| 0e903c3520 | |||
| edcdfd97c4 | |||
| c2b7081215 | |||
| cf1954b10e | |||
| 46546e121f | |||
| 28146eec2c | |||
| 3cd9b9e06d | |||
| 7c43c61b85 | |||
| 465af4f3aa | |||
| 0a1e3dcd51 | |||
| b97756d0cf | |||
| acf4bc3737 | |||
| 88838872e7 | |||
| 7d3827d335 | |||
| 92d3a0cfa2 | |||
| bba26624ad | |||
| b82f497cab | |||
| 37f4d13e75 | |||
| 7965f5342c | |||
| 9cdc14dda8 | |||
| 4f46276ebf | |||
| 931d360fb1 | |||
| f68c1855da | |||
| dff654b6e5 | |||
| 7e85bcbf08 | |||
| 38a695ea12 | |||
| a502b0cd0c | |||
| 934f708753 | |||
| 0e574c6cb1 | |||
| 7375a85b07 | |||
| 4c3393d8b2 | |||
| a9f1bbff9f | |||
| f86815e420 | |||
| fd16b166ef | |||
| 02aa9319c3 | |||
| 1a72e46d53 | |||
| d755579968 | |||
| b74ee9df77 | |||
| daa04bcea8 | |||
| b96b2f24a6 | |||
| 5569ab62df | |||
| d84b6c4f15 | |||
| 336f2c8a4d | |||
| b52ceec36a | |||
| 1e6400cf79 | |||
| 1ff1ac951b | |||
| aa6d771d17 | |||
| 512c238415 | |||
| 55ffeeda10 | |||
| 65f18b4160 | |||
| b0c1d6a1bf | |||
| ca19f2f2ed | |||
| ac0378ca4b | |||
| f06f8d1eb6 | |||
| 77074cb92f | |||
| 1274b6f683 | |||
| c54ae58c0f | |||
| 3f54921e90 | |||
| 1b070c2dd4 | |||
| 0e5846b670 | |||
| f81e71802b | |||
| 4c761eebff | |||
| bf754d6e07 | |||
| 3cc70b985a | |||
| 0e81ec2586 | |||
| 1c49acd5b5 | |||
| bab66a64d7 | |||
| 477913456f | |||
| b0661cdbab | |||
| 18f9a842b7 | |||
| 5130bc5f2a | |||
| ca8af80a27 | |||
| df273d273b | |||
| 23aa0a82ca | |||
| 8f488b205b | |||
| 893eac5c92 | |||
| cd6946bce2 | |||
| 174ca08954 | |||
| 4af4d9c4bd | |||
| 1b7a25598a | |||
| e2a01c14cc | |||
| a623b987c8 | |||
| db28b9ec11 | |||
| b2fbbb38f5 | |||
| 33c01fdf1e | |||
| 536c0426d6 | |||
| 2f848878c2 | |||
| c4f2baef5e | |||
| a5b88a8d47 | |||
| 88e61fb41f | |||
| 9bf04332bb | |||
| 5238dec3f2 | |||
| 2b7b411c52 | |||
| aab0f7f034 | |||
| b3a0deb0e3 | |||
| b9138d1395 | |||
| 04997b84c0 | |||
| 7eb9807aa5 | |||
| 91a4f234f1 | |||
| 82f2860938 | |||
| 41a112cd8a | |||
| 294ebf0c31 | |||
| 5443317157 | |||
| 47fe9d2af3 | |||
| c76187c6d2 | |||
| 4c260a7d2b | |||
| 82f6fefd35 | |||
| ada8001fcb | |||
| b3b3ad843c | |||
| 8b81570035 | |||
| d3e50421e4 | |||
| 12605f4604 | |||
| 2c0dd82886 | |||
| f5315aacb8 | |||
| 5a93066870 | |||
| 3a73073505 | |||
| ee0c0ee611 | |||
| d7ea30e304 | |||
| 2b9ded60f7 | |||
| 40508822cf | |||
| 6f938d5f54 | |||
| 51dc44bfb0 | |||
| 7c4f2bf78a | |||
| d82122de24 | |||
| 67c9b4cf06 | |||
| 4808876968 | |||
| cccff21ecc | |||
| d8415a97e5 | |||
| 85e9aa2978 | |||
| b4eb0e4868 | |||
| 3ea348f468 | |||
| 81362816d6 | |||
| d6efe4510f | |||
| ca5a7ae18c | |||
| a27652ac34 | |||
| 29b89efc47 | |||
| ef3eef2d08 | |||
| ffbbe32e36 | |||
| 0a5371cdee | |||
| 466bb142e2 | |||
| d394a4ce7f | |||
| 71ce76e502 | |||
| ae7a7dd456 | |||
| 4048186bb5 | |||
| 2b94fd9139 | |||
| ec72ece86d | |||
| e394a994c5 | |||
| aa23b6a39a | |||
| 58e328a591 | |||
| 1730c39d70 | |||
| dfeac201a2 | |||
| b42152db5e | |||
| 171cfc0a38 | |||
| d2787bdb6a | |||
| 44b022f003 | |||
| 58845276e7 | |||
| a2cc093a9e | |||
| fec203a751 | |||
| 1a06837769 | |||
| 18d1ce8ec8 | |||
| 2221d8c4e8 | |||
| 08548f8630 | |||
| 5d24c3b984 | |||
| de8fd43c8b | |||
| ed88761eaa | |||
| 4dcb37f5a2 | |||
| db0562eda1 | |||
| b610d5d959 | |||
| 5abba74f3b | |||
| 021c1fccfe | |||
| 0a30af479f | |||
| a9c3f60fe7 | |||
| f996e056af | |||
| 1073ee9e30 | |||
| f94653e60e | |||
| 3dccf2076f | |||
| 3e78fe03e1 | |||
| 4aa8fc3519 | |||
| ba3d2220e1 | |||
| 8057b516af | |||
| f2b4431182 | |||
| badec46d9a | |||
| 355e41f488 | |||
| e0e7e1b5ca | |||
| ce4b61557a | |||
| 52b02f3888 | |||
| 7535999388 | |||
| dccf8580b8 | |||
| e3964f3c5d | |||
| 375e7bde31 | |||
| 341f0ab12d | |||
| 39340c1e1b | |||
| 55cdc58857 | |||
| 4f1a9dc4e8 | |||
| 013818b7d0 | |||
| 1179438df8 | |||
| 47ea8f6859 | |||
| 670fe16486 | |||
| 3f0093916c | |||
| 9503474d06 | |||
| ddf7b243e4 | |||
| f37561c3c1 | |||
| f01429decc | |||
| c0fcb66924 | |||
| 5f76b9809b | |||
| d61d6fec37 | |||
| 9fdd622824 | |||
| 3b8d03a189 | |||
| 1f1a39e5a0 | |||
| d0e92cff7a | |||
| 5addddc792 | |||
| d978892661 | |||
| cfb061a6a2 | |||
| 381055fc93 | |||
| 37d12916fc | |||
| 944aa846c4 | |||
| abca808e29 | |||
| 90bb610133 | |||
| 9c5e9fe63b | |||
| 00dfae24d7 | |||
| d8a41fe45d | |||
| 30467d1c25 | |||
| f8351f1d45 | |||
| 5924af98ab | |||
| 2769b61da4 | |||
| bb4409221d | |||
| f398c14200 | |||
| 27d58508dc | |||
| d4dea5b226 | |||
| c79dc30cba | |||
| b3119ee8a9 | |||
| 2a1d71da5c | |||
| 24f31ed19e | |||
| a982629ae6 | |||
| 85140aecab | |||
| 3f2e23ee88 | |||
| 6049c19e8a | |||
| 65648683a3 | |||
| 5d70f2c1e9 | |||
| cbcfdc453e | |||
| a4eb21593c | |||
| 05eb2c8262 | |||
| fecefa3631 | |||
| f8c4d5ccb0 | |||
| e63e79bc8e | |||
| ed76125f3d | |||
| 70f4e23474 | |||
| f6d5b78cc8 | |||
| 405624b51b | |||
| 90c0ff22b9 | |||
| 67568ea886 | |||
| cc29b4058d | |||
| 4e8243b3d5 | |||
| 4eb1787784 | |||
| 1cd1465f2c | |||
| 45ceca8bb6 | |||
| 7b385aab9e | |||
| 98411e5f48 | |||
| b6687e2fb0 | |||
| 658cbb7ded | |||
| 08a48154fa | |||
| 62501a5940 | |||
| ccb3dd52de | |||
| 3e5f4c8946 | |||
| 54e64c59a9 | |||
| 588840ff8b | |||
| e6b8dfb279 | |||
| 73782c5389 | |||
| f2b667d75e | |||
| 9b1588a65b | |||
| 0629bc04bb | |||
| b0e97e6c96 | |||
| 7f853b0222 | |||
| 3d4ad4a3b4 | |||
| 4b1fff852a | |||
| 08d7d24baf | |||
| 9db3c3df0a | |||
| 672940ad6f | |||
| 2338601fae | |||
| 3e657b38a9 | |||
| 21861d8c51 | |||
| 3bb4aba395 | |||
| 751de5a13e | |||
| 29229f809b | |||
| 2d0dc2a389 | |||
| 6cbe319b80 | |||
| e9fe58f818 | |||
| 61524e1c44 | |||
| c25eaa09c9 | |||
| 71987e6814 | |||
| b15d0710e5 | |||
| 9d304b3233 | |||
| d062b13040 | |||
| 7eceab59af | |||
| ed5cb3e043 | |||
| 574fdf9202 | |||
| 9ec7b809a9 | |||
| 4d302aff9d | |||
| b70009f4a9 | |||
| c24ee32f37 | |||
| 012d0aa4df | |||
| 5c97e5b672 | |||
| 6e1eb36f3b | |||
| 8809aee327 | |||
| fc04c557fc | |||
| 115a0d2d8a | |||
| 2c97289ec8 | |||
| 6d472d17fd | |||
| 3a3aabfd11 | |||
| 8b45dd1d24 | |||
| a2b36ccf31 | |||
| 25e30fa09d | |||
| 8f5bc387b4 | |||
| 5afe24c460 | |||
| 658a09f1cc | |||
| a9020a3aea | |||
| 293c731437 | |||
| 5b4ae37030 | |||
| 9e8d126259 | |||
| 6d244a6e34 | |||
| 1f0ad4eb1e | |||
| e0e0ab0426 | |||
| 5023d6da0b | |||
| 49160c7d57 | |||
| 4434224c29 | |||
| cf3b9e5522 | |||
| 7ca5ac5ac7 | |||
| 095a3d20fb | |||
| 89e23b1bf4 | |||
| 48315d657d | |||
| b73ca73776 | |||
| 48e4d57278 | |||
| 7eae25edd0 | |||
| 3285c1694b | |||
| ede126d7d4 | |||
| f778107727 | |||
| 630889680e | |||
| e46714e0f9 | |||
| 86d5582f37 | |||
| 697ee1855b | |||
| 12d825ea49 | |||
| b8edc85528 | |||
| e2740cbefe | |||
| a96e4e4472 | |||
| dd26bbfe64 | |||
| 6b9bd473cf | |||
| 4be4fa6cc7 | |||
| a9745e850e | |||
| 7b9515a47e | |||
| 220dce51f2 | |||
| a23fc866c0 | |||
| 5c86966d89 | |||
| 29ed4d2b95 | |||
| 16c6c52128 | |||
| 8b94a0b72e | |||
| c5ac76d916 | |||
| b67a6db8a1 | |||
| d4202161e8 | |||
| 2a2b39009c | |||
| bf3a6e7570 | |||
| 069b8513d1 | |||
| 128b1843df | |||
| fd722b1fe5 | |||
| 0bf087dba0 | |||
| 3a4b59b998 | |||
| 8fc9d51c45 | |||
| 35feb5bf93 | |||
| b3a85c5462 | |||
| 7b0ac22c3b | |||
| dca8e4b2a4 | |||
| 89de2dcc37 | |||
| 172b08dbb3 | |||
| d518a3fc1b | |||
| c6ed867498 | |||
| 4f4923e977 | |||
| a5ebf29b3d | |||
| ee465184c8 | |||
| d7d4f1e6f2 | |||
| cbf5023593 | |||
| 3925052f92 | |||
| 1934418258 | |||
| 2ae018b2bd | |||
| 8474497985 | |||
| b5714cc83b | |||
| 133f5a7109 | |||
| daa3feebf1 | |||
| 7b5f7d0fbf | |||
| 29532193cb | |||
| 5b4309c09d | |||
| 16ef582453 | |||
| 3e22f70c7a | |||
| 0a8dbe097e | |||
| 2c0fcf74d0 | |||
| a1ab1efd5d | |||
| c8fcf2d0d5 | |||
| c384e2f7fb | |||
| 99c1c7dc1a | |||
| 84adec4b1a | |||
| f0b202bd91 | |||
| d54b7e2d93 | |||
| 6952ef37f5 | |||
| 9630bcbae8 | |||
| c3f925ab9a | |||
| 034dc0538f | |||
| b6136df836 | |||
| 24aacdc2a1 | |||
| f91109b1ad | |||
| e76e7ae8ea | |||
| f7fbe85d65 | |||
| 0313443b29 | |||
| 755c30f468 | |||
| b00b0cc5e5 | |||
| d7985a6b41 | |||
| 486e816902 | |||
| ef9b19c24b | |||
| 4ed9494176 | |||
| fcd56d59d5 | |||
| 1cabfcfd19 | |||
| 37a18dbfef | |||
| e7edf88713 | |||
| 90ff75ab35 | |||
| bff1d661f5 | |||
| 6b59c14774 | |||
| 8249274eac | |||
| 3c6dae7814 | |||
| 60cf8fe640 | |||
| 3d89b3863f | |||
| ee9364310d | |||
| 86b9695bc2 | |||
| e05f8771b9 | |||
| 65619c2478 | |||
| 1552fa9d9e | |||
| 767f12b52f | |||
| 4071ba120e | |||
| 2c0e3ba01c | |||
| 90adf06830 | |||
| cf8e7ff6ca | |||
| 95c3ff5043 | |||
| 7ea3515801 | |||
| f866981a8a | |||
| 8f36d6f893 | |||
| 6dd86e9392 | |||
| d22716bef0 | |||
| 5d9baec5e4 | |||
| 27d71ca2fb | |||
| c024ed13d3 | |||
| b9527ccab0 | |||
| fa3aa2702c | |||
| 93e7cbb133 | |||
| 716ae32e02 | |||
| d6d8cbcf5a | |||
| efd348b266 | |||
| 8969b1800a | |||
| 2c8e026e29 | |||
| a6c27eab3d | |||
| 9b5c57d540 | |||
| c251c596e8 | |||
| 61188cfaef | |||
| 97d944fd75 | |||
| d3dc1e7328 | |||
| 45304af369 | |||
| 7f422d58f2 | |||
| c2491fdfad | |||
| 06a6e391e8 | |||
| f99475f6b7 | |||
| 109fc00b9d | |||
| c071d822e1 | |||
| d2de5b4710 | |||
| cf5ecd8922 | |||
| 5802ed31be |
@@ -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
|
||||
@@ -1,5 +0,0 @@
|
||||
node_modules
|
||||
build
|
||||
.eslintrc.js.bak
|
||||
src/lib/src/patches/pouchdb-utils
|
||||
esbuild.config.mjs
|
||||
@@ -2,7 +2,9 @@
|
||||
"root": true,
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"plugins": [
|
||||
"@typescript-eslint"
|
||||
"@typescript-eslint",
|
||||
"eslint-plugin-svelte",
|
||||
"eslint-plugin-import"
|
||||
],
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
@@ -15,6 +17,19 @@
|
||||
"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": {
|
||||
"no-unused-vars": "off",
|
||||
"@typescript-eslint/no-unused-vars": [
|
||||
@@ -23,12 +38,22 @@
|
||||
"args": "none"
|
||||
}
|
||||
],
|
||||
"no-unused-labels": "off",
|
||||
"@typescript-eslint/ban-ts-comment": "off",
|
||||
"no-prototype-builtins": "off",
|
||||
"@typescript-eslint/no-empty-function": "off",
|
||||
"require-await": "warn",
|
||||
"no-async-promise-executor": "off",
|
||||
"@typescript-eslint/require-await": "warn",
|
||||
"@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"
|
||||
"@typescript-eslint/no-unnecessary-type-assertion": "error",
|
||||
"no-constant-condition": [
|
||||
"error",
|
||||
{
|
||||
"checkLoops": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
*.sh text eol=lf
|
||||
@@ -2,77 +2,83 @@
|
||||
name: Issue report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
labels: 'uncategorised'
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Thank you for taking the time to report this issue!
|
||||
To improve the process, I would like to ask you to let me know the information in advance.
|
||||
Before filling in this form, please read: [How to report an issue](../docs/to_issue_reporting.md).
|
||||
|
||||
All instructions and examples, and empty entries can be deleted.
|
||||
Just for your information, a [filled example](https://docs.vrtmrz.net/LiveSync/hintandtrivia/Issue+example) is also written.
|
||||
Issues with sufficient information will be prioritised.
|
||||
|
||||
## Abstract
|
||||
The synchronisation hung up immediately after connecting.
|
||||
---
|
||||
|
||||
## Expected behaviour
|
||||
- Synchronisation ends with the message `Replication completed`
|
||||
- Everything synchronised
|
||||
## Required
|
||||
|
||||
## Actually happened
|
||||
- Synchronisation has been cancelled with the message `TypeError ... ` (captured in the attached log, around LL.10-LL.12)
|
||||
- No files synchronised
|
||||
### Abstract
|
||||
<!-- Briefly describe the problem in one or two sentences. -->
|
||||
|
||||
## Reproducing procedure
|
||||
### Expected behaviour
|
||||
<!-- What did you expect to happen? -->
|
||||
|
||||
1. Configure LiveSync as in the attached material.
|
||||
2. Click the replication button on the ribbon.
|
||||
3. Synchronising has begun.
|
||||
4. About two or three seconds later, we got the error `TypeError ... `.
|
||||
5. Replication has been stopped. No files synchronised.
|
||||
### Actually happened
|
||||
<!-- What actually happened? Include any error messages. -->
|
||||
|
||||
Note: If you do not catch the reproducing procedure, please let me know the frequency and signs.
|
||||
|
||||
## Report materials
|
||||
If the information is not available, do not hesitate to report it as it is. You can also of course omit it if you think this is indeed unnecessary. If it is necessary, I will ask you.
|
||||
|
||||
### Report from the LiveSync
|
||||
For more information, please refer to [Making the report](https://docs.vrtmrz.net/LiveSync/hintandtrivia/Making+the+report).
|
||||
<details>
|
||||
<summary>Report from hatch</summary>
|
||||
|
||||
```
|
||||
<!-- paste here -->
|
||||
```
|
||||
</details>
|
||||
### 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>Debug info</summary>
|
||||
<summary>Device 1 (primary)</summary>
|
||||
|
||||
```
|
||||
<!-- paste here -->
|
||||
```
|
||||
</details>
|
||||
|
||||
### Plug-in log
|
||||
We can see the log by tapping the Document box icon. If you noticed something suspicious, please let me know.
|
||||
Note: **Please enable `Verbose Log`**. For detail, refer to [Logging](https://docs.vrtmrz.net/LiveSync/hintandtrivia/Logging), please.
|
||||
|
||||
<details>
|
||||
<summary>Plug-in log</summary>
|
||||
<summary>Device 2 (if applicable)</summary>
|
||||
|
||||
```
|
||||
<!-- paste here -->
|
||||
```
|
||||
</details>
|
||||
|
||||
### Network log
|
||||
Network logs displayed in DevTools will possibly help with connection-related issues. To capture that, please refer to [DevTools](https://docs.vrtmrz.net/LiveSync/hintandtrivia/DevTools).
|
||||
### 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.
|
||||
### Other information, insights and intuition
|
||||
Please provide any additional context or information about the problem.
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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/' }}
|
||||
@@ -9,86 +9,52 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
id-token: write
|
||||
attestations: write
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # otherwise, you will failed to push refs to dest repo
|
||||
submodules: recursive
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v1
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '18.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
|
||||
- name: Get Version
|
||||
id: version
|
||||
run: |
|
||||
echo "::set-output name=tag::$(git describe --abbrev=0 --tags)"
|
||||
echo "tag=$(git describe --abbrev=0 --tags)" >> $GITHUB_OUTPUT
|
||||
# Build the plugin
|
||||
- name: Build
|
||||
id: build
|
||||
run: |
|
||||
npm ci
|
||||
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
|
||||
- name: Package
|
||||
run: |
|
||||
mkdir ${{ 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 }}
|
||||
# Create the release on github
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
VERSION: ${{ github.ref }}
|
||||
- name: Create Release and Upload Assets
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ github.ref }}
|
||||
release_name: ${{ github.ref }}
|
||||
files: |
|
||||
${{ github.event.repository.name }}.zip
|
||||
main.js
|
||||
manifest.json
|
||||
styles.css
|
||||
name: ${{ steps.version.outputs.tag }}
|
||||
tag_name: ${{ steps.version.outputs.tag }}
|
||||
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???
|
||||
|
||||
@@ -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/**
|
||||
+18
@@ -9,8 +9,26 @@ package-lock.json
|
||||
# build
|
||||
main.js
|
||||
main_org.js
|
||||
main_org_*.js
|
||||
*.js.map
|
||||
meta.json
|
||||
meta-*.json
|
||||
|
||||
|
||||
# obsidian
|
||||
data.json
|
||||
.vscode
|
||||
|
||||
# environment variables
|
||||
.env
|
||||
|
||||
# local config files
|
||||
*.local
|
||||
|
||||
cov_profile/**
|
||||
|
||||
coverage
|
||||
src/apps/cli/dist/*
|
||||
_testdata/**
|
||||
utils/bench/splitResults.csv
|
||||
.eslintcache
|
||||
@@ -0,0 +1,2 @@
|
||||
pouchdb-browser.js
|
||||
main_org.js
|
||||
@@ -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;
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -1,95 +1,106 @@
|
||||
# Self-hosted LiveSync
|
||||
|
||||
[Japanese docs](./README_ja.md) - [Chinese docs](./README_cn.md).
|
||||
|
||||
Self-hosted LiveSync is a community-implemented synchronization plugin.
|
||||
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".
|
||||
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.
|
||||
|
||||
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).
|
||||
|
||||

|
||||
|
||||
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
|
||||
- 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.
|
||||
- Bidirectional synchronization between devices nearly in real-time
|
||||
- You can use CouchDB or its compatibles like IBM Cloudant.
|
||||
- End-to-End encryption is 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.)
|
||||
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.
|
||||
|
||||
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 of 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 enable this plugin with another synchronization solution at the same time (including iCloud and 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.
|
||||
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 solution. 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, and thus won't be synchronized. (**and may also get deleted**)
|
||||
### 3-minute setup - CouchDB on fly.io
|
||||
|
||||
## How to use
|
||||
**Recommended for beginners**
|
||||
|
||||
### Get your database ready.
|
||||
[](https://www.youtube.com/watch?v=7sa_I1832Xc)
|
||||
|
||||
First, get your database ready. fly.io is preferred for testing. Or you can use your own server with CouchDB. For more information, refer below:
|
||||
1. [Setup fly.io](docs/setup_flyio.md)
|
||||
2. [Setup IBM Cloudant](docs/setup_cloudant.md)
|
||||
3. [Setup your CouchDB](docs/setup_own_server.md)
|
||||
1. [Set up CouchDB on fly.io](docs/setup_flyio.md)
|
||||
2. Configure plug-in in [Quick Setup](docs/quick_setup.md)
|
||||
|
||||
### Configure the plugin
|
||||
### Manual Setup
|
||||
|
||||
See [Quick setup guide](doccs/../docs/quick_setup.md)
|
||||
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).
|
||||
|
||||
## Something looks corrupted...
|
||||
|
||||
Please open the configuration link again and Answer 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?`
|
||||
## Information in the Status Bar
|
||||
|
||||
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 an existing vault).
|
||||
|
||||
## Information in StatusBar
|
||||
|
||||
Synchronization status is shown in statusbar.
|
||||
Synchronisation status is shown in the status bar with the following icons.
|
||||
|
||||
- Activity Indicator
|
||||
- 📲 Network request
|
||||
- Status
|
||||
- ⏹️ Stopped
|
||||
- 💤 LiveSync enabled. Waiting for changes.
|
||||
- ⚡️ Synchronization in progress.
|
||||
- ⚠ An error occurred.
|
||||
- ↑ Uploaded chunks and metadata
|
||||
- ↓ Downloaded chunks and metadata
|
||||
- ⏳ Number of pending processes
|
||||
- 🧩 Number of files waiting for their chunks.
|
||||
If you have deleted or renamed files, please wait until ⏳ icon disappears.
|
||||
- 💤 LiveSync enabled. Waiting for changes
|
||||
- ⚡️ Synchronisation in progress
|
||||
- ⚠ An error occurred
|
||||
- Statistical Indicators
|
||||
- ↑ Uploaded chunks and metadata
|
||||
- ↓ Downloaded chunks and metadata
|
||||
- Progress Indicators
|
||||
- 📥 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
|
||||
- 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).
|
||||
- LiveSync mode drains more batteries in mobile devices. Periodic sync with some automatic sync is recommended.
|
||||
- Mobile Obsidian can not connect to non-secure (HTTP) or 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.
|
||||
- To stop the boot-up sequence (eg. for fixing problems on databases), you can put a `redflag.md` file (or directory) at the root of your vault.
|
||||
Tip for iOS: a redflag directory can be created at the root of the vault using the File application.
|
||||
- Also, with `redflag2.md` placed, we can automatically rebuild both the local and the remote databases during the boot-up sequence. With `redflag3.md`, we can discard only the local database and fetch from the remote again.
|
||||
- Q: The 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 is 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)
|
||||
## Tips and Troubleshooting
|
||||
- If you want a faster and simpler initial replication when setting up subsequent devices, see the [Fast Setup Guide](docs/tips/fast-setup.md).
|
||||
- If you are having problems getting the plug-in working, see [Tips and Troubleshooting](docs/troubleshooting.md).
|
||||
|
||||
Repo is here: [obsidian-livesync-webclip](https://github.com/vrtmrz/obsidian-livesync-webclip). (Docs are a 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">
|
||||
|
||||
## Troubleshooting
|
||||
If you are having problems getting the plugin working see: [Troubleshooting](docs/troubleshooting.md)
|
||||
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
|
||||
|
||||
The source code is licensed under the MIT License.
|
||||
Licensed under the MIT License.
|
||||
|
||||
+74
-96
@@ -1,9 +1,12 @@
|
||||
# Self-hosted LiveSync
|
||||
|
||||
Self-hosted LiveSync (自搭建在线同步) 是一个社区实现的在线同步插件。
|
||||
使用一个自搭建的或者购买的 CouchDB 作为中转服务器。兼容所有支持 Obsidian 的平台。
|
||||
它利用诸如CouchDB或对象存储系统(例如MinIO、S3、R2等)等强大的服务器解决方案,以确保数据同步的可靠性。。兼容所有支持 Obsidian 的平台。
|
||||
|
||||
注意: 本插件与官方的 "Obsidian Sync" 服务不兼容。
|
||||
此外,它现在支持使用WebRTC进行点对点同步(实验性功能),使您无需依赖服务器即可直接在设备之间同步笔记。
|
||||
|
||||
>[!IMPORTANT]
|
||||
>本插件与官方的 "Obsidian Sync" 服务不兼容。
|
||||
|
||||

|
||||
|
||||
@@ -11,119 +14,94 @@ Self-hosted LiveSync (自搭建在线同步) 是一个社区实现的在线同
|
||||
|
||||
## 功能
|
||||
|
||||
- 可视化的冲突解决器
|
||||
- 接近实时的多设备双向同步
|
||||
- 可使用 CouchDB 以及兼容的服务,如 IBM Cloudant
|
||||
- 支持端到端加密
|
||||
- 插件同步 (Beta)
|
||||
- 从 [obsidian-livesync-webclip](https://chrome.google.com/webstore/detail/obsidian-livesync-webclip/jfpaflmpckblieefkegjncjoceapakdf) 接收 WebClip (本功能不适用端到端加密)
|
||||
- 以最少流量高效同步vault
|
||||
- 有效处理冲突的修改。
|
||||
- 自动合并简单冲突。
|
||||
- 服务端使用开源的解决方案
|
||||
- 支持兼容的解决方案。
|
||||
- 支持端到端加密。
|
||||
- 同步设置、代码片段、主题和插件,通过 [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)。
|
||||
|
||||
适用于出于安全原因需要将笔记完全自托管的研究人员、工程师或开发人员,以及任何喜欢笔记完全私密所带来的安全感的人。
|
||||
此插件适用于出于安全原因需要将笔记完全自托管的研究人员、工程师或开发人员,以及任何喜欢笔记完全私密所带来的安全感的人。
|
||||
|
||||
## 重要提醒
|
||||
|
||||
- 请勿与其他同步解决方案(包括 iCloud、Obsidian Sync)一起使用。在启用此插件之前,请确保禁用所有其他同步方法以避免内容损坏或重复。如果要同步到多个服务,请一一进行,切勿同时启用两种同步方法。
|
||||
这包括不能将您的保管库放在云同步文件夹中(例如 iCloud 文件夹或 Dropbox 文件夹)
|
||||
- 这是一个同步插件,不是备份解决方案。不要依赖它进行备份。
|
||||
- 如果设备的存储空间耗尽,可能会发生数据库损坏。
|
||||
- 隐藏文件或任何其他不可见文件不会保存在数据库中,因此不会被同步。(**并且可能会被删除**)
|
||||
>[!IMPORTANT]
|
||||
> - 在安装或升级此插件之前,请务必备份您的保险库。
|
||||
> - 请勿同时启用此插件与其它同步方案(包括iCloud和Obsidian Sync)。
|
||||
> - 对于备份,我们还提供了一款名为[Differential ZIP Backup](https://github.com/vrtmrz/diffzip)的插件。
|
||||
|
||||
## 如何使用
|
||||
|
||||
### 准备好你的数据库
|
||||
### 3分钟搞定——在fly.io上部署CouchDB
|
||||
|
||||
首先,准备好你的数据库。IBM Cloudant 是用于测试的首选。或者,您也可以在自己的服务器上安装 CouchDB。有关更多信息,请参阅以下内容:
|
||||
1. [Setup IBM Cloudant](docs/setup_cloudant.md)
|
||||
2. [Setup your CouchDB](docs/setup_own_server_cn.md)
|
||||
**推荐初学者第一次使用此方法**
|
||||
[](https://www.youtube.com/watch?v=7sa_I1832Xc)
|
||||
|
||||
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. 在您的设备上安装插件。
|
||||
2. 配置远程数据库信息。
|
||||
1. 将您的服务器信息填写到 `Remote Database configuration`(远程数据库配置)设置页中。
|
||||
2. 建议启用 `End to End Encryption`(端到端加密)。输入密码后,单击“应用”。
|
||||
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`(复制设置链接),并设置密码。这会将您的配置导出到剪贴板,作为您导入其他设备的链接。
|
||||
1. 配置服务器
|
||||
1. [在fly.io上快速搭建CouchDB](docs/setup_flyio.md)
|
||||
2. [自行搭建CouchDB](docs/setup_own_server.md)
|
||||
2. 在[快速设置](docs/quick_setup.md)中配置插件
|
||||
|
||||
**重要: 不要公开本链接,这个链接包含了你的所有认证信息!** (即使没有密码别人读不了)
|
||||
> [!提示]
|
||||
> 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 已启用,正在等待更改。
|
||||
- ⚡️ 同步中。
|
||||
- ⚠ 一个错误出现了。
|
||||
- ↑ 上传的 chunk 和元数据数量
|
||||
- ↓ 下载的 chunk 和元数据数量
|
||||
- ⏳ 等待的过程的数量
|
||||
- 🧩 正在等待 chunk 的文件数量
|
||||
如果你删除或更名了文件,请等待 ⏳ 图标消失。
|
||||
- ⏹️ 已停止
|
||||
- 💤 LiveSync已启用,正在等待更改
|
||||
- ⚡️ 同步中
|
||||
- ⚠ 发生了错误
|
||||
- 统计指标
|
||||
- ↑ 上传的分块与元数据
|
||||
- ↓ 下载的分块与元数据
|
||||
- 进度指示器
|
||||
- 📥 未处理的传输项
|
||||
- 📄 正在进行的数据库操作
|
||||
- 💾 正在进行的写入存储进程
|
||||
- ⏳ 正在进行的读取存储进程
|
||||
- 🛫 待处理的读取存储进程
|
||||
- 📬 批量处理的读取存储进程
|
||||
- ⚙️ 正在进行或待处理的隐藏文件存储进程
|
||||
- 🧩 等待中的分块
|
||||
- 🔌 正在进行的自定义项(配置、代码片段和插件)
|
||||
|
||||
为避免文件和数据库损坏,请等待所有进度指示器尽可能消失后再关闭 Obsidian(插件也会尝试恢复同步进度)。特别是在您已删除或重命名文件的情况下,请务必遵守此操作。
|
||||
|
||||
|
||||
## 提示
|
||||
|
||||
- 如果文件夹在复制后变为空,则默认情况下该文件夹会被删除。您可以关闭此行为。检查 [设置](docs/settings.md)。
|
||||
- LiveSync 模式在移动设备上可能导致耗电量增加。建议使用定期同步 + 条件自动同步。
|
||||
- 移动平台上的 Obsidian 无法连接到非安全 (HTTP) 或本地签名的服务器,即使设备上安装了根证书。
|
||||
- 没有类似“exclude_folders”的配置。
|
||||
- 同步时,文件按修改时间进行比较,较旧的将被较新的文件覆盖。然后插件检查冲突,如果需要合并,将打开一个对话框。
|
||||
- 数据库中的文件在罕见情况下可能会损坏。当接收到的文件看起来已损坏时,插件不会将其写入本地存储。如果您的设备上有文件的本地版本,则可以通过编辑本地文件并进行同步来覆盖损坏的版本。但是,如果您的任何设备上都不存在该文件,则无法挽救该文件。在这种情况下,您可以从设置对话框中删除这些损坏的文件。
|
||||
- 要阻止插件的启动流程(例如,为了修复数据库问题),您可以在 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)
|
||||
## 使用技巧与故障排除
|
||||
如果您在配置插件时遇到问题,请参阅:[Tips and Troubleshooting](docs/troubleshooting.md).
|
||||
|
||||
|
||||
仓库地址:[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 许可协议授权。
|
||||
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
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**
|
||||
|
||||
[](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.
|
||||
+73
-71
@@ -1,84 +1,86 @@
|
||||
<!-- For translation: 20240227r0 -->
|
||||
# Self-hosted LiveSync
|
||||
[英語版ドキュメント](./README.md) - [中国語版ドキュメント](./README_cn.md).
|
||||
|
||||
**旧): obsidian-livesync**
|
||||
Obsidianで利用可能なすべてのプラットフォームで使える、CouchDBをサーバに使用する、コミュニティ版の同期プラグイン
|
||||
|
||||
セルフホストしたデータベースを使って、双方向のライブシンクするObsidianのプラグイン。
|
||||
**公式のSyncとは互換性はありません**
|
||||

|
||||
|
||||
**インストールする前に、Vaultのバックアップを確実に取得してください**
|
||||
※公式のSyncと同期することはできません。
|
||||
|
||||
[英語版](./README.md)
|
||||
|
||||
## こんなことができるプラグインです。
|
||||
- Windows, Mac, iPad, iPhone, Android, Chromebookで動く
|
||||
- セルフホストしたデータベースに同期して
|
||||
- 複数端末で同時にその変更をほぼリアルタイムで配信し
|
||||
- さらに、他の端末での変更も別の端末に配信する、双方向リアルタイムなLiveSyncを実現でき、
|
||||
- 発生した変更の衝突はその場で解決できます。
|
||||
- 同期先のホストにはCouchDBまたはその互換DBaaSのIBM Cloudantをサーバーに使用できます。あなたのデータは、あなたのものです。
|
||||
- もちろんLiveではない同期もできます。
|
||||
- 万が一のために、サーバーに送る内容を暗号化できます(betaです)。
|
||||
- [Webクリッパー](https://chrome.google.com/webstore/detail/obsidian-livesync-webclip/jfpaflmpckblieefkegjncjoceapakdf) もあります(End-to-End暗号化対象外です)
|
||||
## 機能
|
||||
- 高効率・低トラフィックでVault同士を同期
|
||||
- 競合解決がいい感じ
|
||||
- 単純な競合なら自動マージします
|
||||
- OSSソリューションを同期サーバに使用
|
||||
- 互換ソリューションも使用可能です
|
||||
- End-to-End暗号化実装済み
|
||||
- 設定・スニペット・テーマ、プラグインの同期が可能
|
||||
- [Webクリッパー](https://chrome.google.com/webstore/detail/obsidian-livesync-webclip/jfpaflmpckblieefkegjncjoceapakdf) もあります
|
||||
|
||||
NDAや類似の契約や義務、倫理を守る必要のある、研究者、設計者、開発者のような方に特にオススメです。
|
||||
特にエンタープライズでは、たとえEnd to Endの暗号化が行われていても、管理下にあるサーバーにのみデータを格納することが求められる場合があります。
|
||||
|
||||
# 重要なお知らせ
|
||||
|
||||
- ❌ファイルの重複や破損を避けるため、複数の同期手段を同時に使用しないでください。
|
||||
これは、Vaultをクラウド管理下のフォルダに置くことも含みます。(例えば、iCloudの管理フォルダ内に入れたり)。
|
||||
- ⚠️このプラグインは、端末間でのノートの反映を目的として作成されました。バックアップ等が目的ではありません。そのため、バックアップは必ず別のソリューションで行うようにしてください。
|
||||
- ストレージの空き容量が枯渇した場合、データベースが破損することがあります。
|
||||
|
||||
# このプラグインの使い方
|
||||
|
||||
1. Community Pluginsから、Self-holsted LiveSyncと検索しインストールするか、このリポジトリのReleasesから`main.js`, `manifest.json`, `style.css` をダウンロードしvaultの中の`.obsidian/plugins/obsidian-livesync`に入れて、Obsidianを再起動してください。
|
||||
2. サーバーをセットアップします。IBM Cloudantがお手軽かつ堅牢で便利です。完全にセルフホストする際にはお持ちのサーバーにCouchDBをインストールする必要があります。詳しくは下記を参照してください
|
||||
1. [IBM Cloudantのセットアップ](docs/setup_cloudant_ja.md)
|
||||
2. [独自のCouchDBのセットアップ](docs/setup_own_server_ja.md)
|
||||
|
||||
備考: IBM Cloudantのアカウント登録が出来ないケースがあるようです。代替を探していて、今 [using fly.io](https://github.com/vrtmrz/obsidian-livesync/discussions/85)を検討しています。
|
||||
|
||||
1. [Quick setup](docs/quick_setup_ja.md)から、セットアップウィザード使ってセットアップしてください。
|
||||
|
||||
# テストサーバー
|
||||
|
||||
もし、CouchDBをインストールしたり、Cloudantのインスタンスをセットアップしたりするのに気が引ける場合、[Self-hosted LiveSyncのテストサーバー](https://olstaste.vrtmrz.net/)を作りましたので、使ってみてください。
|
||||
|
||||
備考: 制限事項をよく確認して使用してください。くれぐれも、本当に使用している自分の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中で、なにか起こるのを待っています
|
||||
- ⚡️ 同期中です
|
||||
- ⚠ エラーが発生しています
|
||||
- ↑ 送信したデータ数
|
||||
- ↓ 受信したデータ数
|
||||
- ⏳ 保留している処理の数です
|
||||
ファイルを削除したりリネームした場合、この表示が消えるまでお待ちください。
|
||||
|
||||
# さらなる補足
|
||||
- ファイルは同期された後、タイムスタンプを比較して新しければいったん新しい方で上書きされます。その後、衝突が発生したかによって、マージが行われます。
|
||||
- まれにファイルが破損することがあります。破損したファイルに関してはディスクへの反映を試みないため、実際には使用しているデバイスには少し古いファイルが残っていることが多いです。そのファイルを再度更新してもらうと、データベースが更新されて問題なくなるケースがあります。ファイルがどの端末にも存在しない場合は、設定画面から、削除できます。
|
||||
- データベースの復旧中に再起動した場合など、うまくローカルデータベースを修正できない際には、Vaultのトップに`redflag.md`というファイルを置いてください。起動時のシーケンスがスキップされます。
|
||||
- データベースが大きくなってきてるんだけど、小さくできる?→各ノートは、それぞれの古い100リビジョンとともに保存されています。例えば、しばらくオフラインだったあるデバイスが、久しぶりに同期したと想定してみてください。そのとき、そのデバイスは最新とは少し異なるリビジョンを持ってるはずです。その場合でも、リモートのリビジョン履歴にリモートのものが存在した場合、安全にマージできます。もしリビジョン履歴に存在しなかった場合、確認しなければいけない差分も、対象を存在して持っている共通のリビジョン以降のみに絞れます。ちょうどGitのような方法で、衝突を解決している形になるのです。そのため、肥大化したリポジトリの解消と同様に、本質的にデータベースを小さくしたい場合は、データベースの作り直しが必要です。
|
||||
- その他の技術的なお話は、[技術的な内容](docs/tech_info_ja.md)に書いてあります。
|
||||
|
||||
|
||||
# ライセンス
|
||||
>[!IMPORTANT]
|
||||
> - インストール・アップデート前には必ずVaultをバックアップしてください
|
||||
> - 複数の同期ソリューションを同時に有効にしないでください(これはiCloudや公式のSyncも含みます)
|
||||
> - このプラグインは同期プラグインです。バックアップとして使用しないでください
|
||||
|
||||
The source code is licensed MIT.
|
||||
|
||||
## このプラグインの使い方
|
||||
|
||||
### 3分セットアップ - CouchDB on fly.io
|
||||
|
||||
**はじめての方におすすめ**
|
||||
|
||||
[](https://www.youtube.com/watch?v=7sa_I1832Xc)
|
||||
|
||||
1. [Fly.ioにCouchDBをセットアップする](docs/setup_flyio.md)
|
||||
2. [Quick Setup](docs/quick_setup_ja.md)でプラグインを設定する
|
||||
|
||||
|
||||
### Manually Setup
|
||||
|
||||
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.
|
||||
Vendored
+134
@@ -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;
|
||||
};
|
||||
}
|
||||
Vendored
+3
@@ -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>;
|
||||
Vendored
+24
@@ -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
@@ -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
@@ -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>;
|
||||
}
|
||||
Vendored
+36
@@ -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
@@ -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;
|
||||
};
|
||||
}
|
||||
}
|
||||
Vendored
+12
@@ -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;
|
||||
}>;
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
import { PersistentMap } from "octagonal-wheels/dataobject/PersistentMap";
|
||||
export declare let sameChangePairs: PersistentMap<number[]>;
|
||||
export declare function initializeStores(vaultName: string): void;
|
||||
Vendored
+47
@@ -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";
|
||||
Vendored
+61
@@ -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";
|
||||
Vendored
+6
@@ -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
@@ -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 {};
|
||||
@@ -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
@@ -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>;
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
export { DirectFileManipulator } from "./DirectFileManipulatorV2.ts";
|
||||
export type { DirectFileManipulatorOptions } from "./DirectFileManipulatorV2.ts";
|
||||
+41
@@ -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 {};
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,3 @@
|
||||
declare const manifestVersion: string;
|
||||
declare const packageVersion: string;
|
||||
export { manifestVersion, packageVersion };
|
||||
Vendored
+18
@@ -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
@@ -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
@@ -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;
|
||||
};
|
||||
};
|
||||
+1119
File diff suppressed because it is too large
Load Diff
+689
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
};
|
||||
};
|
||||
+1093
File diff suppressed because it is too large
Load Diff
+41
@@ -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
@@ -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")[];
|
||||
@@ -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
@@ -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"];
|
||||
}
|
||||
@@ -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:";
|
||||
@@ -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">;
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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
@@ -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:+";
|
||||
@@ -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;
|
||||
@@ -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];
|
||||
} & {};
|
||||
@@ -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;
|
||||
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
Vendored
+107
@@ -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 };
|
||||
@@ -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;
|
||||
Vendored
+25
@@ -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
@@ -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
Reference in New Issue
Block a user