From 5fe1d077e331ef3d04b317b3856986ff71c6451c Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Wed, 7 May 2025 20:51:29 +0800 Subject: [PATCH] fix(upgrades): add check for empty content in error block creation during upgrade to v7 --- src/renderer/src/databases/upgrades.ts | 15 +++++++++------ src/renderer/src/services/BackupService.ts | 11 ++++++++++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/renderer/src/databases/upgrades.ts b/src/renderer/src/databases/upgrades.ts index bbfadb9926..53acc932bf 100644 --- a/src/renderer/src/databases/upgrades.ts +++ b/src/renderer/src/databases/upgrades.ts @@ -9,6 +9,7 @@ import type { } from '@renderer/types/newMessage' import { AssistantMessageStatus, MessageBlockStatus } from '@renderer/types/newMessage' import { Transaction } from 'dexie' +import { isEmpty } from 'lodash' import { createCitationBlock, @@ -258,12 +259,14 @@ export async function upgradeToV7(tx: Transaction): Promise { // 10. Error Block (Status is ERROR) if (oldMessage.error && typeof oldMessage.error === 'object' && Object.keys(oldMessage.error).length > 0) { - const block = createErrorBlock(oldMessage.id, oldMessage.error, { - createdAt: oldMessage.createdAt, - status: MessageBlockStatus.ERROR // Error block status is ERROR - }) - blocksToCreate.push(block) - messageBlockIds.push(block.id) + if (isEmpty(oldMessage.content)) { + const block = createErrorBlock(oldMessage.id, oldMessage.error, { + createdAt: oldMessage.createdAt, + status: MessageBlockStatus.ERROR // Error block status is ERROR + }) + blocksToCreate.push(block) + messageBlockIds.push(block.id) + } } // 11. Create the New Message reference object (Add usage/metrics assignment) diff --git a/src/renderer/src/services/BackupService.ts b/src/renderer/src/services/BackupService.ts index 753c5f0a8d..66699042f6 100644 --- a/src/renderer/src/services/BackupService.ts +++ b/src/renderer/src/services/BackupService.ts @@ -1,4 +1,5 @@ import db from '@renderer/databases' +import { upgradeToV7 } from '@renderer/databases/upgrades' import i18n from '@renderer/i18n' import store from '@renderer/store' import { setWebDAVSyncState } from '@renderer/store/backup' @@ -361,7 +362,7 @@ export function stopAutoSync() { export async function getBackupData() { return JSON.stringify({ time: new Date().getTime(), - version: 3, + version: 4, localStorage, indexedDB: await backupDatabase() }) @@ -390,6 +391,14 @@ export async function handleData(data: Record) { if (data.version >= 2) { localStorage.setItem('persist:cherry-studio', data.localStorage['persist:cherry-studio']) await restoreDatabase(data.indexedDB) + + if (data.version === 3) { + await db.transaction('rw', db.tables, async (tx) => { + await db.table('message_blocks').clear() + await upgradeToV7(tx) + }) + } + window.message.success({ content: i18n.t('message.restore.success'), key: 'restore' }) setTimeout(() => window.api.reload(), 1000) return