mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-24 18:50:56 +08:00
fix: remove topic or message did not delte releated files
This reverts commit 4cf4c62a29.
This commit is contained in:
parent
4cf4c62a29
commit
75eed81716
@ -1,7 +1,6 @@
|
||||
import SvgSpinners180Ring from '@renderer/components/Icons/SvgSpinners180Ring'
|
||||
import Scrollbar from '@renderer/components/Scrollbar'
|
||||
import { LOAD_MORE_COUNT } from '@renderer/config/constant'
|
||||
import db from '@renderer/databases'
|
||||
import { useAssistant } from '@renderer/hooks/useAssistant'
|
||||
import { useChatContext } from '@renderer/hooks/useChatContext'
|
||||
import { useMessageOperations, useTopicMessages } from '@renderer/hooks/useMessageOperations'
|
||||
@ -12,7 +11,6 @@ import { autoRenameTopic, getTopic } from '@renderer/hooks/useTopic'
|
||||
import SelectionBox from '@renderer/pages/home/Messages/SelectionBox'
|
||||
import { getDefaultTopic } from '@renderer/services/AssistantService'
|
||||
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
|
||||
import FileManager from '@renderer/services/FileManager'
|
||||
import { getContextCount, getGroupedMessages, getUserMessage } from '@renderer/services/MessagesService'
|
||||
import { estimateHistoryTokens } from '@renderer/services/TokenService'
|
||||
import store, { useAppDispatch } from '@renderer/store'
|
||||
@ -104,22 +102,14 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic, o
|
||||
async (data: Topic) => {
|
||||
const defaultTopic = getDefaultTopic(assistant.id)
|
||||
|
||||
async function handleTopicRelatedFiles(topicId: string) {
|
||||
const topicFiles = await db.files.where({ topicId }).toArray()
|
||||
if (topicFiles.length > 0) {
|
||||
await Promise.all(topicFiles.map((file) => FileManager.deleteFile(file.id, false)))
|
||||
}
|
||||
}
|
||||
|
||||
if (data && data.id !== topic.id) {
|
||||
await clearTopicMessages(data.id)
|
||||
await handleTopicRelatedFiles(data.id)
|
||||
updateTopic({ ...data, name: defaultTopic.name } as Topic)
|
||||
return
|
||||
}
|
||||
|
||||
await clearTopicMessages()
|
||||
await handleTopicRelatedFiles(topic.id)
|
||||
|
||||
setDisplayMessages([])
|
||||
|
||||
const _topic = getTopic(assistant, topic.id)
|
||||
|
||||
@ -8,7 +8,8 @@ import dayjs from 'dayjs'
|
||||
|
||||
class FileManager {
|
||||
static async selectFiles(options?: Electron.OpenDialogOptions): Promise<FileType[] | null> {
|
||||
return await window.api.file.select(options)
|
||||
const files = await window.api.file.select(options)
|
||||
return files
|
||||
}
|
||||
|
||||
static async addFile(file: FileType): Promise<FileType> {
|
||||
|
||||
@ -2,6 +2,7 @@ import db from '@renderer/databases'
|
||||
import { autoRenameTopic } from '@renderer/hooks/useTopic'
|
||||
import { fetchChatCompletion } from '@renderer/services/ApiService'
|
||||
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
|
||||
import FileManager from '@renderer/services/FileManager'
|
||||
import { NotificationService } from '@renderer/services/NotificationService'
|
||||
import { createStreamProcessor, type StreamProcessorCallbacks } from '@renderer/services/StreamProcessingService'
|
||||
import { estimateMessagesUsage } from '@renderer/services/TokenService'
|
||||
@ -37,7 +38,7 @@ import {
|
||||
import { getTopicQueue, waitForTopicQueue } from '@renderer/utils/queue'
|
||||
import { isOnHomePage } from '@renderer/utils/window'
|
||||
import { t } from 'i18next'
|
||||
import { throttle } from 'lodash'
|
||||
import { isEmpty, throttle } from 'lodash'
|
||||
import { LRUCache } from 'lru-cache'
|
||||
|
||||
import type { AppDispatch, RootState } from '../index'
|
||||
@ -193,6 +194,19 @@ export const cleanupMultipleBlocks = (dispatch: AppDispatch, blockIds: string[])
|
||||
blockIds.forEach((id) => {
|
||||
cancelThrottledBlockUpdate(id)
|
||||
})
|
||||
|
||||
const getBlocksFiles = async (blockIds: string[]) => {
|
||||
const blocks = await db.message_blocks.where('id').anyOf(blockIds).toArray()
|
||||
const files = blocks.filter((block) => block.type === MessageBlockType.FILE).map((block) => block.file)
|
||||
return isEmpty(files) ? [] : files
|
||||
}
|
||||
|
||||
const cleanupFiles = async (files: FileType[]) => {
|
||||
await Promise.all(files.map((file) => FileManager.deleteFile(file.id, false)))
|
||||
}
|
||||
|
||||
getBlocksFiles(blockIds).then(cleanupFiles)
|
||||
|
||||
if (blockIds.length > 0) {
|
||||
dispatch(removeManyBlocks(blockIds))
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user