diff --git a/electron/main.ts b/electron/main.ts index 5362784..04775f9 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -799,8 +799,8 @@ function registerIpcHandlers() { return chatService.getNewMessages(sessionId, minTime, limit) }) - ipcMain.handle('chat:updateMessage', async (_, sessionId: string, localId: number, newContent: string) => { - return chatService.updateMessage(sessionId, localId, newContent) + ipcMain.handle('chat:updateMessage', async (_, sessionId: string, localId: number, createTime: number, newContent: string) => { + return chatService.updateMessage(sessionId, localId, createTime, newContent) }) ipcMain.handle('chat:deleteMessage', async (_, sessionId: string, localId: number, createTime: number, dbPathHint?: string) => { diff --git a/electron/preload.ts b/electron/preload.ts index d86821f..c581e7c 100644 --- a/electron/preload.ts +++ b/electron/preload.ts @@ -131,8 +131,8 @@ contextBridge.exposeInMainWorld('electronAPI', { ipcRenderer.invoke('chat:getNewMessages', sessionId, minTime, limit), getContact: (username: string) => ipcRenderer.invoke('chat:getContact', username), getContactAvatar: (username: string) => ipcRenderer.invoke('chat:getContactAvatar', username), - updateMessage: (sessionId: string, localId: number, newContent: string) => - ipcRenderer.invoke('chat:updateMessage', sessionId, localId, newContent), + updateMessage: (sessionId: string, localId: number, createTime: number, newContent: string) => + ipcRenderer.invoke('chat:updateMessage', sessionId, localId, createTime, newContent), deleteMessage: (sessionId: string, localId: number, createTime: number, dbPathHint?: string) => ipcRenderer.invoke('chat:deleteMessage', sessionId, localId, createTime, dbPathHint), resolveTransferDisplayNames: (chatroomId: string, payerUsername: string, receiverUsername: string) => diff --git a/electron/services/chatService.ts b/electron/services/chatService.ts index 4dcf078..937d6be 100644 --- a/electron/services/chatService.ts +++ b/electron/services/chatService.ts @@ -273,11 +273,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 { const connectResult = await this.ensureConnected() 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) { return { success: false, error: String(e) } } diff --git a/electron/services/wcdbCore.ts b/electron/services/wcdbCore.ts index 8f9e078..6b68700 100644 --- a/electron/services/wcdbCore.ts +++ b/electron/services/wcdbCore.ts @@ -387,9 +387,9 @@ export class WcdbCore { 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 { - 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 { 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.handle) return { success: false, error: 'Not Connected' } return new Promise((resolve) => { try { 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) { let errorMsg = 'Unknown Error' diff --git a/electron/services/wcdbService.ts b/electron/services/wcdbService.ts index f9bcd7d..3f70d47 100644 --- a/electron/services/wcdbService.ts +++ b/electron/services/wcdbService.ts @@ -434,8 +434,8 @@ export class WcdbService { /** * 修改消息内容 */ - async updateMessage(sessionId: string, localId: number, newContent: string): Promise<{ success: boolean; error?: string }> { - return this.callWorker('updateMessage', { sessionId, localId, newContent }) + async updateMessage(sessionId: string, localId: number, createTime: number, newContent: string): Promise<{ success: boolean; error?: string }> { + return this.callWorker('updateMessage', { sessionId, localId, createTime, newContent }) } /** diff --git a/electron/wcdbWorker.ts b/electron/wcdbWorker.ts index ef60574..4ff161e 100644 --- a/electron/wcdbWorker.ts +++ b/electron/wcdbWorker.ts @@ -151,7 +151,7 @@ if (parentPort) { result = await core.verifyUser(payload.message, payload.hwnd) break 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 case 'deleteMessage': result = await core.deleteMessage(payload.sessionId, payload.localId, payload.createTime, payload.dbPathHint) diff --git a/resources/wcdb_api.dll b/resources/wcdb_api.dll index a5fad48..ecce05d 100644 Binary files a/resources/wcdb_api.dll and b/resources/wcdb_api.dll differ diff --git a/src/pages/ChatPage.tsx b/src/pages/ChatPage.tsx index f5b8dfc..f0f5641 100644 --- a/src/pages/ChatPage.tsx +++ b/src/pages/ChatPage.tsx @@ -1658,7 +1658,7 @@ function ChatPage(_props: ChatPageProps) { } 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) { const currentMessages = useChatStore.getState().messages const newMessages = currentMessages.map(m => { diff --git a/src/types/electron.d.ts b/src/types/electron.d.ts index cdd834d..839bc96 100644 --- a/src/types/electron.d.ts +++ b/src/types/electron.d.ts @@ -85,7 +85,7 @@ export interface ElectronAPI { }> getContact: (username: string) => Promise 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 }> resolveTransferDisplayNames: (chatroomId: string, payerUsername: string, receiverUsername: string) => Promise<{ payerName: string; receiverName: string }> getContacts: () => Promise<{