mirror of
https://wget.la/https://github.com/Wxw-Gu/WechatExplorer
synced 2026-10-03 18:33:14 +08:00
fix: 更新打包配置并修复群昵称刷新
更新跨平台 WCDB 和运行时命名。 优化消息获取速度 修复群昵称刷新回退与消息发送者显示,并增加可控的消息读取诊断日志和有界查询优化。
This commit is contained in:
@@ -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: ''
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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')
|
||||
})
|
||||
})
|
||||
@@ -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')
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user