Files
weflow-new/electron/services/export/contacts/contactResolver.ts
T
2026-06-30 00:18:31 +08:00

66 lines
2.0 KiB
TypeScript

import { ExportOptions, ExportDisplayProfile } from '../types'
import { resolveGroupNicknameByCandidates } from './groupNickname'
export function getPreferredDisplayName(
wxid: string,
nickname: string,
remark: string,
groupNickname: string,
preference: 'group-nickname' | 'remark' | 'nickname' = 'remark'
): string {
switch (preference) {
case 'group-nickname':
return groupNickname || remark || nickname || wxid
case 'remark':
return remark || nickname || wxid
case 'nickname':
return nickname || wxid
default:
return nickname || wxid
}
}
export async function resolveExportDisplayProfile(
wxid: string,
preference: ExportOptions['displayNamePreference'],
getContact: (username: string) => Promise<{ success: boolean; contact?: any; error?: string }>,
groupNicknamesMap: Map<string, string>,
fallbackDisplayName = '',
extraGroupNicknameCandidates: Array<string | undefined | null> = []
): Promise<ExportDisplayProfile> {
const resolvedWxid = String(wxid || '').trim() || String(fallbackDisplayName || '').trim() || 'unknown'
const contactResult = resolvedWxid ? await getContact(resolvedWxid) : { success: false as const }
const contact = contactResult.success ? contactResult.contact : null
const nickname = String(contact?.nickName || contact?.nick_name || fallbackDisplayName || resolvedWxid)
const remark = String(contact?.remark || '')
const alias = String(contact?.alias || '')
const groupNickname = resolveGroupNicknameByCandidates(
groupNicknamesMap,
[
resolvedWxid,
contact?.username,
contact?.userName,
contact?.encryptUsername,
contact?.encryptUserName,
alias,
...extraGroupNicknameCandidates
]
) || ''
const displayName = getPreferredDisplayName(
resolvedWxid,
nickname,
remark,
groupNickname,
preference || 'remark'
)
return {
wxid: resolvedWxid,
nickname,
remark,
alias,
groupNickname,
displayName
}
}