fix(export): batch session stats and avoid stale empty cache

This commit is contained in:
tisonhuang
2026-03-01 17:00:37 +08:00
parent c34f7af6de
commit dffd3c9138

View File

@@ -623,29 +623,41 @@ function ExportPage() {
const updates: Record<string, SessionMetrics> = {} const updates: Record<string, SessionMetrics> = {}
for (const session of pending) { for (const session of pending) {
loadingMetricsRef.current.add(session.username) loadingMetricsRef.current.add(session.username)
updates[session.username] = {}
} }
try { try {
const statsResult = await window.electronAPI.chat.getExportSessionStats(pending.map(session => session.username)) const batchSize = 80
if (statsResult.success && statsResult.data) { for (let i = 0; i < pending.length; i += batchSize) {
for (const session of pending) { const chunk = pending.slice(i, i + batchSize)
const raw = statsResult.data[session.username] const ids = chunk.map(session => session.username)
if (!raw) continue
updates[session.username] = { try {
totalMessages: raw.totalMessages, const statsResult = await window.electronAPI.chat.getExportSessionStats(ids)
voiceMessages: raw.voiceMessages, if (!statsResult.success || !statsResult.data) {
imageMessages: raw.imageMessages, console.error('加载会话统计失败:', statsResult.error || '未知错误')
videoMessages: raw.videoMessages, continue
emojiMessages: raw.emojiMessages,
privateMutualGroups: raw.privateMutualGroups,
groupMemberCount: raw.groupMemberCount,
groupMyMessages: raw.groupMyMessages,
groupActiveSpeakers: raw.groupActiveSpeakers,
groupMutualFriends: raw.groupMutualFriends,
firstTimestamp: raw.firstTimestamp,
lastTimestamp: raw.lastTimestamp
} }
for (const session of chunk) {
const raw = statsResult.data[session.username]
// 成功响应但无明细时按 0 回填,避免该行反复重试导致滚动抖动。
updates[session.username] = {
totalMessages: raw?.totalMessages ?? 0,
voiceMessages: raw?.voiceMessages ?? 0,
imageMessages: raw?.imageMessages ?? 0,
videoMessages: raw?.videoMessages ?? 0,
emojiMessages: raw?.emojiMessages ?? 0,
privateMutualGroups: raw?.privateMutualGroups,
groupMemberCount: raw?.groupMemberCount,
groupMyMessages: raw?.groupMyMessages,
groupActiveSpeakers: raw?.groupActiveSpeakers,
groupMutualFriends: raw?.groupMutualFriends,
firstTimestamp: raw?.firstTimestamp,
lastTimestamp: raw?.lastTimestamp
}
}
} catch (error) {
console.error('加载会话统计分批失败:', error)
} }
} }
} catch (error) { } catch (error) {