diff --git a/src/main/services/BackupManager.ts b/src/main/services/BackupManager.ts index 4d951f3698..18dbd00422 100644 --- a/src/main/services/BackupManager.ts +++ b/src/main/services/BackupManager.ts @@ -255,19 +255,26 @@ class BackupManager { const sourcePath = path.join(this.tempDir, 'Data') const destPath = path.join(app.getPath('userData'), 'Data') - // 获取源目录总大小 - const totalSize = await this.getDirSize(sourcePath) - let copiedSize = 0 + const dataExists = await fs.pathExists(sourcePath) + const dataFiles = dataExists ? await fs.readdir(sourcePath) : [] - await this.setWritableRecursive(destPath) - await fs.remove(destPath) + if (dataExists && dataFiles.length > 0) { + // 获取源目录总大小 + const totalSize = await this.getDirSize(sourcePath) + let copiedSize = 0 - // 使用流式复制 - await this.copyDirWithProgress(sourcePath, destPath, (size) => { - copiedSize += size - const progress = Math.min(85, 35 + Math.floor((copiedSize / totalSize) * 50)) - onProgress({ stage: 'copying_files', progress, total: 100 }) - }) + await this.setWritableRecursive(destPath) + await fs.remove(destPath) + + // 使用流式复制 + await this.copyDirWithProgress(sourcePath, destPath, (size) => { + copiedSize += size + const progress = Math.min(85, 35 + Math.floor((copiedSize / totalSize) * 50)) + onProgress({ stage: 'copying_files', progress, total: 100 }) + }) + } else { + Logger.log('[backup] skipBackupFile is true, skip restoring Data directory') + } Logger.log('[backup] step 4: clean up temp directory') // 清理临时目录 diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index bdcc3c866d..e995e20df0 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -2,12 +2,12 @@ import ZhinaoProviderLogo from '@renderer/assets/images/models/360.png' import HunyuanProviderLogo from '@renderer/assets/images/models/hunyuan.png' import AzureProviderLogo from '@renderer/assets/images/models/microsoft.png' import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.webp' -import BurnCloudProviderLogo from '@renderer/assets/images/providers/burncloud.png' import AlayaNewProviderLogo from '@renderer/assets/images/providers/alayanew.webp' import AnthropicProviderLogo from '@renderer/assets/images/providers/anthropic.png' import BaichuanProviderLogo from '@renderer/assets/images/providers/baichuan.png' import BaiduCloudProviderLogo from '@renderer/assets/images/providers/baidu-cloud.svg' import BailianProviderLogo from '@renderer/assets/images/providers/bailian.png' +import BurnCloudProviderLogo from '@renderer/assets/images/providers/burncloud.png' import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png' import DmxapiProviderLogo from '@renderer/assets/images/providers/DMXAPI.png' import FireworksProviderLogo from '@renderer/assets/images/providers/fireworks.png' diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 7be5836bfa..b6b742fd85 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -396,6 +396,7 @@ "search": "Search", "select": "Select", "selectedMessages": "Selected {{count}} messages", + "success": "Success", "topics": "Topics", "warning": "Warning", "you": "You", diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 2520a824f6..42a7564d06 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -396,6 +396,7 @@ "search": "検索", "select": "選択", "selectedMessages": "{{count}}件のメッセージを選択しました", + "success": "成功", "topics": "トピック", "warning": "警告", "you": "あなた", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index e2e27b73a5..28aacde678 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -396,6 +396,7 @@ "search": "Поиск", "select": "Выбрать", "selectedMessages": "Выбрано {{count}} сообщений", + "success": "Успешно", "topics": "Топики", "warning": "Предупреждение", "you": "Вы", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 0088532099..89fac6e56e 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -396,6 +396,7 @@ "search": "搜索", "select": "选择", "selectedMessages": "选中 {{count}} 条消息", + "success": "成功", "topics": "话题", "warning": "警告", "you": "用户", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 6ecd496108..3b5650f5a2 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -395,7 +395,8 @@ "save": "儲存", "search": "搜尋", "select": "選擇", - "selectedMessages": "选中 {{count}} 条消息", + "selectedMessages": "選中 {{count}} 條訊息", + "success": "成功", "topics": "話題", "warning": "警告", "you": "您", diff --git a/src/renderer/src/services/BackupService.ts b/src/renderer/src/services/BackupService.ts index b6457412f2..3f1c3f85fe 100644 --- a/src/renderer/src/services/BackupService.ts +++ b/src/renderer/src/services/BackupService.ts @@ -138,10 +138,6 @@ export async function backupToWebdav({ source: 'backup' }) - if (showMessage && !autoBackupProcess) { - window.message.success({ content: i18n.t('message.backup.success'), key: 'backup' }) - } - // 清理旧备份文件 if (webdavMaxBackups > 0) { try { @@ -199,19 +195,14 @@ export async function backupToWebdav({ notificationService.send({ id: uuid(), type: 'error', - title: i18n.t('common.error'), - message: i18n.t('message.backup.failed'), + title: i18n.t('message.backup.failed'), + message: error.message, silent: false, timestamp: Date.now(), source: 'backup' }) store.dispatch(setWebDAVSyncState({ lastSyncError: error.message })) console.error('[Backup] backupToWebdav: Error uploading file to WebDAV:', error) - showMessage && - window.modal.error({ - title: i18n.t('message.backup.failed'), - content: error.message - }) throw error } finally { if (!autoBackupProcess) { diff --git a/src/renderer/src/store/thunk/messageThunk.ts b/src/renderer/src/store/thunk/messageThunk.ts index 566aa6e6e3..2c5f872fb1 100644 --- a/src/renderer/src/store/thunk/messageThunk.ts +++ b/src/renderer/src/store/thunk/messageThunk.ts @@ -34,7 +34,6 @@ import { createTranslationBlock, resetAssistantMessage } from '@renderer/utils/messageUtils/create' -import { getMainTextContent } from '@renderer/utils/messageUtils/find' import { getTopicQueue, waitForTopicQueue } from '@renderer/utils/queue' import { isOnHomePage } from '@renderer/utils/window' import { t } from 'i18next' @@ -652,18 +651,18 @@ const fetchAndProcessAssistantResponseImpl = async ( saveUpdatedBlockToDB(lastBlockId, assistantMsgId, topicId, getState) } - const content = getMainTextContent(finalAssistantMsg) - if (!isOnHomePage()) { - await notificationService.send({ - id: uuid(), - type: 'success', - title: t('notification.assistant'), - message: content.length > 50 ? content.slice(0, 47) + '...' : content, - silent: false, - timestamp: Date.now(), - source: 'assistant' - }) - } + // const content = getMainTextContent(finalAssistantMsg) + // if (!isOnHomePage()) { + // await notificationService.send({ + // id: uuid(), + // type: 'success', + // title: t('notification.assistant'), + // message: content.length > 50 ? content.slice(0, 47) + '...' : content, + // silent: false, + // timestamp: Date.now(), + // source: 'assistant' + // }) + // } // 更新topic的name autoRenameTopic(assistant, topicId)