diff --git a/src/main/services/KnowledgeService.ts b/src/main/services/KnowledgeService.ts index d55a1cfbe0..cea4b4b36a 100644 --- a/src/main/services/KnowledgeService.ts +++ b/src/main/services/KnowledgeService.ts @@ -87,7 +87,10 @@ class KnowledgeService { const sendDirectoryProcessingPercent = (totalFiles: number, processedFiles: number) => { const mainWindow = windowService.getMainWindow() - mainWindow?.webContents.send(base.id, (processedFiles / totalFiles) * 100) + mainWindow?.webContents.send('directory-processing-percent', { + itemId: item.id, + percent: (processedFiles / totalFiles) * 100 + }) } if (item.type === 'directory') { diff --git a/src/renderer/src/hooks/useKnowledge.ts b/src/renderer/src/hooks/useKnowledge.ts index 4de51ca1cc..347f15a372 100644 --- a/src/renderer/src/hooks/useKnowledge.ts +++ b/src/renderer/src/hooks/useKnowledge.ts @@ -207,9 +207,14 @@ export const useKnowledge = (baseId: string) => { return } - const cleanup = window.electron.ipcRenderer.on(itemId, (_, progressingPercent: number) => { - setPercent(progressingPercent) - }) + const cleanup = window.electron.ipcRenderer.on( + 'directory-processing-percent', + (_, { itemId: id, percent }: { itemId: string; percent: number }) => { + if (itemId === id) { + setPercent(percent) + } + } + ) return () => { cleanup() diff --git a/src/renderer/src/pages/knowledge/KnowledgeContent.tsx b/src/renderer/src/pages/knowledge/KnowledgeContent.tsx index 237a1e5270..1f1b2d6b43 100644 --- a/src/renderer/src/pages/knowledge/KnowledgeContent.tsx +++ b/src/renderer/src/pages/knowledge/KnowledgeContent.tsx @@ -65,7 +65,7 @@ const KnowledgeContent: FC = ({ selectedBase }) => { return null } - const progressingPercent = getDirectoryProcessingPercent(base?.id) + const getProgressingPercentForItem = (itemId: string) => getDirectoryProcessingPercent(itemId) const handleAddFile = () => { if (disabled) { @@ -278,7 +278,7 @@ const KnowledgeContent: FC = ({ selectedBase }) => { sourceId={item.id} base={base} getProcessingStatus={getProcessingStatus} - progressingPercent={progressingPercent} + getProcessingPercent={getProgressingPercentForItem} type="directory" /> diff --git a/src/renderer/src/pages/knowledge/components/StatusIcon.tsx b/src/renderer/src/pages/knowledge/components/StatusIcon.tsx index 8223837479..5bf98f5a35 100644 --- a/src/renderer/src/pages/knowledge/components/StatusIcon.tsx +++ b/src/renderer/src/pages/knowledge/components/StatusIcon.tsx @@ -9,13 +9,14 @@ interface StatusIconProps { sourceId: string base: KnowledgeBase getProcessingStatus: (sourceId: string) => ProcessingStatus | undefined - progressingPercent?: number + getProcessingPercent?: (sourceId: string) => number | undefined type: string } -const StatusIcon: FC = ({ sourceId, base, getProcessingStatus, progressingPercent, type }) => { +const StatusIcon: FC = ({ sourceId, base, getProcessingStatus, getProcessingPercent, type }) => { const { t } = useTranslation() const status = getProcessingStatus(sourceId) + const percent = getProcessingPercent?.(sourceId) const item = base.items.find((item) => item.id === sourceId) const errorText = item?.processingError @@ -44,7 +45,7 @@ const StatusIcon: FC = ({ sourceId, base, getProcessingStatus, case 'processing': { return type === 'directory' ? ( - + ) : (