fix: streamline file selection and ensure deletion of topic-related f… (#6872)

* fix: streamline file selection and ensure deletion of topic-related files

* fix: improve file deletion logic
This commit is contained in:
自由的世界人 2025-06-08 12:42:53 +08:00 committed by GitHub
parent f9e557763e
commit df35f25502
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 3 deletions

View File

@ -1,6 +1,7 @@
import SvgSpinners180Ring from '@renderer/components/Icons/SvgSpinners180Ring' import SvgSpinners180Ring from '@renderer/components/Icons/SvgSpinners180Ring'
import Scrollbar from '@renderer/components/Scrollbar' import Scrollbar from '@renderer/components/Scrollbar'
import { LOAD_MORE_COUNT } from '@renderer/config/constant' import { LOAD_MORE_COUNT } from '@renderer/config/constant'
import db from '@renderer/databases'
import { useAssistant } from '@renderer/hooks/useAssistant' import { useAssistant } from '@renderer/hooks/useAssistant'
import { useChatContext } from '@renderer/hooks/useChatContext' import { useChatContext } from '@renderer/hooks/useChatContext'
import { useMessageOperations, useTopicMessages } from '@renderer/hooks/useMessageOperations' import { useMessageOperations, useTopicMessages } from '@renderer/hooks/useMessageOperations'
@ -11,6 +12,7 @@ import { autoRenameTopic, getTopic } from '@renderer/hooks/useTopic'
import SelectionBox from '@renderer/pages/home/Messages/SelectionBox' import SelectionBox from '@renderer/pages/home/Messages/SelectionBox'
import { getDefaultTopic } from '@renderer/services/AssistantService' import { getDefaultTopic } from '@renderer/services/AssistantService'
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
import FileManager from '@renderer/services/FileManager'
import { getContextCount, getGroupedMessages, getUserMessage } from '@renderer/services/MessagesService' import { getContextCount, getGroupedMessages, getUserMessage } from '@renderer/services/MessagesService'
import { estimateHistoryTokens } from '@renderer/services/TokenService' import { estimateHistoryTokens } from '@renderer/services/TokenService'
import store, { useAppDispatch } from '@renderer/store' import store, { useAppDispatch } from '@renderer/store'
@ -102,14 +104,22 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic, o
async (data: Topic) => { async (data: Topic) => {
const defaultTopic = getDefaultTopic(assistant.id) 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) { if (data && data.id !== topic.id) {
await clearTopicMessages(data.id) await clearTopicMessages(data.id)
await handleTopicRelatedFiles(data.id)
updateTopic({ ...data, name: defaultTopic.name } as Topic) updateTopic({ ...data, name: defaultTopic.name } as Topic)
return return
} }
await clearTopicMessages() await clearTopicMessages()
await handleTopicRelatedFiles(topic.id)
setDisplayMessages([]) setDisplayMessages([])
const _topic = getTopic(assistant, topic.id) const _topic = getTopic(assistant, topic.id)

View File

@ -8,8 +8,7 @@ import dayjs from 'dayjs'
class FileManager { class FileManager {
static async selectFiles(options?: Electron.OpenDialogOptions): Promise<FileType[] | null> { static async selectFiles(options?: Electron.OpenDialogOptions): Promise<FileType[] | null> {
const files = await window.api.file.select(options) return await window.api.file.select(options)
return files
} }
static async addFile(file: FileType): Promise<FileType> { static async addFile(file: FileType): Promise<FileType> {