feat: 修改缓存加载逻辑

This commit is contained in:
Wxw-Gu
2026-07-28 09:56:50 +08:00
parent 5ccabb3898
commit 33aaf4d558
+1 -11
View File
@@ -263,7 +263,6 @@ function App(): React.ReactElement {
const messageHistoryRef = React.useRef<Message[]>([]) const messageHistoryRef = React.useRef<Message[]>([])
const messagesRef = React.useRef<Message[]>([]) const messagesRef = React.useRef<Message[]>([])
const messagePrefetchRef = React.useRef<Promise<void> | null>(null) const messagePrefetchRef = React.useRef<Promise<void> | null>(null)
const pendingLiveRefreshMd5Ref = React.useRef('')
messagesRef.current = messages messagesRef.current = messages
React.useEffect(() => { React.useEffect(() => {
if (!reportNotice) return if (!reportNotice) return
@@ -923,17 +922,13 @@ function App(): React.ReactElement {
storeGroupMemberMeta(contact, cachedPage.groupSnapshot) storeGroupMemberMeta(contact, cachedPage.groupSnapshot)
} }
messageHistoryRef.current = cachedMsgs messageHistoryRef.current = cachedMsgs
pendingLiveRefreshMd5Ref.current = cachedPage.hit ? '' : contact.md5
setMessages( setMessages(
applyGroupMemberMeta( applyGroupMemberMeta(
contact, contact,
mergeSyntheticMessages(contact, cachedMsgs.slice(-INITIAL_MESSAGE_COUNT)) mergeSyntheticMessages(contact, cachedMsgs.slice(-INITIAL_MESSAGE_COUNT))
) )
) )
const needsLivePage = const needsLivePage = forceLive || isDatabaseConnected
forceLive ||
(isDatabaseConnected &&
(!cachedPage.hit || cachedMsgs.length < MESSAGE_PREFETCH_COUNT))
if (!needsLivePage) { if (!needsLivePage) {
setIsMessagesLoading(false) setIsMessagesLoading(false)
if (contact.type === 'group' && cachedMsgs.length > 0 && !cachedPage.groupSnapshot) { if (contact.type === 'group' && cachedMsgs.length > 0 && !cachedPage.groupSnapshot) {
@@ -959,7 +954,6 @@ function App(): React.ReactElement {
}) })
if (selectedContactMd5Ref.current !== contact.md5) return if (selectedContactMd5Ref.current !== contact.md5) return
messageHistoryRef.current = msgs messageHistoryRef.current = msgs
pendingLiveRefreshMd5Ref.current = ''
const visibleMessages = applyGroupMemberMeta( const visibleMessages = applyGroupMemberMeta(
contact, contact,
mergeSyntheticMessages(contact, msgs.slice(-INITIAL_MESSAGE_COUNT)) mergeSyntheticMessages(contact, msgs.slice(-INITIAL_MESSAGE_COUNT))
@@ -992,10 +986,6 @@ function App(): React.ReactElement {
React.useEffect(() => { React.useEffect(() => {
if (!isDatabaseConnected || !selectedContact) return if (!isDatabaseConnected || !selectedContact) return
const needsPendingRefresh = pendingLiveRefreshMd5Ref.current === selectedContact.md5
if (messages.length > 0 && !needsPendingRefresh) return
// The first live page uses async native cursors, so a cache miss can be filled
// without blocking the Electron main thread.
void handleSelectContact(selectedContact) void handleSelectContact(selectedContact)
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [isDatabaseConnected]) }, [isDatabaseConnected])