feat(migration): enable silent JSON to SQLite migration with toast notification

- Remove environment variable feature gate (CC_SWITCH_ENABLE_JSON_DB_MIGRATION)
- Automatically migrate config.json to SQLite when db doesn't exist
- Archive migrated config.json as config.json.migrated for recovery
- Add migration success flag in init_status.rs (one-time consumption)
- Add get_migration_result command for frontend to query
- Show toast notification on successful migration in App.tsx
This commit is contained in:
Jason
2025-11-25 16:07:54 +08:00
parent 014a7c0e30
commit 2526dbc58f
4 changed files with 72 additions and 53 deletions
+27
View File
@@ -25,6 +25,33 @@ pub fn get_init_error() -> Option<InitErrorPayload> {
cell().read().ok()?.clone()
}
// ============================================================
// 迁移结果状态
// ============================================================
static MIGRATION_SUCCESS: OnceLock<RwLock<bool>> = OnceLock::new();
fn migration_cell() -> &'static RwLock<bool> {
MIGRATION_SUCCESS.get_or_init(|| RwLock::new(false))
}
pub fn set_migration_success() {
if let Ok(mut guard) = migration_cell().write() {
*guard = true;
}
}
/// 获取并消费迁移成功状态(只返回一次 true,之后返回 false)
pub fn take_migration_success() -> bool {
if let Ok(mut guard) = migration_cell().write() {
let val = *guard;
*guard = false;
val
} else {
false
}
}
#[cfg(test)]
mod tests {
use super::*;