From 5d787e5bb9de72235cf42b837ad0e5bb272547aa Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Tue, 6 May 2025 20:57:55 +0900 Subject: enhance(frontend): バックアップされた設定のプロファイルを削除できるように MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/frontend/src/pages/settings/profiles.vue | 47 +++++++++++++++++++++++ packages/frontend/src/preferences/utility.ts | 40 +++++++++++++------ packages/frontend/src/router.definition.ts | 4 ++ 3 files changed, 80 insertions(+), 11 deletions(-) create mode 100644 packages/frontend/src/pages/settings/profiles.vue (limited to 'packages/frontend/src') diff --git a/packages/frontend/src/pages/settings/profiles.vue b/packages/frontend/src/pages/settings/profiles.vue new file mode 100644 index 0000000000..4804c11f7a --- /dev/null +++ b/packages/frontend/src/pages/settings/profiles.vue @@ -0,0 +1,47 @@ + + + + + + + diff --git a/packages/frontend/src/preferences/utility.ts b/packages/frontend/src/preferences/utility.ts index adba908c3c..af5b178df6 100644 --- a/packages/frontend/src/preferences/utility.ts +++ b/packages/frontend/src/preferences/utility.ts @@ -74,12 +74,17 @@ export function getPreferencesProfileMenu(): MenuItem[] { action: () => { importProfile(); }, + }, { + type: 'divider', + }, { + type: 'link', + text: i18n.ts._preferencesProfile.manageProfiles + '...', + icon: 'ti ti-settings-cog', + to: '/settings/profiles', }]; if (prefer.s.devMode) { menu.push({ - type: 'divider', - }, { text: 'Copy profile as text', icon: 'ti ti-clipboard', action: () => { @@ -145,17 +150,30 @@ export async function cloudBackup() { }); } -export async function restoreFromCloudBackup() { - if ($i == null) return; - - // TODO: 更新日時でソートして取得したい +export async function listCloudBackups() { const keys = await misskeyApi('i/registry/keys', { scope: ['client', 'preferences', 'backups'], }); - if (_DEV_) console.log(keys); + return keys.map(k => ({ + name: k, + })); +} + +export async function deleteCloudBackup(key: string) { + await os.apiWithDialog('i/registry/remove', { + scope: ['client', 'preferences', 'backups'], + key, + }); +} + +export async function restoreFromCloudBackup() { + if ($i == null) return; + + // TODO: 更新日時でソートしたい + const backups = await listCloudBackups(); - if (keys.length === 0) { + if (backups.length === 0) { os.alert({ type: 'warning', title: i18n.ts._preferencesBackup.noBackupsFoundTitle, @@ -166,9 +184,9 @@ export async function restoreFromCloudBackup() { const select = await os.select({ title: i18n.ts._preferencesBackup.selectBackupToRestore, - items: keys.map(k => ({ - text: k, - value: k, + items: backups.map(backup => ({ + text: backup.name, + value: backup.name, })), }); if (select.canceled) return; diff --git a/packages/frontend/src/router.definition.ts b/packages/frontend/src/router.definition.ts index d8bdbb7d02..462b8e713f 100644 --- a/packages/frontend/src/router.definition.ts +++ b/packages/frontend/src/router.definition.ts @@ -180,6 +180,10 @@ export const ROUTE_DEF = [{ path: '/custom-css', name: 'preferences', component: page(() => import('@/pages/settings/custom-css.vue')), + }, { + path: '/profiles', + name: 'profiles', + component: page(() => import('@/pages/settings/profiles.vue')), }, { path: '/accounts', name: 'profile', -- cgit v1.2.3-freya