From 6da982b54c48a7ca0c4c8858ccf8a2be11829e85 Mon Sep 17 00:00:00 2001 From: vorotamoroz Date: Wed, 6 May 2026 21:53:59 +0900 Subject: [PATCH] WIP: Implement a feature that save settings remotely and apply them automatically --- src/LiveSyncBaseCore.ts | 3 ++ src/lib | 2 +- .../SettingDialogue/PaneSyncSettings.ts | 29 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/LiveSyncBaseCore.ts b/src/LiveSyncBaseCore.ts index f9f0427..3820c5f 100644 --- a/src/LiveSyncBaseCore.ts +++ b/src/LiveSyncBaseCore.ts @@ -13,6 +13,7 @@ import type { CheckPointInfo } from "./lib/src/replication/journal/JournalSyncTy import type { LiveSyncJournalReplicatorEnv } from "./lib/src/replication/journal/LiveSyncJournalReplicatorEnv"; import type { LiveSyncReplicatorEnv } from "./lib/src/replication/LiveSyncAbstractReplicator"; import { useTargetFilters } from "./lib/src/serviceFeatures/targetFilter"; +import { useSharedConfigFeature } from "./lib/src/serviceFeatures/sharedConfig"; import { useRemoteConfigurationMigration } from "./lib/src/serviceFeatures/remoteConfig"; import type { ServiceContext } from "./lib/src/services/base/ServiceBase"; import type { InjectableServiceHub } from "./lib/src/services/InjectableServices"; @@ -275,6 +276,8 @@ export class LiveSyncBaseCore< usePrepareDatabaseForUse(this); // Migration to multiple remote configurations useRemoteConfigurationMigration(this); + // Shared Configuration + useSharedConfigFeature(this); } } diff --git a/src/lib b/src/lib index 91b5981..293d3c9 160000 --- a/src/lib +++ b/src/lib @@ -1 +1 @@ -Subproject commit 91b59812191dc8e190658b4110eedd4dca5e1803 +Subproject commit 293d3c9c176ce5f1dfa0f084a154af2aa928f3cd diff --git a/src/modules/features/SettingDialogue/PaneSyncSettings.ts b/src/modules/features/SettingDialogue/PaneSyncSettings.ts index 394c7c1..ed533d9 100644 --- a/src/modules/features/SettingDialogue/PaneSyncSettings.ts +++ b/src/modules/features/SettingDialogue/PaneSyncSettings.ts @@ -8,6 +8,7 @@ import { Logger } from "../../../lib/src/common/logger.ts"; import { $msg } from "../../../lib/src/common/i18n.ts"; import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts"; import { EVENT_REQUEST_COPY_SETUP_URI, eventHub } from "../../../common/events.ts"; +import { triggerEnableAutoConfiguration } from "../../../lib/src/serviceFeatures/sharedConfig.ts"; import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts"; import type { PageFunctions } from "./SettingPane.ts"; import { visibleOnly } from "./SettingPane.ts"; @@ -189,6 +190,34 @@ export function paneSyncSettings( new Setting(paneEl).setClass("wizardHidden").autoWireToggle("syncOnFileOpen", { onUpdate: onlyOnNonLiveSync }); new Setting(paneEl).setClass("wizardHidden").autoWireToggle("syncOnStart", { onUpdate: onlyOnNonLiveSync }); new Setting(paneEl).setClass("wizardHidden").autoWireToggle("syncAfterMerge", { onUpdate: onlyOnNonLiveSync }); + + new Setting(paneEl) + .setClass("wizardHidden") + .setName($msg("obsidianLiveSyncSettingTab.autoConfigByRemote")) + .setDesc($msg("obsidianLiveSyncSettingTab.autoConfigByRemoteDesc")) + .addToggle((toggle) => { + toggle.setValue(this.editingSettings.useAutoConfig); + toggle.onChange(async (val) => { + if (val) { + const enableRes = await triggerEnableAutoConfiguration(this.plugin.core as any); + if (enableRes) { + // Copy settings from service to editingSettings so dialogue is consistent + this.editingSettings.useAutoConfig = true; + const copiedSettings = this.services.setting.settings; + this.editingSettings.hashAlg = copiedSettings.hashAlg; + this.editingSettings.chunkSplitterVersion = copiedSettings.chunkSplitterVersion; + this.editingSettings.enableChunkSplitterV2 = copiedSettings.enableChunkSplitterV2; + this.editingSettings.useSegmenter = copiedSettings.useSegmenter; + this.editingSettings.minimumChunkSize = copiedSettings.minimumChunkSize; + this.editingSettings.customChunkSize = copiedSettings.customChunkSize; + } + } else { + this.editingSettings.useAutoConfig = false; + await this.saveSettings(["liveSync"]); + } + this.display(); // re-render + }); + }); }); void addPanel(