mirror of
https://github.com/hellodigua/ChatLab.git
synced 2026-10-25 17:54:34 +08:00
fix(electron): fix data migration path mismatch after package extraction
The extraction of Electron code to apps/desktop/ changed the package name
from "ChatLab" to "@openchatlab/desktop", which caused app.getPath('userData')
to return a wrong path in dev mode. This made the migration system unable to
find existing databases, resulting in a fresh-app experience for upgrading users.
- Add productName "ChatLab" to desktop package.json to ensure correct userData path
- Add verifyDataPath() safety net: auto-correct config.toml when configured dir
has no databases but old Electron path does
This commit is contained in:
1 parent
1c6f4b3776
commit
ba851f4ae9
3 files changed
+35
No files matched your search
@@ -12,6 +12,7 @@ import {
|
||||
cleanupPendingDeleteDir,
|
||||
needsUnifiedDirMigration,
|
||||
migrateToUnifiedDirs,
|
||||
verifyDataPath,
|
||||
getSystemDataDir,
|
||||
getAiDataDir,
|
||||
} from './paths'
|
||||
@@ -96,6 +97,9 @@ class MainProcess {
|
||||
this.migrateToUnifiedDirsIfNeeded()
|
||||
}
|
||||
|
||||
// 验证数据路径是否正确(安全网:防止 config.toml 指向空目录)
|
||||
verifyDataPath()
|
||||
|
||||
// 确保应用目录存在
|
||||
ensureAppDirs()
|
||||
|
||||
|
||||
@@ -720,3 +720,33 @@ export function migrateToUnifiedDirs(): { success: boolean; error?: string } {
|
||||
return { success: false, error: errorMsg }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify that the configured user_data_dir actually has database files.
|
||||
* If the configured dir is empty but the old Electron path has databases,
|
||||
* auto-correct config.toml to point to the old path.
|
||||
*
|
||||
* This acts as a safety net in case migration was skipped or config was overwritten.
|
||||
*/
|
||||
export function verifyDataPath(): void {
|
||||
const currentDir = getUserDataDir()
|
||||
const currentDbDir = path.join(currentDir, 'databases')
|
||||
const hasCurrentDbs = fs.existsSync(currentDbDir) && fs.readdirSync(currentDbDir).some((f) => f.endsWith('.db'))
|
||||
|
||||
if (hasCurrentDbs) return
|
||||
|
||||
const oldDir = getElectronLegacyDataDir()
|
||||
if (path.resolve(currentDir) === path.resolve(oldDir)) return
|
||||
|
||||
const oldDbDir = path.join(oldDir, 'databases')
|
||||
if (!fs.existsSync(oldDbDir)) return
|
||||
|
||||
const hasOldDbs = fs.readdirSync(oldDbDir).some((f) => f.endsWith('.db'))
|
||||
if (!hasOldDbs) return
|
||||
|
||||
console.warn(
|
||||
`[Paths] Data path mismatch: configured dir ${currentDir} has no databases, but old path ${oldDir} does. Auto-correcting config.toml.`
|
||||
)
|
||||
writeConfigField('data', 'user_data_dir', oldDir)
|
||||
_userDataDir = oldDir
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@openchatlab/desktop",
|
||||
"version": "0.19.0",
|
||||
"productName": "ChatLab",
|
||||
"private": true,
|
||||
"description": "ChatLab Desktop — Electron 桌面客户端",
|
||||
"main": "./out/main/index.js",
|
||||
|
||||
Reference in new issue
Block a user