修复联系人页面导出异常

This commit is contained in:
cc
2026-05-04 18:33:02 +08:00
parent 7233f4249d
commit fd0db6e306
2 changed files with 21 additions and 7 deletions

View File

@@ -166,7 +166,15 @@ async function run() {
let result: any let result: any
if (config.mode === 'contacts') { if (config.mode === 'contacts') {
const { contactExportService } = await import('./services/contactExportService') const [{ contactExportService }, { chatService }] = await Promise.all([
import('./services/contactExportService'),
import('./services/chatService')
])
chatService.setRuntimeConfig({
dbPath: config.dbPath,
decryptKey: config.decryptKey,
myWxid: config.myWxid
})
result = await contactExportService.exportContacts( result = await contactExportService.exportContacts(
String(config.outputDir || ''), String(config.outputDir || ''),
config.options || {} config.options || {}

View File

@@ -344,6 +344,7 @@ const FRIEND_EXCLUDE_USERNAMES = new Set(['medianote', 'floatbottle', 'qmessage'
class ChatService { class ChatService {
private configService: ConfigService private configService: ConfigService
private runtimeConfig?: { dbPath?: string; decryptKey?: string; myWxid?: string }
private connected = false private connected = false
private readonly dbMonitorListeners = new Set<(type: string, json: string) => void>() private readonly dbMonitorListeners = new Set<(type: string, json: string) => void>()
private messageCursors: Map<string, { cursor: number; fetched: number; batchSize: number; startTime?: number; endTime?: number; ascending?: boolean; bufferedMessages?: any[] }> = new Map() private messageCursors: Map<string, { cursor: number; fetched: number; batchSize: number; startTime?: number; endTime?: number; ascending?: boolean; bufferedMessages?: any[] }> = new Map()
@@ -452,6 +453,10 @@ class ChatService {
this.voiceTranscriptCache = new LRUCache(1000) // 最多缓存1000条转写记录 this.voiceTranscriptCache = new LRUCache(1000) // 最多缓存1000条转写记录
} }
setRuntimeConfig(config: { dbPath?: string; decryptKey?: string; myWxid?: string }): void {
this.runtimeConfig = config
}
/** /**
* 清理账号目录名 * 清理账号目录名
*/ */
@@ -537,12 +542,9 @@ class ChatService {
*/ */
async connect(): Promise<{ success: boolean; error?: string }> { async connect(): Promise<{ success: boolean; error?: string }> {
try { try {
if (this.connected && wcdbService.isReady()) { const wxid = String(this.runtimeConfig?.myWxid || this.configService.get('myWxid') || '').trim()
return { success: true } const dbPath = String(this.runtimeConfig?.dbPath || this.configService.get('dbPath') || '').trim()
} const decryptKey = String(this.runtimeConfig?.decryptKey || this.configService.get('decryptKey') || '').trim()
const wxid = this.configService.get('myWxid')
const dbPath = this.configService.get('dbPath')
const decryptKey = this.configService.get('decryptKey')
if (!wxid) { if (!wxid) {
return { success: false, error: '请先在设置页面配置微信ID' } return { success: false, error: '请先在设置页面配置微信ID' }
} }
@@ -553,6 +555,10 @@ class ChatService {
return { success: false, error: '请先在设置页面配置解密密钥' } return { success: false, error: '请先在设置页面配置解密密钥' }
} }
if (this.connected && wcdbService.isReady()) {
return { success: true }
}
// 使用 ConfigService 统一解析账号目录 // 使用 ConfigService 统一解析账号目录
const accountDir = this.configService.getAccountDir(dbPath, wxid) const accountDir = this.configService.getAccountDir(dbPath, wxid)
if (!accountDir) { if (!accountDir) {