fix(upgrades): add check for empty content in error block creation during upgrade to v7

This commit is contained in:
kangfenmao 2025-05-07 20:51:29 +08:00
parent 636c788e2b
commit 5fe1d077e3
2 changed files with 19 additions and 7 deletions

View File

@ -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<void> {
// 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)

View File

@ -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<string, any>) {
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