### Fixed

- Fixed a bug that caused wrong event bindings and flag inversion (#727)
  - This caused following issues:
    - In some cases, settings changes were not applied or saved correctly.
    - Automatic synchronisation did not begin correctly.

### Improved
- Too large diffs are not shown in the file comparison view, due to performance reasons.
This commit is contained in:
vorotamoroz
2025-10-15 01:00:24 +09:00
parent ee0c0ee611
commit 3a73073505
6 changed files with 21 additions and 17 deletions

View File

@@ -51,7 +51,7 @@ export class ModuleRebuilder extends AbstractModule implements Rebuilder {
await this.services.setting.suspendExtraSync(); await this.services.setting.suspendExtraSync();
this.core.settings.isConfigured = true; this.core.settings.isConfigured = true;
await this.services.setting.onRealiseSetting(); await this.services.setting.realiseSetting();
await this.services.remote.markLocked(); await this.services.remote.markLocked();
await this.services.remote.tryResetDatabase(); await this.services.remote.tryResetDatabase();
await this.services.remote.markLocked(); await this.services.remote.markLocked();
@@ -70,7 +70,7 @@ export class ModuleRebuilder extends AbstractModule implements Rebuilder {
await this.services.setting.suspendExtraSync(); await this.services.setting.suspendExtraSync();
await this.askUseNewAdapter(); await this.askUseNewAdapter();
this.core.settings.isConfigured = true; this.core.settings.isConfigured = true;
await this.services.setting.onRealiseSetting(); await this.services.setting.realiseSetting();
await this.resetLocalDatabase(); await this.resetLocalDatabase();
await delay(1000); await delay(1000);
await this.services.databaseEvents.initialiseDatabase(true, true, true); await this.services.databaseEvents.initialiseDatabase(true, true, true);
@@ -181,7 +181,7 @@ export class ModuleRebuilder extends AbstractModule implements Rebuilder {
await this.askUseNewAdapter(); await this.askUseNewAdapter();
this.core.settings.isConfigured = true; this.core.settings.isConfigured = true;
await this.suspendReflectingDatabase(); await this.suspendReflectingDatabase();
await this.services.setting.onRealiseSetting(); await this.services.setting.realiseSetting();
await this.resetLocalDatabase(); await this.resetLocalDatabase();
await delay(1000); await delay(1000);
await this.services.database.openDatabase(); await this.services.database.openDatabase();

View File

@@ -15,13 +15,12 @@ export class ModuleReplicatorCouchDB extends AbstractModule {
return Promise.resolve(new LiveSyncCouchDBReplicator(this.core)); return Promise.resolve(new LiveSyncCouchDBReplicator(this.core));
} }
_everyAfterResumeProcess(): Promise<boolean> { _everyAfterResumeProcess(): Promise<boolean> {
if (!this.services.appLifecycle.isSuspended()) return Promise.resolve(true); if (this.services.appLifecycle.isSuspended()) return Promise.resolve(true);
if (!this.services.appLifecycle.isReady()) return Promise.resolve(true); if (!this.services.appLifecycle.isReady()) return Promise.resolve(true);
if (this.settings.remoteType != REMOTE_MINIO && this.settings.remoteType != REMOTE_P2P) { if (this.settings.remoteType != REMOTE_MINIO && this.settings.remoteType != REMOTE_P2P) {
const LiveSyncEnabled = this.settings.liveSync; const LiveSyncEnabled = this.settings.liveSync;
const continuous = LiveSyncEnabled; const continuous = LiveSyncEnabled;
const eventualOnStart = !LiveSyncEnabled && this.settings.syncOnStart; const eventualOnStart = !LiveSyncEnabled && this.settings.syncOnStart;
// If enabled LiveSync or on start, open replication // If enabled LiveSync or on start, open replication
if (LiveSyncEnabled || eventualOnStart) { if (LiveSyncEnabled || eventualOnStart) {
// And note that we do not open the conflict detection dialogue directly during this process. // And note that we do not open the conflict detection dialogue directly during this process.

View File

@@ -59,7 +59,7 @@ export class ModuleObsidianMenu extends AbstractObsidianModule {
this.settings.liveSync = true; this.settings.liveSync = true;
this._log("LiveSync Enabled.", LOG_LEVEL_NOTICE); this._log("LiveSync Enabled.", LOG_LEVEL_NOTICE);
} }
await this.services.setting.onRealiseSetting(); await this.services.setting.realiseSetting();
await this.services.setting.saveSettingData(); await this.services.setting.saveSettingData();
}, },
}); });
@@ -74,7 +74,7 @@ export class ModuleObsidianMenu extends AbstractObsidianModule {
this.services.appLifecycle.setSuspended(true); this.services.appLifecycle.setSuspended(true);
this._log("Self-hosted LiveSync suspended", LOG_LEVEL_NOTICE); this._log("Self-hosted LiveSync suspended", LOG_LEVEL_NOTICE);
} }
await this.services.setting.onRealiseSetting(); await this.services.setting.realiseSetting();
await this.services.setting.saveSettingData(); await this.services.setting.saveSettingData();
}, },
}); });

View File

