From b33ec08cbfa247cb8f136437ad0764a9339ea323 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Sat, 25 Jul 2026 14:56:37 +0900 Subject: [PATCH] wip --- packages/frontend/src/preferences.ts | 10 ++++++---- packages/frontend/src/preferences/manager.ts | 6 +++++- packages/frontend/src/preferences/utility.ts | 10 ++++++++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/packages/frontend/src/preferences.ts b/packages/frontend/src/preferences.ts index 4f3e36e9ac..b32369aa11 100644 --- a/packages/frontend/src/preferences.ts +++ b/packages/frontend/src/preferences.ts @@ -123,10 +123,12 @@ createVisibilityAwareInterval(() => { }, 1000 * 60 * 3); //#endregion -if (store.s.enablePreferencesAutoCloudSync) { - // TODO: 前回同期してから10分以上経過している場合のみ - cloudSync(); -} +store.loaded.then(() => { + if (store.s.enablePreferencesAutoCloudSync) { + // TODO: 前回同期してから10分以上経過している場合のみ + cloudSync(); + } +}); if (_DEV_) { (window as any).prefer = prefer; diff --git a/packages/frontend/src/preferences/manager.ts b/packages/frontend/src/preferences/manager.ts index 363343d767..ffdc09f5c4 100644 --- a/packages/frontend/src/preferences/manager.ts +++ b/packages/frontend/src/preferences/manager.ts @@ -351,6 +351,8 @@ export class PreferencesManager extends EventEmitter { const cloudValues = await this.io.cloudGetBulk({ needs }); + let modified = false; + for (const _key in PREF_DEF) { const key = _key as keyof PREF; const record = this.getMatchedRecordOf(key); @@ -359,12 +361,14 @@ export class PreferencesManager extends EventEmitter { if (!deepEqual(cloudValue, record[1])) { this.rewriteRawState(key, cloudValue); record[1] = cloudValue; + modified = true; if (_DEV_) console.log('cloud fetched', key, cloudValue); } } } - this.save(); + if (modified) this.save(); + if (_DEV_) console.log('cloud fetch completed'); } diff --git a/packages/frontend/src/preferences/utility.ts b/packages/frontend/src/preferences/utility.ts index e712d46534..c62e0cf13d 100644 --- a/packages/frontend/src/preferences/utility.ts +++ b/packages/frontend/src/preferences/utility.ts @@ -162,11 +162,13 @@ export async function cloudSync() { key: prefer.profile.name, }) as PreferencesProfile | null; - if (cloudProfile == null || cloudProfile.modifiedAt < prefer.profile.modifiedAt) { - await cloudBackup(); + if (cloudProfile == null || cloudProfile.modifiedAt <= prefer.profile.modifiedAt) { + if (_DEV_) console.log('no new cloud profile found, skipping sync'); return; } + if (_DEV_) console.log('new cloud profile found, restoring from cloud', cloudProfile); + miLocalStorage.setItem('preferences', JSON.stringify(cloudProfile)); prefer.reloadProfile(); @@ -178,6 +180,10 @@ export async function cloudBackup() { throw new Error('cannot auto backup for this profile'); } + // TODO: 同期有効時、既に新しいバージョンがバックアップされている場合は上書きしないようにする + + if (_DEV_) console.log('cloud backup', prefer.profile); + await misskeyApi('i/registry/set', { scope: ['client', 'preferences', 'backups'], key: prefer.profile.name,