From be4bf5b510a305172a7f90c42399e8a25c3b6aa5 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Mon, 16 Sep 2024 16:44:41 +0800 Subject: [PATCH] fix: clear database and restore specific data from backup - Updated restore function now clears database and restores specific data from backup. - Removed unused imports and refactored logic for item transformation in the '24' migration step. --- src/renderer/src/services/backup.ts | 15 ++++++++++++++- src/renderer/src/store/migrate.ts | 10 ++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/renderer/src/services/backup.ts b/src/renderer/src/services/backup.ts index 63d33fa3fd..3e2ae69956 100644 --- a/src/renderer/src/services/backup.ts +++ b/src/renderer/src/services/backup.ts @@ -32,7 +32,20 @@ export async function restore() { const data = JSON.parse(content) if (data.version === 1) { - window.modal.confirm({ content: 'Please use a version less than v0.7.0 for recovery.' }) + await clearDatabase() + + for (const { key, value } of data.indexedDB) { + if (key.startsWith('topic:')) { + await db.table('topics').add({ id: value.id, messages: value.messages }) + } + if (key === 'image://avatar') { + await db.table('settings').add({ id: key, value }) + } + } + + await localStorage.setItem('persist:cherry-studio', data.localStorage['persist:cherry-studio']) + window.message.success({ content: i18n.t('message.restore.success'), key: 'restore' }) + setTimeout(() => window.api.reload(), 1000) return } diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 340f4caf84..d562d9b4a5 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -1,8 +1,7 @@ import { SYSTEM_MODELS } from '@renderer/config/models' import i18n from '@renderer/i18n' import { Assistant } from '@renderer/types' -import localforage from 'localforage' -import { isEmpty, pick } from 'lodash' +import { isEmpty } from 'lodash' import { createMigrate } from 'redux-persist' import { RootState } from '.' @@ -375,12 +374,7 @@ const migrateConfig = { } } }, - '24': async (state: RootState) => { - for (const key of await localforage.keys()) { - if (key.startsWith('topic:')) { - localforage.getItem(key).then((topic) => localforage.setItem(key, pick(topic, ['id', 'messages']))) - } - } + '24': (state: RootState) => { return { ...state, assistants: {