diff --git a/locales/index.d.ts b/locales/index.d.ts index ac136cdfefac..344c3ccf9dfd 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -5306,6 +5306,10 @@ export interface Locale extends ILocale { * スキップ */ "skip": string; + /** + * 復元 + */ + "restore": string; "_preferencesProfile": { /** * プロファイル名 @@ -5349,6 +5353,10 @@ export interface Locale extends ILocale { * このデバイスで設定の自動バックアップは有効になっていません。 */ "autoPreferencesBackupIsNotEnabledForThisDevice": string; + /** + * 設定のバックアップが見つかりました + */ + "backupFound": string; }; "_accountSettings": { /** diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 1e1a31d0f607..301b68e21d69 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1322,6 +1322,7 @@ overrideByAccount: "アカウントで上書き" untitled: "無題" noName: "名前はありません" skip: "スキップ" +restore: "復元" _preferencesProfile: profileName: "プロファイル名" @@ -1336,6 +1337,7 @@ _preferencesBackup: selectBackupToRestore: "復元するバックアップを選択してください" youNeedToNameYourProfileToEnableAutoBackup: "自動バックアップを有効にするにはプロファイル名の設定が必要です。" autoPreferencesBackupIsNotEnabledForThisDevice: "このデバイスで設定の自動バックアップは有効になっていません。" + backupFound: "設定のバックアップが見つかりました" _accountSettings: requireSigninToViewContents: "コンテンツの表示にログインを必須にする" diff --git a/packages/frontend/src/local-storage.ts b/packages/frontend/src/local-storage.ts index e584ac1d1c17..3977edb91b7f 100644 --- a/packages/frontend/src/local-storage.ts +++ b/packages/frontend/src/local-storage.ts @@ -34,6 +34,7 @@ export type Keys = ( 'debug' | 'preferences' | 'latestPreferencesUpdate' | + 'hidePreferencesRestoreSuggestion' | `miux:${string}` | `ui:folder:${string}` | `themes:${string}` | // DEPRECATED diff --git a/packages/frontend/src/preferences/utility.ts b/packages/frontend/src/preferences/utility.ts index f0b7926aa081..87474dcd7666 100644 --- a/packages/frontend/src/preferences/utility.ts +++ b/packages/frontend/src/preferences/utility.ts @@ -120,6 +120,8 @@ function importProfile() { const profile = JSON.parse(txt) as PreferencesProfile; miLocalStorage.setItem('preferences', JSON.stringify(profile)); + miLocalStorage.setItem('hidePreferencesRestoreSuggestion', 'true'); + shouldSuggestRestoreBackup.value = false; unisonReload(); }; @@ -139,7 +141,7 @@ export async function cloudBackup() { }); } -async function restoreFromCloudBackup() { +export async function restoreFromCloudBackup() { if ($i == null) return; // TODO: 更新日時でソートして取得したい @@ -176,7 +178,9 @@ async function restoreFromCloudBackup() { console.log(profile); miLocalStorage.setItem('preferences', JSON.stringify(profile)); + miLocalStorage.setItem('hidePreferencesRestoreSuggestion', 'true'); store.set('enablePreferencesAutoCloudBackup', true); + shouldSuggestRestoreBackup.value = false; unisonReload(); } @@ -191,3 +195,24 @@ export async function enableAutoBackup() { store.set('enablePreferencesAutoCloudBackup', true); } + +export const shouldSuggestRestoreBackup = ref(false); + +if ($i != null) { + if (miLocalStorage.getItem('hidePreferencesRestoreSuggestion') !== 'true') { + misskeyApi('i/registry/keys', { + scope: ['client', 'preferences', 'backups'], + }).then(keys => { + if (keys.length === 0) { + miLocalStorage.setItem('hidePreferencesRestoreSuggestion', 'true'); + } else { + shouldSuggestRestoreBackup.value = true; + } + }); + } +} + +export function hideRestoreBackupSuggestion() { + miLocalStorage.setItem('hidePreferencesRestoreSuggestion', 'true'); + shouldSuggestRestoreBackup.value = false; +} diff --git a/packages/frontend/src/ui/_common_/PreferenceRestore.vue b/packages/frontend/src/ui/_common_/PreferenceRestore.vue new file mode 100644 index 000000000000..041273335045 --- /dev/null +++ b/packages/frontend/src/ui/_common_/PreferenceRestore.vue @@ -0,0 +1,73 @@ + + + + + + + diff --git a/packages/frontend/src/ui/universal.vue b/packages/frontend/src/ui/universal.vue index 1eb5dc6d5305..bddb62dc6065 100644 --- a/packages/frontend/src/ui/universal.vue +++ b/packages/frontend/src/ui/universal.vue @@ -10,6 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only