mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-03-10 11:58:48 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0fcb66924 | ||
|
|
5f76b9809b |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "obsidian-livesync",
|
||||
"name": "Self-hosted LiveSync",
|
||||
"version": "0.24.26",
|
||||
"version": "0.24.27",
|
||||
"minAppVersion": "0.9.12",
|
||||
"description": "Community implementation of self-hosted livesync. Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.",
|
||||
"author": "vorotamoroz",
|
||||
|
||||
4052
package-lock.json
generated
4052
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "obsidian-livesync",
|
||||
"version": "0.24.26",
|
||||
"version": "0.24.27",
|
||||
"description": "Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.",
|
||||
"main": "main.js",
|
||||
"type": "module",
|
||||
@@ -81,10 +81,10 @@
|
||||
"fflate": "^0.8.2",
|
||||
"idb": "^8.0.3",
|
||||
"minimatch": "^10.0.1",
|
||||
"octagonal-wheels": "^0.1.25",
|
||||
"octagonal-wheels": "^0.1.30",
|
||||
"qrcode-generator": "^1.4.4",
|
||||
"svelte-check": "^4.1.7",
|
||||
"trystero": "^0.21.3",
|
||||
"trystero": "^0.21.5",
|
||||
"xxhash-wasm-102": "npm:xxhash-wasm@^1.0.2"
|
||||
}
|
||||
}
|
||||
|
||||
2
src/lib
2
src/lib
Submodule src/lib updated: d53cad1c68...68434acfdd
@@ -27,20 +27,28 @@ import {
|
||||
updatePreviousExecutionTime,
|
||||
} from "../../common/utils";
|
||||
import { isAnyNote } from "../../lib/src/common/utils";
|
||||
import { EVENT_FILE_SAVED, eventHub } from "../../common/events";
|
||||
import { EVENT_FILE_SAVED, EVENT_SETTING_SAVED, eventHub } from "../../common/events";
|
||||
import type { LiveSyncAbstractReplicator } from "../../lib/src/replication/LiveSyncAbstractReplicator";
|
||||
import { globalSlipBoard } from "../../lib/src/bureau/bureau";
|
||||
import { $msg } from "../../lib/src/common/i18n";
|
||||
|
||||
const KEY_REPLICATION_ON_EVENT = "replicationOnEvent";
|
||||
const REPLICATION_ON_EVENT_FORECASTED_TIME = 5000;
|
||||
|
||||
export class ModuleReplicator extends AbstractModule implements ICoreModule {
|
||||
_replicatorType?: string;
|
||||
$everyOnloadAfterLoadSettings(): Promise<boolean> {
|
||||
eventHub.onEvent(EVENT_FILE_SAVED, () => {
|
||||
if (this.settings.syncOnSave && !this.core.$$isSuspended()) {
|
||||
scheduleTask("perform-replicate-after-save", 250, () => this.core.$$replicateByEvent());
|
||||
}
|
||||
});
|
||||
eventHub.onEvent(EVENT_SETTING_SAVED, (setting) => {
|
||||
if (this._replicatorType !== setting.remoteType) {
|
||||
void this.setReplicator();
|
||||
}
|
||||
});
|
||||
|
||||
return Promise.resolve(true);
|
||||
}
|
||||
|
||||
@@ -50,7 +58,12 @@ export class ModuleReplicator extends AbstractModule implements ICoreModule {
|
||||
this._log($msg("Replicator.Message.InitialiseFatalError"), LOG_LEVEL_NOTICE);
|
||||
return false;
|
||||
}
|
||||
if (this.core.replicator) {
|
||||
await this.core.replicator.closeReplication();
|
||||
this._log("Replicator closed for changing", LOG_LEVEL_VERBOSE);
|
||||
}
|
||||
this.core.replicator = replicator;
|
||||
this._replicatorType = this.settings.remoteType;
|
||||
await yieldMicrotask();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -138,6 +138,8 @@ export class ModuleObsidianSettings extends AbstractObsidianModule implements IO
|
||||
jwtKid: settings.jwtKid,
|
||||
jwtExpDuration: settings.jwtExpDuration,
|
||||
jwtSub: settings.jwtSub,
|
||||
useRequestAPI: settings.useRequestAPI,
|
||||
bucketPrefix: settings.bucketPrefix,
|
||||
};
|
||||
settings.encryptedCouchDBConnection = await this.encryptConfigurationItem(
|
||||
JSON.stringify(connectionSetting),
|
||||
|
||||
@@ -1475,6 +1475,10 @@ The pane also can be launched by \`P2P Replicator\` command from the Command Pal
|
||||
new Setting(paneEl).autoWireText("region", { holdValue: true });
|
||||
|
||||
new Setting(paneEl).autoWireText("bucket", { holdValue: true });
|
||||
new Setting(paneEl).autoWireText("bucketPrefix", {
|
||||
holdValue: true,
|
||||
placeHolder: "vaultname/",
|
||||
});
|
||||
|
||||
new Setting(paneEl).autoWireToggle("useCustomRequestHandler", { holdValue: true });
|
||||
new Setting(paneEl).autoWireTextArea("bucketCustomHeaders", {
|
||||
@@ -1503,6 +1507,7 @@ The pane also can be launched by \`P2P Replicator\` command from the Command Pal
|
||||
"bucket",
|
||||
"useCustomRequestHandler",
|
||||
"bucketCustomHeaders",
|
||||
"bucketPrefix",
|
||||
])
|
||||
.addOnUpdate(onlyOnMinIO);
|
||||
});
|
||||
@@ -1662,6 +1667,10 @@ The pane also can be launched by \`P2P Replicator\` command from the Command Pal
|
||||
onUpdate: enableOnlySyncDisabled,
|
||||
});
|
||||
new Setting(paneEl).autoWireTextArea("couchDB_CustomHeaders", { holdValue: true });
|
||||
new Setting(paneEl).autoWireToggle("useRequestAPI", {
|
||||
holdValue: true,
|
||||
onUpdate: enableOnlySyncDisabled,
|
||||
});
|
||||
new Setting(paneEl)
|
||||
.setName($msg("obsidianLiveSyncSettingTab.nameTestDatabaseConnection"))
|
||||
.setClass("wizardHidden")
|
||||
@@ -1706,6 +1715,7 @@ The pane also can be launched by \`P2P Replicator\` command from the Command Pal
|
||||
"jwtKid",
|
||||
"useJWT",
|
||||
"couchDB_CustomHeaders",
|
||||
"useRequestAPI",
|
||||
])
|
||||
.addOnUpdate(onlyOnCouchDB);
|
||||
});
|
||||
@@ -3104,9 +3114,9 @@ ${stringifyYaml(pluginConfig)}`;
|
||||
onUpdate: visibleOnly(() => this.isConfiguredAs("disableWorkerForGeneratingChunks", false)),
|
||||
});
|
||||
});
|
||||
void addPanel(paneEl, "Edge case addressing (Networking)").then((paneEl) => {
|
||||
new Setting(paneEl).autoWireToggle("useRequestAPI");
|
||||
});
|
||||
// void addPanel(paneEl, "Edge case addressing (Networking)").then((paneEl) => {
|
||||
// new Setting(paneEl).autoWireToggle("useRequestAPI");
|
||||
// });
|
||||
void addPanel(paneEl, "Compatibility (Trouble addressed)").then((paneEl) => {
|
||||
new Setting(paneEl).autoWireToggle("disableCheckingConfigMismatch");
|
||||
});
|
||||
@@ -3547,6 +3557,7 @@ ${stringifyYaml(pluginConfig)}`;
|
||||
const id = this.plugin.settings.accessKey;
|
||||
const key = this.plugin.settings.secretKey;
|
||||
const bucket = this.plugin.settings.bucket;
|
||||
const prefix = this.plugin.settings.bucketPrefix;
|
||||
const region = this.plugin.settings.region;
|
||||
const endpoint = this.plugin.settings.endpoint;
|
||||
const useCustomRequestHandler = this.plugin.settings.useCustomRequestHandler;
|
||||
@@ -3556,6 +3567,7 @@ ${stringifyYaml(pluginConfig)}`;
|
||||
key,
|
||||
endpoint,
|
||||
bucket,
|
||||
prefix,
|
||||
this.plugin.simpleStore,
|
||||
this.plugin,
|
||||
useCustomRequestHandler,
|
||||
|
||||
@@ -385,6 +385,10 @@ export const SettingInformation: Partial<Record<keyof AllSettings, Configuration
|
||||
name: "Show status icon instead of file warnings banner",
|
||||
desc: "If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.",
|
||||
},
|
||||
bucketPrefix: {
|
||||
name: "File prefix on the bucket",
|
||||
desc: "Effectively a directory. Should end with `/`. e.g., `vault-name/`.",
|
||||
},
|
||||
};
|
||||
function translateInfo(infoSrc: ConfigurationItem | undefined | false) {
|
||||
if (!infoSrc) return false;
|
||||
|
||||
64
updates.md
64
updates.md
@@ -1,3 +1,19 @@
|
||||
## 0.24.27
|
||||
|
||||
### Improved
|
||||
|
||||
- We can use prefix for path for the Bucket synchronisation.
|
||||
- For example, if you set the `vaultName/` as a prefix for the bucket in the root directory, all data will be transferred to the bucket under the `vaultName/` directory.
|
||||
- The "Use Request API to avoid `inevitable` CORS problem" option is now promoted to the normal setting, not a niche patch.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Now switching replicators applied immediately, without the need to restart Obsidian.
|
||||
|
||||
### Tidied up
|
||||
|
||||
- Some dependencies have been updated to the latest version.
|
||||
|
||||
## 0.24.26
|
||||
|
||||
This update introduces an option to circumvent Cross-Origin Resource Sharing
|
||||
@@ -30,18 +46,18 @@ However, just to whisper, this is tremendously fast.
|
||||
|
||||
- Automatic display-language changing according to the Obsidian language
|
||||
setting.
|
||||
- We will be asked on the migration or first startup.
|
||||
- **Note: Please revert to the default language if you report any issues.**
|
||||
- Not all messages are translated yet. We welcome your contribution!
|
||||
- We will be asked on the migration or first startup.
|
||||
- **Note: Please revert to the default language if you report any issues.**
|
||||
- Not all messages are translated yet. We welcome your contribution!
|
||||
- Now we can limit files to be synchronised even in the hidden files.
|
||||
- "Use Request API to avoid `inevitable` CORS problem" has been implemented.
|
||||
- Less secure, please use it only if you are sure that you are in the trusted
|
||||
environment and be able to ignore the CORS. No `Web viewer` or similar tools
|
||||
are recommended. (To avoid the origin forged attack). If you are able to
|
||||
configure the server setting, always that is recommended.
|
||||
- Less secure, please use it only if you are sure that you are in the trusted
|
||||
environment and be able to ignore the CORS. No `Web viewer` or similar tools
|
||||
are recommended. (To avoid the origin forged attack). If you are able to
|
||||
configure the server setting, always that is recommended.
|
||||
- `Show status icon instead of file warnings banner` has been implemented.
|
||||
- If enabled, the ⛔ icon will be shown inside the status instead of the file
|
||||
warnings banner. No details will be shown.
|
||||
- If enabled, the ⛔ icon will be shown inside the status instead of the file
|
||||
warnings banner. No details will be shown.
|
||||
|
||||
### Improved
|
||||
|
||||
@@ -55,7 +71,7 @@ However, just to whisper, this is tremendously fast.
|
||||
- We can purge the remote bucket again if we using MinIO instead of AWS S3 or
|
||||
Cloudflare R2.
|
||||
- Purging the remote bucket is now more reliable.
|
||||
- 100 files are purged at a time.
|
||||
- 100 files are purged at a time.
|
||||
- Some wrong messages have been fixed.
|
||||
|
||||
### Behaviour changed
|
||||
@@ -63,8 +79,8 @@ However, just to whisper, this is tremendously fast.
|
||||
- Entering into the deeper directories to gather the hidden files is now limited
|
||||
by `/` or `\/` prefixed ignore filters. (It means that directories are scanned
|
||||
deeper than before).
|
||||
- However, inside the these directories, the files are still limited by the
|
||||
ignore filters.
|
||||
- However, inside the these directories, the files are still limited by the
|
||||
ignore filters.
|
||||
|
||||
### Etcetera
|
||||
|
||||
@@ -104,25 +120,25 @@ However, just to whisper, this is tremendously fast.
|
||||
|
||||
- Bucket synchronisation has been enhanced for better performance and
|
||||
reliability.
|
||||
- Now less duplicated chunks are sent to the server. Note: If you have
|
||||
encountered about too less chunks, please let me know. However, you can send
|
||||
it to the server by `Overwrite remote`.
|
||||
- Fetching conflicted files from the server is now more reliable.
|
||||
- Dependent libraries have been updated to the latest version.
|
||||
- Also, let me know if you have encountered any issues with this update.
|
||||
Especially you are using a device that has been in use for a little
|
||||
longer.
|
||||
- Now less duplicated chunks are sent to the server. Note: If you have
|
||||
encountered about too less chunks, please let me know. However, you can send
|
||||
it to the server by `Overwrite remote`.
|
||||
- Fetching conflicted files from the server is now more reliable.
|
||||
- Dependent libraries have been updated to the latest version.
|
||||
- Also, let me know if you have encountered any issues with this update.
|
||||
Especially you are using a device that has been in use for a little
|
||||
longer.
|
||||
|
||||
## 0.24.23
|
||||
|
||||
### New Feature
|
||||
|
||||
- Now, we can send custom headers to the server.
|
||||
- They can be sent to either CouchDB or Object Storage.
|
||||
- They can be sent to either CouchDB or Object Storage.
|
||||
- Authentication with JWT in CouchDB is now supported.
|
||||
- I will describe steps later, but please refer to the
|
||||
[CouchDB document](https://docs.couchdb.org/en/stable/config/auth.html#authentication-configuration).
|
||||
- A JWT keypair for testing can be generated in the setting dialogue.
|
||||
- I will describe steps later, but please refer to the
|
||||
[CouchDB document](https://docs.couchdb.org/en/stable/config/auth.html#authentication-configuration).
|
||||
- A JWT keypair for testing can be generated in the setting dialogue.
|
||||
|
||||
### Improved
|
||||
|
||||
|
||||
Reference in New Issue
Block a user