From 0929410d3608da716e8e6c61f82f6f328a07d6bb Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Fri, 14 Mar 2025 15:43:56 +0900 Subject: [PATCH 1/4] enhance(frontend): improve pref manager --- packages/frontend/src/preferences/manager.ts | 37 ++++++++++++++------ 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/packages/frontend/src/preferences/manager.ts b/packages/frontend/src/preferences/manager.ts index fad0226b6e..d72fa841ff 100644 --- a/packages/frontend/src/preferences/manager.ts +++ b/packages/frontend/src/preferences/manager.ts @@ -23,11 +23,10 @@ import { deepEqual } from '@/utility/deep-equal.js'; type PREF = typeof PREF_DEF; type ValueOf = PREF[K]['default']; -type Account = string; // / type Scope = Partial<{ - server: string | null; // 将来のため - account: Account | null; + server: string | null; // host + account: string | null; // userId device: string | null; // 将来のため }>; @@ -39,7 +38,7 @@ type PrefRecord = [scope: Scope, value: ValueOf, meta: function parseScope(scope: Scope): { server: string | null; - account: Account | null; + account: string | null; device: string | null; } { return { @@ -51,7 +50,7 @@ function parseScope(scope: Scope): { function makeScope(scope: Partial<{ server: string | null; - account: Account | null; + account: string | null; device: string | null; }>): Scope { const c = {} as Scope; @@ -130,6 +129,10 @@ export class PreferencesManager { return (PREF_DEF as PreferencesDefinition)[key].accountDependent === true; } + private isServerDependentKey(key: K): boolean { + return (PREF_DEF as PreferencesDefinition)[key].serverDependent === true; + } + private rewriteRawState(key: K, value: ValueOf) { const v = JSON.parse(JSON.stringify(value)); // deep copy 兼 vueのプロキシ解除 this.r[key].value = this.s[key] = v; @@ -141,9 +144,19 @@ export class PreferencesManager { this.rewriteRawState(key, value); const record = this.getMatchedRecordOf(key); + if (parseScope(record[0]).account == null && this.isAccountDependentKey(key)) { this.profile.preferences[key].push([makeScope({ - account: `${host}/${$i!.id}`, + server: host, + account: $i!.id, + }), value, {}]); + this.save(); + return; + } + + if (parseScope(record[0]).server == null && this.isServerDependentKey(key)) { + this.profile.preferences[key].push([makeScope({ + server: host, }), value, {}]); this.save(); return; @@ -291,16 +304,19 @@ export class PreferencesManager { if ($i == null) return records.find(([scope, v]) => parseScope(scope).account == null)!; - const accountOverrideRecord = records.find(([scope, v]) => parseScope(scope).account === `${host}/${$i!.id}`); + const accountOverrideRecord = records.find(([scope, v]) => parseScope(scope).server === host && parseScope(scope).account === $i!.id); if (accountOverrideRecord) return accountOverrideRecord; + const serverOverrideRecord = records.find(([scope, v]) => parseScope(scope).server === host && parseScope(scope).account == null); + if (serverOverrideRecord) return serverOverrideRecord; + const record = records.find(([scope, v]) => parseScope(scope).account == null); return record!; } public isAccountOverrided(key: K): boolean { if ($i == null) return false; - return this.profile.preferences[key].some(([scope, v]) => parseScope(scope).account === `${host}/${$i!.id}`) ?? false; + return this.profile.preferences[key].some(([scope, v]) => parseScope(scope).server === host && parseScope(scope).account === $i!.id) ?? false; } public setAccountOverride(key: K) { @@ -310,7 +326,8 @@ export class PreferencesManager { const records = this.profile.preferences[key]; records.push([makeScope({ - account: `${host}/${$i!.id}`, + server: host, + account: $i!.id, }), this.s[key], {}]); this.save(); @@ -322,7 +339,7 @@ export class PreferencesManager { const records = this.profile.preferences[key]; - const index = records.findIndex(([scope, v]) => parseScope(scope).account === `${host}/${$i!.id}`); + const index = records.findIndex(([scope, v]) => parseScope(scope).server === host && parseScope(scope).account === $i!.id); if (index === -1) return; records.splice(index, 1); From 63993dace654dee1d1e44da2d3ce613a2845971e Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Fri, 14 Mar 2025 16:37:25 +0900 Subject: [PATCH 2/4] fix(frontend): fix pref migration Fix #15661 --- packages/frontend/src/store.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts index ffbd8d10ef..de99b233d6 100644 --- a/packages/frontend/src/store.ts +++ b/packages/frontend/src/store.ts @@ -178,7 +178,18 @@ export const store = markRaw(new Storage('base', { }, menu: { where: 'deviceAccount', - default: [], + default: [ + 'notifications', + 'clips', + 'drive', + 'followRequests', + '-', + 'explore', + 'announcements', + 'search', + '-', + 'ui', + ], }, statusbars: { where: 'deviceAccount', From 30de6d80bb7c087b961ca30c6420ab0e6ebd38a1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 14 Mar 2025 07:39:14 +0000 Subject: [PATCH 3/4] Bump version to 2025.3.2-beta.1 --- package.json | 2 +- packages/misskey-js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4308c48ea4..7b81c6a349 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2025.3.2-beta.0", + "version": "2025.3.2-beta.1", "codename": "nasubi", "repository": { "type": "git", diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json index d217e01154..439c04490a 100644 --- a/packages/misskey-js/package.json +++ b/packages/misskey-js/package.json @@ -1,7 +1,7 @@ { "type": "module", "name": "misskey-js", - "version": "2025.3.2-beta.0", + "version": "2025.3.2-beta.1", "description": "Misskey SDK for JavaScript", "license": "MIT", "main": "./built/index.js", From c88f5f51954341f36f9b7770c66a2f11e13dd3ec Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Fri, 14 Mar 2025 17:00:02 +0900 Subject: [PATCH 4/4] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed99051db6..812e0b5d34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ ### Client - Feat: 設定の管理が強化されました - 自動でバックアップされるように - - 任意の設定項目をデバイス間で同期できるように(実験的) + - 任意の設定項目をデバイス間で同期できるように - Enhance: プラグインの管理が強化されました - インストール/アンインストール/設定の変更時にリロード不要になりました - Enhance: ログアウト時、ブラウザに保存されたWebクライアントのデータを全て消去するように