Merge pull request #275 from hicccc77/dev

修复了修改消息时可能修改到错误消息的问题
This commit is contained in:
cc
2026-02-18 23:18:55 +08:00
committed by GitHub
9 changed files with 15 additions and 15 deletions

View File

@@ -799,8 +799,8 @@ function registerIpcHandlers() {
return chatService.getNewMessages(sessionId, minTime, limit) return chatService.getNewMessages(sessionId, minTime, limit)
}) })
ipcMain.handle('chat:updateMessage', async (_, sessionId: string, localId: number, newContent: string) => { ipcMain.handle('chat:updateMessage', async (_, sessionId: string, localId: number, createTime: number, newContent: string) => {
return chatService.updateMessage(sessionId, localId, newContent) return chatService.updateMessage(sessionId, localId, createTime, newContent)
}) })
ipcMain.handle('chat:deleteMessage', async (_, sessionId: string, localId: number, createTime: number, dbPathHint?: string) => { ipcMain.handle('chat:deleteMessage', async (_, sessionId: string, localId: number, createTime: number, dbPathHint?: string) => {

View File

@@ -131,8 +131,8 @@ contextBridge.exposeInMainWorld('electronAPI', {
ipcRenderer.invoke('chat:getNewMessages', sessionId, minTime, limit), ipcRenderer.invoke('chat:getNewMessages', sessionId, minTime, limit),
getContact: (username: string) => ipcRenderer.invoke('chat:getContact', username), getContact: (username: string) => ipcRenderer.invoke('chat:getContact', username),
getContactAvatar: (username: string) => ipcRenderer.invoke('chat:getContactAvatar', username), getContactAvatar: (username: string) => ipcRenderer.invoke('chat:getContactAvatar', username),
updateMessage: (sessionId: string, localId: number, newContent: string) => updateMessage: (sessionId: string, localId: number, createTime: number, newContent: string) =>
ipcRenderer.invoke('chat:updateMessage', sessionId, localId, newContent), ipcRenderer.invoke('chat:updateMessage', sessionId, localId, createTime, newContent),
deleteMessage: (sessionId: string, localId: number, createTime: number, dbPathHint?: string) => deleteMessage: (sessionId: string, localId: number, createTime: number, dbPathHint?: string) =>
ipcRenderer.invoke('chat:deleteMessage', sessionId, localId, createTime, dbPathHint), ipcRenderer.invoke('chat:deleteMessage', sessionId, localId, createTime, dbPathHint),
resolveTransferDisplayNames: (chatroomId: string, payerUsername: string, receiverUsername: string) => resolveTransferDisplayNames: (chatroomId: string, payerUsername: string, receiverUsername: string) =>

View File

@@ -276,11 +276,11 @@ class ChatService {
/** /**
* 修改消息内容 * 修改消息内容
*/ */
async updateMessage(sessionId: string, localId: number, newContent: string): Promise<{ success: boolean; error?: string }> { async updateMessage(sessionId: string, localId: number, createTime: number, newContent: string): Promise<{ success: boolean; error?: string }> {
try { try {
const connectResult = await this.ensureConnected() const connectResult = await this.ensureConnected()
if (!connectResult.success) return { success: false, error: connectResult.error } if (!connectResult.success) return { success: false, error: connectResult.error }
return await wcdbService.updateMessage(sessionId, localId, newContent) return await wcdbService.updateMessage(sessionId, localId, createTime, newContent)
} catch (e) { } catch (e) {
return { success: false, error: String(e) } return { success: false, error: String(e) }
} }

View File

@@ -387,9 +387,9 @@ export class WcdbCore {
this.wcdbSetMyWxid = null this.wcdbSetMyWxid = null
} }
// wcdb_status wcdb_update_message(wcdb_handle handle, const char* session_id, int64_t local_id, const char* new_content, char** out_error) // wcdb_status wcdb_update_message(wcdb_handle handle, const char* session_id, int64_t local_id, int32_t create_time, const char* new_content, char** out_error)
try { try {
this.wcdbUpdateMessage = this.lib.func('int32 wcdb_update_message(int64 handle, const char* sessionId, int64 localId, const char* newContent, _Out_ void** outError)') this.wcdbUpdateMessage = this.lib.func('int32 wcdb_update_message(int64 handle, const char* sessionId, int64 localId, int32 createTime, const char* newContent, _Out_ void** outError)')
} catch { } catch {
this.wcdbUpdateMessage = null this.wcdbUpdateMessage = null
} }
@@ -1793,14 +1793,14 @@ export class WcdbCore {
/** /**
* 修改消息内容 * 修改消息内容
*/ */
async updateMessage(sessionId: string, localId: number, newContent: string): Promise<{ success: boolean; error?: string }> { async updateMessage(sessionId: string, localId: number, createTime: number, newContent: string): Promise<{ success: boolean; error?: string }> {
if (!this.initialized || !this.wcdbUpdateMessage) return { success: false, error: 'WCDB Not Initialized or Method Missing' } if (!this.initialized || !this.wcdbUpdateMessage) return { success: false, error: 'WCDB Not Initialized or Method Missing' }
if (!this.handle) return { success: false, error: 'Not Connected' } if (!this.handle) return { success: false, error: 'Not Connected' }
return new Promise((resolve) => { return new Promise((resolve) => {
try { try {
const outError = [null as any] const outError = [null as any]
const result = this.wcdbUpdateMessage(this.handle, sessionId, localId, newContent, outError) const result = this.wcdbUpdateMessage(this.handle, sessionId, localId, createTime, newContent, outError)
if (result !== 0) { if (result !== 0) {
let errorMsg = 'Unknown Error' let errorMsg = 'Unknown Error'

View File

@@ -434,8 +434,8 @@ export class WcdbService {
/** /**
* 修改消息内容 * 修改消息内容
*/ */
async updateMessage(sessionId: string, localId: number, newContent: string): Promise<{ success: boolean; error?: string }> { async updateMessage(sessionId: string, localId: number, createTime: number, newContent: string): Promise<{ success: boolean; error?: string }> {
return this.callWorker('updateMessage', { sessionId, localId, newContent }) return this.callWorker('updateMessage', { sessionId, localId, createTime, newContent })
} }
/** /**

View File

@@ -151,7 +151,7 @@ if (parentPort) {
result = await core.verifyUser(payload.message, payload.hwnd) result = await core.verifyUser(payload.message, payload.hwnd)
break break
case 'updateMessage': case 'updateMessage':
result = await core.updateMessage(payload.sessionId, payload.localId, payload.newContent) result = await core.updateMessage(payload.sessionId, payload.localId, payload.createTime, payload.newContent)
break break
case 'deleteMessage': case 'deleteMessage':
result = await core.deleteMessage(payload.sessionId, payload.localId, payload.createTime, payload.dbPathHint) result = await core.deleteMessage(payload.sessionId, payload.localId, payload.createTime, payload.dbPathHint)

Binary file not shown.

View File

@@ -1658,7 +1658,7 @@ function ChatPage(_props: ChatPageProps) {
} }
try { try {
const result = await (window as any).electronAPI.chat.updateMessage(currentSessionId, editingMessage.message.localId, finalContent) const result = await (window as any).electronAPI.chat.updateMessage(currentSessionId, editingMessage.message.localId, editingMessage.message.createTime, finalContent)
if (result.success) { if (result.success) {
const currentMessages = useChatStore.getState().messages const currentMessages = useChatStore.getState().messages
const newMessages = currentMessages.map(m => { const newMessages = currentMessages.map(m => {

View File

@@ -85,7 +85,7 @@ export interface ElectronAPI {
}> }>
getContact: (username: string) => Promise<Contact | null> getContact: (username: string) => Promise<Contact | null>
getContactAvatar: (username: string) => Promise<{ avatarUrl?: string; displayName?: string } | null> getContactAvatar: (username: string) => Promise<{ avatarUrl?: string; displayName?: string } | null>
updateMessage: (sessionId: string, localId: number, newContent: string) => Promise<{ success: boolean; error?: string }> updateMessage: (sessionId: string, localId: number, createTime: number, newContent: string) => Promise<{ success: boolean; error?: string }>
deleteMessage: (sessionId: string, localId: number, createTime: number, dbPathHint?: string) => Promise<{ success: boolean; error?: string }> deleteMessage: (sessionId: string, localId: number, createTime: number, dbPathHint?: string) => Promise<{ success: boolean; error?: string }>
resolveTransferDisplayNames: (chatroomId: string, payerUsername: string, receiverUsername: string) => Promise<{ payerName: string; receiverName: string }> resolveTransferDisplayNames: (chatroomId: string, payerUsername: string, receiverUsername: string) => Promise<{ payerName: string; receiverName: string }>
getContacts: () => Promise<{ getContacts: () => Promise<{