fix: 更新打包配置并修复群昵称刷新

更新跨平台 WCDB 和运行时命名。
优化消息获取速度
修复群昵称刷新回退与消息发送者显示,并增加可控的消息读取诊断日志和有界查询优化。
This commit is contained in:
Wxw-Gu
2026-08-25 14:26:29 +08:00
committed by 电摇小子
parent fc54c3b946
commit 47e0d7cd1e
25 changed files with 415 additions and 148 deletions
+67
View File
@@ -19,6 +19,7 @@ import {
mergeCachedSelfInfo,
saveBootstrapContacts,
saveBootstrapSelf,
saveCachedGroupSnapshot,
saveCachedMessages
} from '../../src/main/services/bootstrap-cache'
@@ -141,4 +142,70 @@ describe('bootstrap cache', () => {
})
flushBootstrapCacheWritesSync()
})
it('preserves known group nicknames when a refresh only returns contact nicknames', () => {
const groupRoot = '/fixture/group-account'
const first = {
roomId: 'fixture@chatroom',
memberCount: 1,
members: [
{
wxid: 'wxid-member',
nickname: '群内昵称',
groupNickname: '群内昵称',
wechatNickname: '通讯录昵称',
remark: '',
avatar: ''
}
]
}
const refreshed = {
...first,
members: [{ ...first.members[0], nickname: '通讯录昵称', groupNickname: '通讯录昵称' }]
}
saveCachedGroupSnapshot(groupRoot, 'fixture-md5', first)
flushBootstrapCacheWritesSync()
clearBootstrapCache()
const merged = saveCachedGroupSnapshot(groupRoot, 'fixture-md5', refreshed)
expect(merged.members[0]).toMatchObject({
nickname: '群内昵称',
groupNickname: '群内昵称',
wechatNickname: '通讯录昵称'
})
})
it('accepts a refreshed group nickname when it is not a contact fallback', () => {
const groupRoot = '/fixture/group-nickname-update'
const first = {
roomId: 'fixture@chatroom',
memberCount: 1,
members: [
{
wxid: 'wxid-member',
nickname: '旧群昵称',
groupNickname: '旧群昵称',
wechatNickname: '',
remark: '',
avatar: ''
}
]
}
const refreshed = {
...first,
members: [{ ...first.members[0], nickname: '新群昵称', groupNickname: '新群昵称' }]
}
saveCachedGroupSnapshot(groupRoot, 'fixture-md5', first)
flushBootstrapCacheWritesSync()
clearBootstrapCache()
const merged = saveCachedGroupSnapshot(groupRoot, 'fixture-md5', refreshed)
expect(merged.members[0]).toMatchObject({
nickname: '新群昵称',
groupNickname: '新群昵称',
wechatNickname: ''
})
})
})
+32
View File
@@ -0,0 +1,32 @@
import { afterEach, describe, expect, it, vi } from 'vitest'
import { isWcdbDebugEnabled, wcdbDebugLog } from '../../src/main/wcdb-debug'
const originalDebugValue = process.env.WCDB_DEBUG_LOGS
afterEach(() => {
if (originalDebugValue === undefined) delete process.env.WCDB_DEBUG_LOGS
else process.env.WCDB_DEBUG_LOGS = originalDebugValue
vi.restoreAllMocks()
})
describe('WCDB debug logging', () => {
it('is disabled by default', () => {
delete process.env.WCDB_DEBUG_LOGS
const log = vi.spyOn(console, 'log').mockImplementation(() => {})
wcdbDebugLog('[GETMSG-001] hidden')
expect(isWcdbDebugEnabled()).toBe(false)
expect(log).not.toHaveBeenCalled()
})
it('logs when WCDB_DEBUG_LOGS is enabled', () => {
process.env.WCDB_DEBUG_LOGS = '1'
const log = vi.spyOn(console, 'log').mockImplementation(() => {})
wcdbDebugLog('[GETMSG-001] visible')
expect(isWcdbDebugEnabled()).toBe(true)
expect(log).toHaveBeenCalledWith('[GETMSG-001] visible')
})
})
+31
View File
@@ -110,4 +110,35 @@ describe('WCDB group member names', () => {
expectedMember({ nickname: '真实群昵称', wechatNickname: '', remark: '' })
])
})
it('uses the group nickname for message sender display before contact display names', () => {
const client = Object.assign(Object.create(Wcdb4Client.prototype), {
accountRoot: '/fixture/account',
displayNameCache: new Map([['wxid-member', '通讯录昵称']]),
getGroupNicknames: vi.fn(() => new Map([['wxid-member', '真实群昵称']])),
avatarCache: new Map<string, string>(),
myWxid: '',
wxid: ''
}) as Wcdb4Client
const finalizeMessages = (client as unknown as {
finalizeMessages: (
username: string,
rows: Record<string, unknown>[]
) => Array<{ senderNickname?: string }>
}).finalizeMessages
expect(
finalizeMessages.call(client, 'fixture@chatroom', [
{
sender_username: 'wxid-member',
create_time: 1731327263,
local_id: 1,
local_type: 1,
msg_content: 'fixture'
}
])
).toMatchObject([{ senderNickname: '真实群昵称' }])
expect(client.getGroupNicknames).toHaveBeenCalledWith('fixture@chatroom')
})
})