mirror of
https://github.com/hicccc77/WeFlow.git
synced 2026-03-25 07:16:51 +00:00
perf(export): reuse list message count in detail
This commit is contained in:
@@ -4954,24 +4954,10 @@ class ChatService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const [contactResult, avatarResult] = await Promise.allSettled([
|
const contactPromise = wcdbService.getContact(normalizedSessionId)
|
||||||
wcdbService.getContact(normalizedSessionId),
|
const avatarPromise = avatarUrl
|
||||||
avatarUrl ? Promise.resolve({ success: true, map: { [normalizedSessionId]: avatarUrl } }) : wcdbService.getAvatarUrls([normalizedSessionId])
|
? Promise.resolve({ success: true, map: { [normalizedSessionId]: avatarUrl } })
|
||||||
])
|
: wcdbService.getAvatarUrls([normalizedSessionId])
|
||||||
|
|
||||||
if (contactResult.status === 'fulfilled' && contactResult.value.success && contactResult.value.contact) {
|
|
||||||
remark = contactResult.value.contact.remark || undefined
|
|
||||||
nickName = contactResult.value.contact.nickName || undefined
|
|
||||||
alias = contactResult.value.contact.alias || undefined
|
|
||||||
displayName = remark || nickName || alias || displayName
|
|
||||||
}
|
|
||||||
|
|
||||||
if (avatarResult.status === 'fulfilled' && avatarResult.value.success && avatarResult.value.map) {
|
|
||||||
const avatarCandidate = avatarResult.value.map[normalizedSessionId]
|
|
||||||
if (this.isValidAvatarUrl(avatarCandidate)) {
|
|
||||||
avatarUrl = avatarCandidate
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let messageCount: number | undefined
|
let messageCount: number | undefined
|
||||||
const cachedCount = this.sessionMessageCountCache.get(normalizedSessionId)
|
const cachedCount = this.sessionMessageCountCache.get(normalizedSessionId)
|
||||||
@@ -4988,10 +4974,38 @@ class ChatService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const messageCountPromise = Number.isFinite(messageCount)
|
||||||
|
? Promise.resolve<{ success: boolean; count?: number }>({
|
||||||
|
success: true,
|
||||||
|
count: Math.max(0, Math.floor(messageCount as number))
|
||||||
|
})
|
||||||
|
: wcdbService.getMessageCount(normalizedSessionId)
|
||||||
|
|
||||||
|
const [contactResult, avatarResult, messageCountResult] = await Promise.allSettled([
|
||||||
|
contactPromise,
|
||||||
|
avatarPromise,
|
||||||
|
messageCountPromise
|
||||||
|
])
|
||||||
|
|
||||||
|
if (contactResult.status === 'fulfilled' && contactResult.value.success && contactResult.value.contact) {
|
||||||
|
remark = contactResult.value.contact.remark || undefined
|
||||||
|
nickName = contactResult.value.contact.nickName || undefined
|
||||||
|
alias = contactResult.value.contact.alias || undefined
|
||||||
|
displayName = remark || nickName || alias || displayName
|
||||||
|
}
|
||||||
|
|
||||||
|
if (avatarResult.status === 'fulfilled' && avatarResult.value.success && avatarResult.value.map) {
|
||||||
|
const avatarCandidate = avatarResult.value.map[normalizedSessionId]
|
||||||
|
if (this.isValidAvatarUrl(avatarCandidate)) {
|
||||||
|
avatarUrl = avatarCandidate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!Number.isFinite(messageCount)) {
|
if (!Number.isFinite(messageCount)) {
|
||||||
const countResult = await wcdbService.getMessageCount(normalizedSessionId)
|
messageCount = messageCountResult.status === 'fulfilled' &&
|
||||||
messageCount = countResult.success && Number.isFinite(countResult.count)
|
messageCountResult.value.success &&
|
||||||
? Math.max(0, Math.floor(countResult.count || 0))
|
Number.isFinite(messageCountResult.value.count)
|
||||||
|
? Math.max(0, Math.floor(messageCountResult.value.count || 0))
|
||||||
: 0
|
: 0
|
||||||
this.sessionMessageCountCache.set(normalizedSessionId, {
|
this.sessionMessageCountCache.set(normalizedSessionId, {
|
||||||
count: messageCount,
|
count: messageCount,
|
||||||
|
|||||||
@@ -2875,9 +2875,11 @@ function ExportPage() {
|
|||||||
const requestSeq = ++detailRequestSeqRef.current
|
const requestSeq = ++detailRequestSeqRef.current
|
||||||
const mappedSession = sessionRowByUsername.get(normalizedSessionId)
|
const mappedSession = sessionRowByUsername.get(normalizedSessionId)
|
||||||
const mappedContact = contactByUsername.get(normalizedSessionId)
|
const mappedContact = contactByUsername.get(normalizedSessionId)
|
||||||
|
const countedCount = normalizeMessageCount(sessionMessageCounts[normalizedSessionId])
|
||||||
const hintedCount = typeof mappedSession?.messageCountHint === 'number' && Number.isFinite(mappedSession.messageCountHint) && mappedSession.messageCountHint >= 0
|
const hintedCount = typeof mappedSession?.messageCountHint === 'number' && Number.isFinite(mappedSession.messageCountHint) && mappedSession.messageCountHint >= 0
|
||||||
? Math.floor(mappedSession.messageCountHint)
|
? Math.floor(mappedSession.messageCountHint)
|
||||||
: undefined
|
: undefined
|
||||||
|
const initialMessageCount = countedCount ?? hintedCount
|
||||||
|
|
||||||
setCopiedDetailField(null)
|
setCopiedDetailField(null)
|
||||||
setIsRefreshingSessionDetailStats(false)
|
setIsRefreshingSessionDetailStats(false)
|
||||||
@@ -2891,7 +2893,7 @@ function ExportPage() {
|
|||||||
nickName: sameSession ? prev?.nickName : mappedContact?.nickname,
|
nickName: sameSession ? prev?.nickName : mappedContact?.nickname,
|
||||||
alias: sameSession ? prev?.alias : undefined,
|
alias: sameSession ? prev?.alias : undefined,
|
||||||
avatarUrl: mappedSession?.avatarUrl || mappedContact?.avatarUrl || (sameSession ? prev?.avatarUrl : undefined),
|
avatarUrl: mappedSession?.avatarUrl || mappedContact?.avatarUrl || (sameSession ? prev?.avatarUrl : undefined),
|
||||||
messageCount: hintedCount ?? (sameSession ? prev.messageCount : Number.NaN),
|
messageCount: initialMessageCount ?? (sameSession ? prev.messageCount : Number.NaN),
|
||||||
voiceMessages: sameSession ? prev?.voiceMessages : undefined,
|
voiceMessages: sameSession ? prev?.voiceMessages : undefined,
|
||||||
imageMessages: sameSession ? prev?.imageMessages : undefined,
|
imageMessages: sameSession ? prev?.imageMessages : undefined,
|
||||||
videoMessages: sameSession ? prev?.videoMessages : undefined,
|
videoMessages: sameSession ? prev?.videoMessages : undefined,
|
||||||
@@ -3035,7 +3037,7 @@ function ExportPage() {
|
|||||||
setIsLoadingSessionDetailExtra(false)
|
setIsLoadingSessionDetailExtra(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [applySessionDetailStats, contactByUsername, sessionRowByUsername])
|
}, [applySessionDetailStats, contactByUsername, sessionMessageCounts, sessionRowByUsername])
|
||||||
|
|
||||||
const loadSessionRelationStats = useCallback(async () => {
|
const loadSessionRelationStats = useCallback(async () => {
|
||||||
const normalizedSessionId = String(sessionDetail?.wxid || '').trim()
|
const normalizedSessionId = String(sessionDetail?.wxid || '').trim()
|
||||||
|
|||||||
Reference in New Issue
Block a user