mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-28 16:56:16 +08:00
2526dbc58f
- 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
61 lines
1.8 KiB
Rust
61 lines
1.8 KiB
Rust
#![allow(non_snake_case)]
|
|
|
|
use crate::init_status::InitErrorPayload;
|
|
use tauri::AppHandle;
|
|
use tauri_plugin_opener::OpenerExt;
|
|
|
|
/// 打开外部链接
|
|
#[tauri::command]
|
|
pub async fn open_external(app: AppHandle, url: String) -> Result<bool, String> {
|
|
let url = if url.starts_with("http://") || url.starts_with("https://") {
|
|
url
|
|
} else {
|
|
format!("https://{url}")
|
|
};
|
|
|
|
app.opener()
|
|
.open_url(&url, None::<String>)
|
|
.map_err(|e| format!("打开链接失败: {e}"))?;
|
|
|
|
Ok(true)
|
|
}
|
|
|
|
/// 检查更新
|
|
#[tauri::command]
|
|
pub async fn check_for_updates(handle: AppHandle) -> Result<bool, String> {
|
|
handle
|
|
.opener()
|
|
.open_url(
|
|
"https://github.com/farion1231/cc-switch/releases/latest",
|
|
None::<String>,
|
|
)
|
|
.map_err(|e| format!("打开更新页面失败: {e}"))?;
|
|
|
|
Ok(true)
|
|
}
|
|
|
|
/// 判断是否为便携版(绿色版)运行
|
|
#[tauri::command]
|
|
pub async fn is_portable_mode() -> Result<bool, String> {
|
|
let exe_path = std::env::current_exe().map_err(|e| format!("获取可执行路径失败: {e}"))?;
|
|
if let Some(dir) = exe_path.parent() {
|
|
Ok(dir.join("portable.ini").is_file())
|
|
} else {
|
|
Ok(false)
|
|
}
|
|
}
|
|
|
|
/// 获取应用启动阶段的初始化错误(若有)。
|
|
/// 用于前端在早期主动拉取,避免事件订阅竞态导致的提示缺失。
|
|
#[tauri::command]
|
|
pub async fn get_init_error() -> Result<Option<InitErrorPayload>, String> {
|
|
Ok(crate::init_status::get_init_error())
|
|
}
|
|
|
|
/// 获取 JSON→SQLite 迁移结果(若有)。
|
|
/// 只返回一次 true,之后返回 false,用于前端显示一次性 Toast 通知。
|
|
#[tauri::command]
|
|
pub async fn get_migration_result() -> Result<bool, String> {
|
|
Ok(crate::init_status::take_migration_success())
|
|
}
|