From 719ffa0a249173f84ee98c246deb797fdda56310 Mon Sep 17 00:00:00 2001 From: Wxw-Gu Date: Thu, 3 Sep 2026 18:12:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E4=B8=8E=E5=A4=B4=E5=83=8F=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E9=80=80=E7=BE=A4=E7=9B=91=E6=8E=A7=E5=BC=80=E5=85=B3?= =?UTF-8?q?=20=E5=8F=91=E9=80=81=E9=99=90=E9=80=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/macos/libwcdb_api.dylib | Bin 309696 -> 331568 bytes src/main/index.ts | 18 +- src/main/services/chat-service.ts | 13 +- .../services/group-exit-monitor-service.ts | 56 +++++- src/main/services/wechat-action-gateway.ts | 49 ++++- .../services/wechat-action-log-service.ts | 55 ++++++ src/main/wcdb4-client.ts | 20 ++ src/main/wechat-db.ts | 16 +- src/preload/index.d.ts | 8 +- src/preload/index.ts | 8 +- src/renderer/src/App.tsx | 39 +--- .../conversation/ConversationItem.tsx | 17 +- .../components/layout/PrimaryNavigation.tsx | 7 + .../src/components/layout/navigation.ts | 2 + .../GroupExitMonitorWorkspace.tsx | 32 +++- .../src/features/logs/LogsWorkspace.tsx | 181 ++++++++++++++++++ src/renderer/src/styles/foundation.scss | 3 +- src/renderer/src/utils/contact-avatar.ts | 16 ++ src/renderer/src/utils/contact-search.ts | 17 ++ src/shared/action-log.ts | 24 +++ src/shared/group-exit-monitor.ts | 1 + src/shared/types.ts | 2 + src/shared/wechat-action.ts | 1 + .../conversation-item-avatar.test.tsx | 49 +++++ .../group-exit-monitor-workspace.test.tsx | 23 +++ tests/component/logs-workspace.test.tsx | 68 +++++++ tests/integration/preload-contract.test.ts | 4 + tests/unit/contact-avatar.test.ts | 34 ++++ tests/unit/contact-search.test.ts | 29 +++ tests/unit/group-exit-monitor-service.test.ts | 48 +++++ tests/unit/wcdb-close.test.ts | 15 ++ tests/unit/wechat-action-gateway.test.ts | 146 +++++++++++++- tests/unit/wechat-action-log-service.test.ts | 88 +++++++++ 33 files changed, 1025 insertions(+), 64 deletions(-) create mode 100644 src/main/services/wechat-action-log-service.ts create mode 100644 src/renderer/src/features/logs/LogsWorkspace.tsx create mode 100644 src/renderer/src/utils/contact-avatar.ts create mode 100644 src/renderer/src/utils/contact-search.ts create mode 100644 src/shared/action-log.ts create mode 100644 tests/component/conversation-item-avatar.test.tsx create mode 100644 tests/component/logs-workspace.test.tsx create mode 100644 tests/unit/contact-avatar.test.ts create mode 100644 tests/unit/contact-search.test.ts create mode 100644 tests/unit/wechat-action-log-service.test.ts diff --git a/resources/macos/libwcdb_api.dylib b/resources/macos/libwcdb_api.dylib index 1c855b2cd53a7d3a8f22ca20dbe6a7c0aa376d14..16351e893c1bf3e10884566e578c42bbfbaa70a9 100755 GIT binary patch delta 98130 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 Y8n4=K;beZPQx+=&4KzzSJpwF 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 Pb93~T@=vRU^vM4Qxbs>< diff --git a/src/main/index.ts b/src/main/index.ts index 0e4733f..61735d1 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -112,6 +112,7 @@ import { import { installSafeConsole } from './safe-log' import { agentHubService } from './services/agent-hub-service' import { groupExitMonitorService } from './services/group-exit-monitor-service' +import { wechatActionLogService } from './services/wechat-action-log-service' import { personalWechatSendService } from './services/personal-wechat-send-service' import { getPersonalWechatSendCapability } from './services/personal-wechat-capability-service' import { scheduledReportService } from './services/scheduled-report-service' @@ -1079,11 +1080,14 @@ app.whenReady().then(async () => { return contacts }) - ipcMain.handle('db:getContactAvatars', async (_, usernames: string[]) => { - const avatars = await chat.getContactAvatars(usernames) - if (chat.isReady()) mergeBootstrapAvatars(chat.getCurrentAccountRoot(), avatars) - return avatars - }) + ipcMain.handle( + 'db:getContactAvatars', + async (_, usernames: string[], options?: { refresh?: boolean }) => { + const avatars = await chat.getContactAvatars(usernames, options) + if (chat.isReady()) mergeBootstrapAvatars(chat.getCurrentAccountRoot(), avatars) + return avatars + } + ) ipcMain.handle( 'db:getMessages', @@ -1130,6 +1134,9 @@ app.whenReady().then(async () => { }) ipcMain.handle('group-exit-monitor:getState', () => groupExitMonitorService.getState()) + ipcMain.handle('group-exit-monitor:setEnabled', (_, enabled: boolean) => + groupExitMonitorService.setEnabled(enabled === true) + ) ipcMain.handle( 'group-exit-monitor:setGroups', (_, roomIds: string[], notificationRoomIds?: string[]) => @@ -1146,6 +1153,7 @@ app.whenReady().then(async () => { ipcMain.handle('group-exit-monitor:markRead', (_, readAt?: number) => groupExitMonitorService.markRead(readAt) ) + ipcMain.handle('wechat-action-log:list', () => wechatActionLogService.list()) ipcMain.handle('db:search', (_, keyword: string) => chat.searchMessages(keyword)) ipcMain.handle( diff --git a/src/main/services/chat-service.ts b/src/main/services/chat-service.ts index 48adb79..438500a 100644 --- a/src/main/services/chat-service.ts +++ b/src/main/services/chat-service.ts @@ -44,6 +44,8 @@ export interface FormattedContact { avatar?: string wechatNickname?: string remark?: string + alias?: string + wechatId?: string isFolded?: boolean isMuted?: boolean } @@ -202,6 +204,8 @@ export function listContacts(filter?: string): FormattedContact[] { avatar: typeof user.avatar === 'string' ? user.avatar : undefined, wechatNickname: user.wechatNickname, remark: user.remark, + alias: user.alias, + wechatId: user.wechatId, isFolded: user.isFolded, isMuted: user.isMuted }) @@ -259,13 +263,18 @@ export async function getGroupNamesAsync(): Promise> { return names } -export async function getContactAvatars(usernames: string[]): Promise> { +export async function getContactAvatars( + usernames: string[], + options?: { refresh?: boolean } +): Promise> { if (!dbRef) return {} const normalized = Array.from( new Set((usernames || []).map((username) => String(username || '').trim()).filter(Boolean)) ) if (normalized.length === 0) return {} - return dbRef.getWcdb4Client().getAvatarUrlsAsync(normalized) + const client = dbRef.getWcdb4Client() + if (options?.refresh) client.invalidateAvatarCache(normalized) + return client.getAvatarUrlsAsync(normalized) } function listSourceMessages( diff --git a/src/main/services/group-exit-monitor-service.ts b/src/main/services/group-exit-monitor-service.ts index 06f4898..ca5604e 100644 --- a/src/main/services/group-exit-monitor-service.ts +++ b/src/main/services/group-exit-monitor-service.ts @@ -17,6 +17,7 @@ import { } from '../../shared/group-exit-monitor' type StoredState = { + enabled?: boolean accountRoot?: string events?: Partial[] lastReadAt?: number @@ -70,6 +71,7 @@ type GroupExitActionGateway = Pick & class GroupExitMonitorService { private readonly actionGateway: GroupExitActionGateway private active = false + private enabled = true private nativeMonitorActive = false private snapshots = new Map() private changeTimer: NodeJS.Timeout | null = null @@ -103,7 +105,8 @@ class GroupExitMonitorService { this.ensureLoaded() return { events: [...this.events], - running: this.active && chat.isReady(), + enabled: this.enabled, + running: this.enabled && this.active && chat.isReady(), nativeMonitorActive: this.nativeMonitorActive, monitoredGroupCount: this.snapshots.size, monitorSelectionConfigured: this.monitorSelectionConfigured, @@ -143,6 +146,11 @@ class GroupExitMonitorService { this.active = true this.nativeMonitorActive = nativeMonitorActive this.checkQueued = false + if (!this.enabled) { + this.save() + this.broadcast() + return + } this.initializing = true const scopeGeneration = ++this.scopeGeneration this.eventSequence += 1 @@ -178,7 +186,7 @@ class GroupExitMonitorService { } notifyDatabaseChanged(rawPayload: string): void { - if (!this.active || !isContactEvent(rawPayload)) return + if (!this.enabled || !this.active || !isContactEvent(rawPayload)) return try { chat.getChatDb()?.getWcdb4Client().invalidateGroupNicknameCache() } catch { @@ -193,6 +201,8 @@ class GroupExitMonitorService { } async checkNow(): Promise { + this.ensureLoaded() + if (!this.enabled) return this.getState() if (!this.active && chat.isReady()) await this.start(false) await this.check() return this.getState() @@ -223,7 +233,31 @@ class GroupExitMonitorService { this.save() this.broadcast() // 建立基线放到后台,保存配置可以立即返回。 - if (this.active) void this.check() + if (this.enabled && this.active) void this.check() + return this.getState() + } + + async setEnabled(enabled: boolean): Promise { + this.ensureLoaded() + if (this.enabled === enabled) return this.getState() + + this.enabled = enabled + this.eventSequence += 1 + this.scopeGeneration += 1 + this.checkQueued = false + this.hydrationQueue.clear() + if (this.changeTimer) clearTimeout(this.changeTimer) + this.changeTimer = null + + if (enabled) { + // 用户主动暂停期间的成员变化不补报;重新开启后从当前状态建立新基线。 + this.snapshots.clear() + this.lastCheckedAt = undefined + this.groupNamesRefreshPending = true + } + this.save() + this.broadcast() + if (enabled && this.active && chat.isReady()) await this.check() return this.getState() } @@ -261,6 +295,7 @@ class GroupExitMonitorService { const currentRoot = chat.getCurrentAccountRoot() if ( !this.active || + !this.enabled || !chat.isReady() || !currentRoot || !this.accountRoot || @@ -296,7 +331,7 @@ class GroupExitMonitorService { const result = await this.readMemberships() const membershipCostMs = Date.now() - startedAt let changedGroups = 0 - if (result.groups && this.active && scopeGeneration === this.scopeGeneration) { + if (result.groups && this.enabled && this.active && scopeGeneration === this.scopeGeneration) { changedGroups = await this.applyCurrentMemberships(result.groups, scopeGeneration) } console.log( @@ -367,7 +402,9 @@ class GroupExitMonitorService { const notifications: Array<{ group: GroupSnapshotRecord; event: GroupExitMonitorEvent }> = [] let changedGroups = 0 for (const membership of groups) { - if (!this.active || scopeGeneration !== this.scopeGeneration) return changedGroups + if (!this.enabled || !this.active || scopeGeneration !== this.scopeGeneration) { + return changedGroups + } if (membership.membersValid === false) continue const previous = this.snapshots.get(membership.roomId) // 空数组可能是查询失败,先保留旧基线,避免误报和覆盖最后有效快照。 @@ -407,7 +444,9 @@ class GroupExitMonitorService { } } - if (!this.active || scopeGeneration !== this.scopeGeneration) return changedGroups + if (!this.enabled || !this.active || scopeGeneration !== this.scopeGeneration) { + return changedGroups + } this.lastCheckedAt = Date.now() // 先把事件和新基线作为同一检查点落盘,再执行可失败的通知动作。 this.save() @@ -419,7 +458,7 @@ class GroupExitMonitorService { } private startNextSnapshotHydration(): void { - if (!this.active) { + if (!this.enabled || !this.active) { this.finishHydrationBatch() return } @@ -635,6 +674,7 @@ class GroupExitMonitorService { this.loaded = true try { const stored = fs.readJsonSync(this.filePath()) as StoredState + this.enabled = stored.enabled !== false this.events = normalizeEvents(stored.events) this.actionGateway.registerMemberEvents?.(this.events) this.lastReadAt = Number(stored.lastReadAt) || 0 @@ -654,6 +694,7 @@ class GroupExitMonitorService { } catch { // 首次启动或文件损坏时从空记录开始。 this.events = [] + this.enabled = true this.lastReadAt = 0 this.monitorSelectionConfigured = true this.monitoredRoomIds.clear() @@ -671,6 +712,7 @@ class GroupExitMonitorService { this.filePath(), { accountRoot: this.accountRoot, + enabled: this.enabled, events: this.events, lastReadAt: this.lastReadAt, monitorSelectionConfigured: this.monitorSelectionConfigured, diff --git a/src/main/services/wechat-action-gateway.ts b/src/main/services/wechat-action-gateway.ts index a0f8c1f..4c49387 100644 --- a/src/main/services/wechat-action-gateway.ts +++ b/src/main/services/wechat-action-gateway.ts @@ -21,6 +21,7 @@ import { personalWechatSendService } from './personal-wechat-send-service' const MAX_AUDIT_RECORDS = 500 const MAX_CONTENT_PREVIEW_LENGTH = 240 +export const AUTOMATION_SEND_INTERVAL_MS = 3_000 const AUTOMATION_PURPOSE_ALLOWLIST = new Set(['scheduled_report', 'member_left_notification']) export interface WechatActionGatewayDependencies { @@ -34,6 +35,7 @@ export interface WechatActionGatewayDependencies { | undefined getUserDataPath?: () => string now?: () => Date + wait?: (milliseconds: number) => Promise } interface LoadedAuditState { @@ -46,12 +48,16 @@ export interface WechatActionPolicyContext { } const defaultDependencies = (): Required< - Pick + Pick< + WechatActionGatewayDependencies, + 'getCapability' | 'send' | 'getUserDataPath' | 'now' | 'wait' + > > => ({ getCapability: () => personalWechatCapabilityService.getPersonalWechatSendCapability(), send: (request) => personalWechatSendService.send(request), getUserDataPath: () => app.getPath('userData'), - now: () => new Date() + now: () => new Date(), + wait: (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)) }) /** @@ -60,12 +66,20 @@ const defaultDependencies = (): Required< */ export class WechatActionGateway { private readonly deps: Required< - Pick + Pick< + WechatActionGatewayDependencies, + 'getCapability' | 'send' | 'getUserDataPath' | 'now' | 'wait' + > > & - Omit + Omit< + WechatActionGatewayDependencies, + 'getCapability' | 'send' | 'getUserDataPath' | 'now' | 'wait' + > private readonly memberEvents = new Map() private readonly inFlight = new Map>() private auditState: LoadedAuditState | null = null + private automationSendTail: Promise = Promise.resolve() + private lastAutomationSendStartedAt: number | undefined constructor(deps: WechatActionGatewayDependencies = {}) { this.deps = { ...defaultDependencies(), ...deps } @@ -87,6 +101,10 @@ export class WechatActionGateway { this.memberEvents.clear() } + listAuditRecords(): WechatActionAuditRecord[] { + return this.loadAuditState().records.map((record) => ({ ...record })) + } + async execute(request: WechatActionRequest): Promise { const normalized = normalizeActionRequest(request) const idempotencyKey = normalized ? this.idempotencyKey(normalized) : undefined @@ -176,7 +194,7 @@ export class WechatActionGateway { let sendResult: PersonalWechatSendResult try { - sendResult = await this.deps.send(toPersonalWechatSendRequest(request)) + sendResult = await this.send(request) } catch (error) { return this.finishFailed( actionId, @@ -201,6 +219,26 @@ export class WechatActionGateway { return this.finishSent(actionId, request, idempotencyKey, startedAt, sendResult) } + private send(request: WechatActionRequest): Promise { + const sendRequest = toPersonalWechatSendRequest(request) + if (request.triggerType !== 'automation') return this.deps.send(sendRequest) + + const queued = this.automationSendTail.then(async () => { + const now = this.deps.now().getTime() + const remaining = this.lastAutomationSendStartedAt !== undefined + ? Math.max(0, AUTOMATION_SEND_INTERVAL_MS - (now - this.lastAutomationSendStartedAt)) + : 0 + if (remaining > 0) await this.deps.wait(remaining) + this.lastAutomationSendStartedAt = this.deps.now().getTime() + return this.deps.send(sendRequest) + }) + this.automationSendTail = queued.then( + () => undefined, + () => undefined + ) + return queued + } + private async resolveEventContext( request: WechatActionRequest ): Promise { @@ -364,6 +402,7 @@ export class WechatActionGateway { ...(request.executionId ? { executionId: request.executionId } : {}), recipientType: request.recipient.type, recipientId: request.recipient.id, + ...(request.recipient.name ? { recipientName: request.recipient.name } : {}), contentType: request.content.type, ...contentAudit(request.content), createdAt: result.startedAt, diff --git a/src/main/services/wechat-action-log-service.ts b/src/main/services/wechat-action-log-service.ts new file mode 100644 index 0000000..3f0e517 --- /dev/null +++ b/src/main/services/wechat-action-log-service.ts @@ -0,0 +1,55 @@ +import type { ActionLogEntry } from '../../shared/action-log' +import type { Contact } from '../../shared/types' +import type { WechatActionAuditRecord } from '../../shared/wechat-action' +import * as chat from './chat-service' +import { wechatActionGateway } from './wechat-action-gateway' + +export interface WechatActionLogServiceDependencies { + listAuditRecords?: () => WechatActionAuditRecord[] + listContacts?: () => Contact[] +} + +export class WechatActionLogService { + private readonly listAuditRecords: () => WechatActionAuditRecord[] + private readonly listContacts: () => Contact[] + + constructor(deps: WechatActionLogServiceDependencies = {}) { + this.listAuditRecords = deps.listAuditRecords || (() => wechatActionGateway.listAuditRecords()) + this.listContacts = deps.listContacts || (() => chat.listContacts()) + } + + list(): ActionLogEntry[] { + let contacts: Contact[] = [] + try { + contacts = this.listContacts() + } catch { + // 数据库未连接时仍可查看历史审计。 + } + const names = new Map( + contacts.map((contact) => [ + contact.m_nsUsrName, + contact.m_nsNickName?.trim() || contact.remark?.trim() || contact.m_nsUsrName + ]) + ) + + return this.listAuditRecords() + .map((record) => ({ + id: record.actionId, + category: 'wechat_send' as const, + source: record.origin, + purpose: record.purpose, + timestamp: record.finishedAt || record.startedAt || record.createdAt, + recipientType: record.recipientType, + recipientId: record.recipientId, + recipientName: record.recipientName || names.get(record.recipientId), + contentType: record.contentType, + contentPreview: record.contentPreview, + status: record.sendStatus, + errorCode: record.errorCode, + reason: record.decisionReason + })) + .sort((left, right) => Date.parse(right.timestamp) - Date.parse(left.timestamp)) + } +} + +export const wechatActionLogService = new WechatActionLogService() diff --git a/src/main/wcdb4-client.ts b/src/main/wcdb4-client.ts index 2632fd4..2ffe611 100644 --- a/src/main/wcdb4-client.ts +++ b/src/main/wcdb4-client.ts @@ -13,6 +13,8 @@ export interface Wcdb4Session { avatar?: string wechatNickname?: string remark?: string + alias?: string + wechatId?: string isFolded?: boolean isMuted?: boolean raw: Record @@ -1030,6 +1032,14 @@ export class Wcdb4Client { this.sessionDisplayNamesHydrated = false } + invalidateAvatarCache(usernames?: string[]): void { + if (!usernames) { + this.avatarCache.clear() + return + } + for (const username of this.uniq(usernames)) this.avatarCache.delete(username) + } + /** 清理群备注缓存,不影响会话缓存。 */ invalidateGroupNicknameCache(): void { this.groupNicknameCache.clear() @@ -2813,12 +2823,22 @@ export class Wcdb4Client { 'contactRemark', 'contact_remark' ]) + const alias = this.pickString(row, ['alias', 'aliasName', 'alias_name', 'm_nsAlias']) + const wechatId = this.pickString(row, [ + 'wechatId', + 'wechat_id', + 'wxAccount', + 'wx_account', + 'account' + ]) const status = this.sessionStatusCache.get(username) return { username, nickname, wechatNickname, remark, + alias, + wechatId: wechatId || alias, isFolded: status?.isFolded, isMuted: status?.isMuted, raw: row diff --git a/src/main/wechat-db.ts b/src/main/wechat-db.ts index 23b6d4a..cfaf787 100644 --- a/src/main/wechat-db.ts +++ b/src/main/wechat-db.ts @@ -7,6 +7,8 @@ export interface UserContact { avatar?: string wechatNickname?: string remark?: string + alias?: string + wechatId?: string isFolded?: boolean isMuted?: boolean } @@ -102,15 +104,21 @@ export class WechatDb { avatar: session.avatar, wechatNickname: session.wechatNickname, remark: session.remark, + alias: session.alias, + wechatId: session.wechatId, isFolded: session.isFolded, isMuted: session.isMuted })) .filter((contact) => { if (!keyword) return true - return ( - contact.m_nsUsrName.toLowerCase().includes(keyword) || - contact.nickname.toLowerCase().includes(keyword) - ) + return [ + contact.remark, + contact.wechatNickname, + contact.nickname, + contact.alias, + contact.wechatId, + contact.m_nsUsrName + ].some((value) => value?.toLocaleLowerCase().includes(keyword)) }) } diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts index 70857ee..a63cf3f 100644 --- a/src/preload/index.d.ts +++ b/src/preload/index.d.ts @@ -82,6 +82,7 @@ import type { } from '../shared/personal-wechat-voice-runtime' import type { AppLogEntry } from '../shared/app-log' import type { GroupExitMonitorState } from '../shared/group-exit-monitor' +import type { ActionLogEntry } from '../shared/action-log' import type { AppUpdateCheckResult, AppUpdateInstallResult, @@ -213,7 +214,10 @@ declare global { updatedAt: number } | null> getContacts: (filter?: string) => Promise - getContactAvatars: (usernames: string[]) => Promise> + getContactAvatars: ( + usernames: string[], + options?: { refresh?: boolean } + ) => Promise> getCachedMessages: ( userMd5: string, startTime?: number, @@ -258,6 +262,7 @@ declare global { }[] } | null> getGroupExitMonitorState: () => Promise + setGroupExitMonitorEnabled: (enabled: boolean) => Promise setGroupExitMonitorGroups: ( roomIds: string[], notificationRoomIds?: string[] @@ -266,6 +271,7 @@ declare global { checkGroupExitMonitorNow: () => Promise clearGroupExitMonitorEvents: () => Promise markGroupExitMonitorRead: (readAt?: number) => Promise + listWechatActionLogs: () => Promise onGroupExitMonitorState: (callback: (state: GroupExitMonitorState) => void) => () => void search: (keyword: string) => Promise searchKnowledge: (request: KnowledgeSearchIpcRequest) => Promise diff --git a/src/preload/index.ts b/src/preload/index.ts index 8eabe81..50019de 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -55,6 +55,7 @@ import type { import type { AppLogEntry } from '../shared/app-log' import type { AppUpdateState } from '../shared/app-update' import type { GroupExitMonitorState } from '../shared/group-exit-monitor' +import type { ActionLogEntry } from '../shared/action-log' import type { CacheSummary } from '../shared/cache' import type { ExportRequest, ExportJobProgress } from '../shared/export' import type { ImageDecoderSelectionResult, ImageDecoderStatus } from '../shared/image-decryption' @@ -119,7 +120,8 @@ const api = { getBootstrapCache: () => ipcRenderer.invoke('db:getBootstrapCache'), getStartupCache: () => ipcRenderer.invoke('db:getStartupCache'), getContacts: (filter?: string) => ipcRenderer.invoke('db:getContacts', filter), - getContactAvatars: (usernames: string[]) => ipcRenderer.invoke('db:getContactAvatars', usernames), + getContactAvatars: (usernames: string[], options?: { refresh?: boolean }) => + ipcRenderer.invoke('db:getContactAvatars', usernames, options), getCachedMessages: (userMd5: string, startTime?: number, endTime?: number) => ipcRenderer.invoke('db:getCachedMessages', userMd5, startTime, endTime), getCachedMessagePage: (userMd5: string, startTime?: number, endTime?: number) => @@ -133,6 +135,8 @@ const api = { getGroupSnapshot: (userMd5: string) => ipcRenderer.invoke('db:getGroupSnapshot', userMd5), getGroupExitMonitorState: (): Promise => ipcRenderer.invoke('group-exit-monitor:getState'), + setGroupExitMonitorEnabled: (enabled: boolean): Promise => + ipcRenderer.invoke('group-exit-monitor:setEnabled', enabled), setGroupExitMonitorGroups: ( roomIds: string[], notificationRoomIds?: string[] @@ -148,6 +152,8 @@ const api = { ipcRenderer.invoke('group-exit-monitor:clearEvents'), markGroupExitMonitorRead: (readAt?: number): Promise => ipcRenderer.invoke('group-exit-monitor:markRead', readAt), + listWechatActionLogs: (): Promise => + ipcRenderer.invoke('wechat-action-log:list'), onGroupExitMonitorState: (callback: (state: GroupExitMonitorState) => void) => { const listener = (_event: Electron.IpcRendererEvent, state: GroupExitMonitorState): void => callback(state) diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 2692870..5f5a496 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -43,6 +43,9 @@ import { runtimePlatform, supportsPersonalWechatSend } from './utils/runtime-env import { useToast } from './components/ui' import { AppUpdatePrompt } from './features/app-update/AppUpdatePrompt' import { GroupExitMonitorWorkspace } from './features/group-exit-monitor/GroupExitMonitorWorkspace' +import { LogsWorkspace } from './features/logs/LogsWorkspace' +import { selectContactAvatarRefreshUsernames } from './utils/contact-avatar' +import { filterContacts } from './utils/contact-search' const SIDEBAR_MIN_WIDTH = 260 const SIDEBAR_MAX_WIDTH = 380 @@ -137,16 +140,6 @@ const areMessagesEquivalent = (left: Message[], right: Message[]): boolean => { return true } -const filterContactList = (list: Contact[], keyword: string): Contact[] => { - const lower = keyword.trim().toLowerCase() - if (!lower) return list - return list.filter((contact) => - [contact.m_nsNickName, contact.m_nsUsrName, contact.remark, contact.wechatNickname].some( - (value) => value?.toLowerCase().includes(lower) - ) - ) -} - type GroupSnapshot = { roomId: string memberCount: number @@ -598,7 +591,7 @@ function App(): React.ReactElement { options?.onProgress?.('正在加载联系人...', 35) const list = await window.api.getContacts() setContacts(list) - setFilteredContacts(filterContactList(list, options?.filterKeyword || '')) + setFilteredContacts(filterContacts(list, options?.filterKeyword || '')) const runId = ++contactAvatarHydrationRunRef.current const hydrate = (): Promise => hydrateContactAvatars(list, runId, options?.onProgress) if (options?.waitForAvatars) { @@ -615,21 +608,7 @@ function App(): React.ReactElement { runId: number, onProgress?: (message: string, percent?: number) => void ): Promise => { - const usernames = Array.from( - new Set( - list - .map((contact) => contact.m_nsUsrName) - .filter((username, index) => { - const contact = list[index] - return ( - username && - !contact.avatar && - !username.startsWith('Group_') && - !username.startsWith('Unknown_') - ) - }) - ) - ) + const usernames = selectContactAvatarRefreshUsernames(list) onProgress?.( usernames.length ? `正在加载头像 0/${usernames.length}...` : '头像缓存已就绪', usernames.length ? 55 : 90 @@ -641,7 +620,7 @@ function App(): React.ReactElement { const chunk = usernames.slice(index, index + chunkSize) if (chunk.length === 0) continue try { - const avatars = await window.api.getContactAvatars(chunk) + const avatars = await window.api.getContactAvatars(chunk, { refresh: true }) if (runId !== contactAvatarHydrationRunRef.current) return loadedCount += chunk.length onProgress?.( @@ -1052,7 +1031,7 @@ function App(): React.ReactElement { if (!contact) return try { - const avatars = await window.api.getContactAvatars([contact.m_nsUsrName]) + const avatars = await window.api.getContactAvatars([contact.m_nsUsrName], { refresh: true }) const avatar = avatars[contact.m_nsUsrName] if (avatar) { const updateContact = (item: Contact): Contact => @@ -1457,7 +1436,7 @@ function App(): React.ReactElement { ]) const handleSearchContacts = (keyword: string): void => { - setFilteredContacts(filterContactList(contacts, keyword)) + setFilteredContacts(filterContacts(contacts, keyword)) } const handleRefreshContacts = async (filterKeyword: string): Promise => { @@ -1944,6 +1923,8 @@ function App(): React.ReactElement { onOpenSendSettings={openWechatSendSettings} /> ) + case 'logs': + return case 'agent-hub': return case 'api': diff --git a/src/renderer/src/components/conversation/ConversationItem.tsx b/src/renderer/src/components/conversation/ConversationItem.tsx index c000d6c..5deb607 100644 --- a/src/renderer/src/components/conversation/ConversationItem.tsx +++ b/src/renderer/src/components/conversation/ConversationItem.tsx @@ -16,22 +16,29 @@ export function ConversationItem({ const wxid = contact.m_nsUsrName const displayName = nickname || wxid || '未命名会话' const initial = (displayName || wxid || '?').charAt(0) - const [repairedAvatar, setRepairedAvatar] = useState<{ username: string; source: string }>() + const [repairedAvatar, setRepairedAvatar] = useState<{ + username: string + source: string + replaces: string + }>() const [failedAvatar, setFailedAvatar] = useState<{ username: string; source: string }>() - const repairedSource = repairedAvatar?.username === wxid ? repairedAvatar.source : undefined + const repairedSource = + repairedAvatar?.username === wxid && repairedAvatar.replaces === contact.avatar + ? repairedAvatar.source + : undefined const avatar = repairedSource || contact.avatar const avatarFailed = failedAvatar?.username === wxid && failedAvatar.source === avatar const handleAvatarError = (): void => { if (!avatar || avatarFailed) return setFailedAvatar({ username: wxid, source: avatar }) - if (contact.type !== 'group' || avatar.startsWith('data:')) return + if (avatar.startsWith('data:')) return void window.api - .getContactAvatars([wxid]) + .getContactAvatars([wxid], { refresh: true }) .then((avatars) => { const fallback = avatars[wxid] if (!fallback || fallback === avatar) return - setRepairedAvatar({ username: wxid, source: fallback }) + setRepairedAvatar({ username: wxid, source: fallback, replaces: avatar }) setFailedAvatar(undefined) }) .catch(() => undefined) diff --git a/src/renderer/src/components/layout/PrimaryNavigation.tsx b/src/renderer/src/components/layout/PrimaryNavigation.tsx index 7aa9cac..c9d90eb 100644 --- a/src/renderer/src/components/layout/PrimaryNavigation.tsx +++ b/src/renderer/src/components/layout/PrimaryNavigation.tsx @@ -46,6 +46,13 @@ function NavIcon({ page }: NavIconProps): React.ReactElement { ) + case 'logs': + return ( + + ) case 'export': return (

实时关注微信群成员变化,成员数量减少时自动留下退群动态。

+