diff --git a/apps/desktop/main/ipc/chat.ts b/apps/desktop/main/ipc/chat.ts index 566a4cd3..0fde79aa 100644 --- a/apps/desktop/main/ipc/chat.ts +++ b/apps/desktop/main/ipc/chat.ts @@ -225,6 +225,8 @@ export function registerChatHandlers(ctx: IpcContext): void { console.error('[IpcMain] Failed to incrementally generate session index:', e) } worker.invalidateAnalysisCache(sessionId).catch(() => {}) + // 通知渲染进程刷新会话列表(与 API 路由的 notifySessionListChanged 保持一致) + win.webContents.send('api:importCompleted') } return result diff --git a/apps/desktop/main/worker/import/incrementalImport.ts b/apps/desktop/main/worker/import/incrementalImport.ts index 8d52d8eb..26d2e037 100644 --- a/apps/desktop/main/worker/import/incrementalImport.ts +++ b/apps/desktop/main/worker/import/incrementalImport.ts @@ -11,6 +11,7 @@ import { BetterSqliteAdapter, analyzeIncrementalImport as sharedAnalyze, incrementalImport as sharedImport, + computeAndSetOverviewCache, } from '@openchatlab/node-runtime' import type { IncrementalImportDeps, @@ -39,9 +40,8 @@ function buildDeps(requestId: string): IncrementalImportDeps { onProgress(progress) { sendProgress(requestId, progress) }, - async postImportHook(_db, sessionId) { + postImportHook(_db, sessionId) { try { - const { computeAndSetOverviewCache } = await import('@openchatlab/node-runtime') const dbPath = getDbPath(sessionId) const rawDb = new Database(dbPath) computeAndSetOverviewCache(new BetterSqliteAdapter(rawDb), sessionId, getCacheDir()) diff --git a/apps/desktop/main/worker/import/streamImport.ts b/apps/desktop/main/worker/import/streamImport.ts index 9f257f9e..a2170515 100644 --- a/apps/desktop/main/worker/import/streamImport.ts +++ b/apps/desktop/main/worker/import/streamImport.ts @@ -15,6 +15,7 @@ import { analyzeNewImport as sharedAnalyzeNewImport, streamParseFileInfo as sharedStreamParseFileInfo, TEMP_DB_SCHEMA, + computeAndSetOverviewCache, } from '@openchatlab/node-runtime' import type { StreamImportDeps, StreamImportResult, ImportLogger } from '@openchatlab/node-runtime' import { sendProgress, generateSessionId, getDbPath, createDatabaseWithoutIndexes } from './utils' @@ -87,9 +88,8 @@ function buildStreamImportDeps(requestId: string): StreamImportDeps { sendProgress(requestId, progress) }, logger: buildElectronLogger(), - async postImportHook(_db, sessionId) { + postImportHook(_db, sessionId) { try { - const { computeAndSetOverviewCache } = await import('@openchatlab/node-runtime') const dbPath = getDbPath(sessionId) const rawDb = new Database(dbPath) computeAndSetOverviewCache(new BetterSqliteAdapter(rawDb), sessionId, getCacheDir()) diff --git a/packages/node-runtime/src/import/incremental-importer.ts b/packages/node-runtime/src/import/incremental-importer.ts index 4198adfa..adec4e88 100644 --- a/packages/node-runtime/src/import/incremental-importer.ts +++ b/packages/node-runtime/src/import/incremental-importer.ts @@ -64,7 +64,7 @@ export interface IncrementalImportDeps { openDatabase(sessionId: string, readonly?: boolean): DatabaseAdapter onProgress: ImportProgressCallback /** Optional hook after incremental import (e.g. update overview cache). */ - postImportHook?: (db: DatabaseAdapter, sessionId: string) => void + postImportHook?: (db: DatabaseAdapter, sessionId: string) => void | Promise } // ==================== Internal helpers ==================== @@ -383,7 +383,7 @@ export async function incrementalImport( // Post-import hook (e.g. overview cache) try { - deps.postImportHook?.(db, sessionId) + await deps.postImportHook?.(db, sessionId) } catch { /* non-fatal */ } diff --git a/packages/node-runtime/src/import/streaming-importer.ts b/packages/node-runtime/src/import/streaming-importer.ts index f375612b..499bd053 100644 --- a/packages/node-runtime/src/import/streaming-importer.ts +++ b/packages/node-runtime/src/import/streaming-importer.ts @@ -74,7 +74,7 @@ export interface StreamImportDeps { /** Optional perf/diagnostic logger */ logger?: ImportLogger /** Optional hook after import completes (e.g. write overview cache) */ - postImportHook?: (db: DatabaseAdapter, sessionId: string) => void + postImportHook?: (db: DatabaseAdapter, sessionId: string) => void | Promise /** Generate a session ID. Defaults to timestamp + random. */ generateSessionId?: () => string } @@ -520,7 +520,7 @@ async function streamImportSingle( // Post-import hook (e.g. overview cache) try { - deps.postImportHook?.(db, sessionId) + await deps.postImportHook?.(db, sessionId) if (deps.postImportHook) logger?.perf('Post-import hook done', totalMessageCount) } catch { /* non-fatal */ diff --git a/src/pages/group-chat/index.vue b/src/pages/group-chat/index.vue index aa70a130..fc415875 100644 --- a/src/pages/group-chat/index.vue +++ b/src/pages/group-chat/index.vue @@ -294,7 +294,12 @@ const filteredMemberCount = computed(() => { v-model="showIncrementalImportModal" :session-id="currentSessionId" :session-name="session.name" - @imported="loadData" + @imported=" + () => { + loadData() + sessionStore.loadSessions() + } + " /> diff --git a/src/pages/private-chat/index.vue b/src/pages/private-chat/index.vue index dff6e5e4..cf49aca2 100644 --- a/src/pages/private-chat/index.vue +++ b/src/pages/private-chat/index.vue @@ -304,7 +304,12 @@ const otherMemberAvatar = computed(() => { v-model="showIncrementalImportModal" :session-id="currentSessionId" :session-name="session.name" - @imported="loadAnalysisData" + @imported=" + () => { + loadAnalysisData() + sessionStore.loadSessions() + } + " />