@@ -85,17 +85,15 @@ export class ConflictResolveModal extends Modal {
} }
} }
diff = diff.replace(/\n/g, "<br>");
div.innerHTML = diff;
const div2 = contentEl.createDiv(""); const div2 = contentEl.createDiv("");
const date1 = const date1 =
new Date(this.result.left.mtime).toLocaleString() + (this.result.left.deleted ? " (Deleted)" : ""); new Date(this.result.left.mtime).toLocaleString() + (this.result.left.deleted ? " (Deleted)" : "");
const date2 = const date2 =
new Date(this.result.right.mtime).toLocaleString() + (this.result.right.deleted ? " (Deleted)" : ""); new Date(this.result.right.mtime).toLocaleString() + (this.result.right.deleted ? " (Deleted)" : "");
div2.innerHTML = ` div2.setHTMLUnsafe(`
<span class='deleted'><span class='conflict-dev-name'>${this.localName}</span>: ${date1}</span><br> <span class='deleted'><span class='conflict-dev-name'>${this.localName}</span>: ${date1}</span><br>
<span class='added'><span class='conflict-dev-name'>${this.remoteName}</span>: ${date2}</span><br> <span class='added'><span class='conflict-dev-name'>${this.remoteName}</span>: ${date2}</span><br>
`; `);
contentEl.createEl("button", { text: `Use ${this.localName}` }, (e) => contentEl.createEl("button", { text: `Use ${this.localName}` }, (e) =>
e.addEventListener("click", () => this.sendResponse(this.result.right.rev)) e.addEventListener("click", () => this.sendResponse(this.result.right.rev))
).style.marginRight = "4px"; ).style.marginRight = "4px";
@@ -110,6 +108,13 @@ export class ConflictResolveModal extends Modal {
contentEl.createEl("button", { text: !this.pluginPickMode ? "Not now" : "Cancel" }, (e) => contentEl.createEl("button", { text: !this.pluginPickMode ? "Not now" : "Cancel" }, (e) =>
e.addEventListener("click", () => this.sendResponse(CANCELLED)) e.addEventListener("click", () => this.sendResponse(CANCELLED))
).style.marginRight = "4px"; ).style.marginRight = "4px";
diff = diff.replace(/\n/g, "<br>");
// div.innerHTML = diff;
if (diff.length > 100 * 1024) {
div.setText("(Too large diff to display)");
} else {
div.setHTMLUnsafe(diff);
}
} }
sendResponse(result: MergeDialogResult) { sendResponse(result: MergeDialogResult) {

View File

@@ -105,7 +105,7 @@ export function paneSyncSettings(
if (!this.editingSettings.isConfigured) { if (!this.editingSettings.isConfigured) {
this.editingSettings.isConfigured = true; this.editingSettings.isConfigured = true;
await this.saveAllDirtySettings(); await this.saveAllDirtySettings();
await this.services.setting.onRealiseSetting(); await this.services.setting.realiseSetting();
await this.rebuildDB("localOnly"); await this.rebuildDB("localOnly");
// this.resetEditingSettings(); // this.resetEditingSettings();
if ( if (
@@ -124,13 +124,13 @@ export function paneSyncSettings(
await this.confirmRebuild(); await this.confirmRebuild();
} else { } else {
await this.saveAllDirtySettings(); await this.saveAllDirtySettings();
await this.services.setting.onRealiseSetting(); await this.services.setting.realiseSetting();
this.services.appLifecycle.askRestart(); this.services.appLifecycle.askRestart();
} }
} }
} else { } else {
await this.saveAllDirtySettings(); await this.saveAllDirtySettings();
await this.services.setting.onRealiseSetting(); await this.services.setting.realiseSetting();
} }
}); });
}); });
@@ -169,7 +169,7 @@ export function paneSyncSettings(
} }
await this.saveSettings(["liveSync", "periodicReplication"]); await this.saveSettings(["liveSync", "periodicReplication"]);
await this.services.setting.onRealiseSetting(); await this.services.setting.realiseSetting();
}); });
new Setting(paneEl) new Setting(paneEl)

View File

@@ -48,7 +48,7 @@ export class ModuleLiveSyncMain extends AbstractModule {
} }
if (!(await this.core.services.appLifecycle.onFirstInitialise())) return false; if (!(await this.core.services.appLifecycle.onFirstInitialise())) return false;
// await this.core.$$realizeSettingSyncMode(); // await this.core.$$realizeSettingSyncMode();
await this.services.setting.onRealiseSetting(); await this.services.setting.realiseSetting();
fireAndForget(async () => { fireAndForget(async () => {
this._log($msg("moduleLiveSyncMain.logAdditionalSafetyScan"), LOG_LEVEL_VERBOSE); this._log($msg("moduleLiveSyncMain.logAdditionalSafetyScan"), LOG_LEVEL_VERBOSE);
if (!(await this.services.appLifecycle.onScanningStartupIssues())) { if (!(await this.services.appLifecycle.onScanningStartupIssues())) {
@@ -67,7 +67,7 @@ export class ModuleLiveSyncMain extends AbstractModule {
eventHub.emitEvent(EVENT_REQUEST_RELOAD_SETTING_TAB); eventHub.emitEvent(EVENT_REQUEST_RELOAD_SETTING_TAB);
}); });
eventHub.onEvent(EVENT_SETTING_SAVED, (settings: ObsidianLiveSyncSettings) => { eventHub.onEvent(EVENT_SETTING_SAVED, (settings: ObsidianLiveSyncSettings) => {
fireAndForget(() => this.core.services.setting.onRealiseSetting()); fireAndForget(() => this.core.services.setting.realiseSetting());
}); });
return Promise.resolve(true); return Promise.resolve(true);
} }