Merge branch 'hicccc77:dev' into dev

This commit is contained in:
xuncha
2026-02-28 20:00:06 +08:00
committed by GitHub
13 changed files with 351 additions and 722 deletions

View File

@@ -768,7 +768,7 @@ function ChatPage(_props: ChatPageProps) {
setIsRefreshingMessages(true)
// 找出当前已渲染消息中的最大时间戳(使用 getState 获取最新状态,避免闭包过时导致重复)
const currentMessages = useChatStore.getState().messages
const currentMessages = useChatStore.getState().messages || []
const lastMsg = currentMessages[currentMessages.length - 1]
const minTime = lastMsg?.createTime || 0
@@ -782,7 +782,7 @@ function ChatPage(_props: ChatPageProps) {
if (result.success && result.messages && result.messages.length > 0) {
// 过滤去重:必须对比实时的状态,防止在 handleRefreshMessages 运行期间导致的冲突
const latestMessages = useChatStore.getState().messages
const latestMessages = useChatStore.getState().messages || []
const existingKeys = new Set(latestMessages.map(getMessageKey))
const newOnes = result.messages.filter(m => !existingKeys.has(getMessageKey(m)))
@@ -823,7 +823,7 @@ function ChatPage(_props: ChatPageProps) {
return
}
// 使用实时状态进行去重对比
const latestMessages = useChatStore.getState().messages
const latestMessages = useChatStore.getState().messages || []
const existing = new Set(latestMessages.map(getMessageKey))
const lastMsg = latestMessages[latestMessages.length - 1]
const lastTime = lastMsg?.createTime ?? 0
@@ -1751,7 +1751,7 @@ function ChatPage(_props: ChatPageProps) {
// Range selection with Shift key
if (isShiftKey && lastSelectedIdRef.current !== null && lastSelectedIdRef.current !== localId) {
const currentMsgs = useChatStore.getState().messages
const currentMsgs = useChatStore.getState().messages || []
const idx1 = currentMsgs.findIndex(m => m.localId === lastSelectedIdRef.current)
const idx2 = currentMsgs.findIndex(m => m.localId === localId)
@@ -1821,7 +1821,7 @@ function ChatPage(_props: ChatPageProps) {
const dbPathHint = (msg as any)._db_path
const result = await (window as any).electronAPI.chat.deleteMessage(currentSessionId, msg.localId, msg.createTime, dbPathHint)
if (result.success) {
const currentMessages = useChatStore.getState().messages
const currentMessages = useChatStore.getState().messages || []
const newMessages = currentMessages.filter(m => m.localId !== msg.localId)
useChatStore.getState().setMessages(newMessages)
} else {
@@ -1882,7 +1882,7 @@ function ChatPage(_props: ChatPageProps) {
try {
const result = await (window as any).electronAPI.chat.updateMessage(currentSessionId, editingMessage.message.localId, editingMessage.message.createTime, finalContent)
if (result.success) {
const currentMessages = useChatStore.getState().messages
const currentMessages = useChatStore.getState().messages || []
const newMessages = currentMessages.map(m => {
if (m.localId === editingMessage.message.localId) {
return { ...m, parsedContent: finalContent, content: finalContent, rawContent: finalContent }
@@ -1924,7 +1924,7 @@ function ChatPage(_props: ChatPageProps) {
cancelDeleteRef.current = false
try {
const currentMessages = useChatStore.getState().messages
const currentMessages = useChatStore.getState().messages || []
const selectedIds = Array.from(selectedMessages)
const deletedIds = new Set<number>()
@@ -1948,7 +1948,7 @@ function ChatPage(_props: ChatPageProps) {
setDeleteProgress({ current: i + 1, total: selectedIds.length })
}
const finalMessages = useChatStore.getState().messages.filter(m => !deletedIds.has(m.localId))
const finalMessages = (useChatStore.getState().messages || []).filter(m => !deletedIds.has(m.localId))
useChatStore.getState().setMessages(finalMessages)
setIsSelectionMode(false)
@@ -2137,7 +2137,7 @@ function ChatPage(_props: ChatPageProps) {
<div className="empty-sessions">
<MessageSquare />
<p></p>
<p className="hint"></p>
<p className="hint"></p>
</div>
)}
</div>
@@ -2342,7 +2342,7 @@ function ChatPage(_props: ChatPageProps) {
</div>
)}
{messages.map((msg, index) => {
{(messages || []).map((msg, index) => {
const prevMsg = index > 0 ? messages[index - 1] : undefined
const showDateDivider = shouldShowDateDivider(msg, prevMsg)