mirror of
https://github.com/hicccc77/WeFlow.git
synced 2026-03-28 15:07:55 +00:00
fix: 改善错误码 -3001 提示信息并增强 db_storage 路径解析兼容性\n\n- formatInitProtectionError 返回可读的中文错误说明,替代裸错误码\n- resolveDbStoragePath 新增向上查找(最多2级)兜底逻辑\n- 新增 findDbStorageRecursive 递归搜索(最多3层)兜底\n- 解决使用 wx_key 获取密钥后因路径层级不同导致 -3001 报错的问题\n\nFixes #552
This commit is contained in:
@@ -304,7 +304,17 @@ export class WcdbCore {
|
||||
}
|
||||
|
||||
private formatInitProtectionError(code: number): string {
|
||||
return `错误码: ${code}`
|
||||
const messages: Record<number, string> = {
|
||||
'-3001': '未找到数据库目录 (db_storage),请确认已选择正确的微信数据目录(应包含以 wxid_ 开头的子文件夹)',
|
||||
'-3002': '未找到 session.db 文件,请确认微信已登录并且数据目录完整',
|
||||
'-3003': '数据库句柄无效,请重试',
|
||||
'-3004': '恢复数据库连接失败,请重试',
|
||||
'-2301': '动态库加载失败,请检查安装是否完整',
|
||||
'-2302': 'WCDB 初始化异常,请重试',
|
||||
'-2303': 'WCDB 未能成功初始化',
|
||||
}
|
||||
const msg = messages[String(code) as keyof typeof messages]
|
||||
return msg ? `${msg} (错误码: ${code})` : `操作失败,错误码: ${code}`
|
||||
}
|
||||
|
||||
private isLogEnabled(): boolean {
|
||||
@@ -480,6 +490,49 @@ export class WcdbCore {
|
||||
}
|
||||
} catch { }
|
||||
}
|
||||
// 兜底:向上查找 db_storage(最多 2 级),处理用户选择了子目录的情况
|
||||
try {
|
||||
let parent = normalized
|
||||
for (let i = 0; i < 2; i++) {
|
||||
const up = join(parent, '..')
|
||||
if (up === parent) break
|
||||
parent = up
|
||||
const candidateUp = join(parent, 'db_storage')
|
||||
if (existsSync(candidateUp)) return candidateUp
|
||||
if (wxid) {
|
||||
const viaWxidUp = join(parent, wxid, 'db_storage')
|
||||
if (existsSync(viaWxidUp)) return viaWxidUp
|
||||
}
|
||||
}
|
||||
} catch { }
|
||||
// 兜底:递归搜索 basePath 下的 db_storage 目录(最多 3 层深)
|
||||
try {
|
||||
const found = this.findDbStorageRecursive(normalized, 3)
|
||||
if (found) return found
|
||||
} catch { }
|
||||
return null
|
||||
}
|
||||
|
||||
private findDbStorageRecursive(dir: string, maxDepth: number): string | null {
|
||||
if (maxDepth <= 0) return null
|
||||
try {
|
||||
const entries = readdirSync(dir)
|
||||
for (const entry of entries) {
|
||||
if (entry.toLowerCase() === 'db_storage') {
|
||||
const candidate = join(dir, entry)
|
||||
try { if (statSync(candidate).isDirectory()) return candidate } catch { }
|
||||
}
|
||||
}
|
||||
for (const entry of entries) {
|
||||
const entryPath = join(dir, entry)
|
||||
try {
|
||||
if (statSync(entryPath).isDirectory()) {
|
||||
const found = this.findDbStorageRecursive(entryPath, maxDepth - 1)
|
||||
if (found) return found
|
||||
}
|
||||
} catch { }
|
||||
}
|
||||
} catch { }
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user