feat(settings): add auto-launch on system startup feature
Implement auto-launch functionality with proper state synchronization and error handling across Windows, macOS, and Linux platforms. Key changes: - Add auto_launch module using auto-launch crate 0.5 - Define typed errors (AutoLaunchPathError, AutoLaunchEnableError, etc.) - Sync system state with settings.json on app startup - Only call system API when auto-launch state actually changes - Add UI toggle in Window Settings panel - Add i18n support for auto-launch settings (en/zh) Implementation details: - Settings file (settings.json) is the single source of truth - On startup, system state is synced to match settings.json - Error handling uses Rust type system with proper error propagation - Frontend optimized to avoid unnecessary system API calls Platform support: - Windows: HKEY_CURRENT_USER registry modification - macOS: AppleScript-based launch item (configurable to Launch Agent) - Linux: XDG autostart desktop file
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
mod app_config;
|
||||
mod app_store;
|
||||
mod auto_launch;
|
||||
mod claude_mcp;
|
||||
mod claude_plugin;
|
||||
mod codex_config;
|
||||
@@ -559,6 +560,30 @@ pub fn run() {
|
||||
|
||||
// 启动阶段不再无条件保存,避免意外覆盖用户配置。
|
||||
|
||||
// 同步开机自启状态:以 settings.json 为准,保持系统项一致
|
||||
{
|
||||
let settings = crate::settings::get_settings();
|
||||
let system_enabled = crate::auto_launch::is_auto_launch_enabled().unwrap_or(false);
|
||||
|
||||
if settings.launch_on_startup != system_enabled {
|
||||
log::info!(
|
||||
"开机自启状态不一致:settings={}, system={},以 settings 为准",
|
||||
settings.launch_on_startup,
|
||||
system_enabled
|
||||
);
|
||||
|
||||
let sync_result = if settings.launch_on_startup {
|
||||
crate::auto_launch::enable_auto_launch()
|
||||
} else {
|
||||
crate::auto_launch::disable_auto_launch()
|
||||
};
|
||||
|
||||
if let Err(e) = sync_result {
|
||||
log::warn!("同步开机自启状态失败: {}", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 注册 deep-link URL 处理器(使用正确的 DeepLinkExt API)
|
||||
log::info!("=== Registering deep-link URL handler ===");
|
||||
|
||||
@@ -653,6 +678,8 @@ pub fn run() {
|
||||
commands::get_settings,
|
||||
commands::save_settings,
|
||||
commands::restart_app,
|
||||
commands::set_auto_launch,
|
||||
commands::get_auto_launch_status,
|
||||
commands::check_for_updates,
|
||||
commands::is_portable_mode,
|
||||
commands::get_claude_plugin_status,
|
||||
|
||||
Reference in New Issue
Block a user