mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-28 00:35:32 +08:00
162c92144c
Implement system auto-launch feature to allow CC-Switch to start automatically on system boot, improving user convenience. Backend Implementation: - auto_launch.rs: New module for auto-launch management * Cross-platform support using auto-launch crate * Enable/disable auto-launch with system integration * Proper error handling for permission issues * Platform-specific implementations (macOS/Windows/Linux) Command Layer: - Add get_auto_launch command to check current status - Add set_auto_launch command to toggle auto-start - Integrate commands with settings API Settings Integration: - Extend Settings struct with auto_launch field - Persist auto-launch preference in settings store - Automatic state synchronization on app startup Dependencies: - Add auto-launch ^0.5.0 to Cargo.toml - Update Cargo.lock with new dependency tree Technical Details: - Uses platform-specific auto-launch mechanisms: * macOS: Login Items via LaunchServices * Windows: Registry Run key * Linux: XDG autostart desktop files - Handles edge cases like permission denials gracefully - Maintains settings consistency across app restarts This feature enables users to have CC-Switch readily available after system boot without manual intervention, particularly useful for users who frequently switch between API providers.
41 lines
1.3 KiB
Rust
41 lines
1.3 KiB
Rust
use crate::error::AppError;
|
|
use auto_launch::AutoLaunch;
|
|
|
|
/// 初始化 AutoLaunch 实例
|
|
fn get_auto_launch() -> Result<AutoLaunch, AppError> {
|
|
let app_name = "CC Switch";
|
|
let app_path =
|
|
std::env::current_exe().map_err(|e| AppError::Message(format!("无法获取应用路径: {e}")))?;
|
|
|
|
let auto_launch = AutoLaunch::new(app_name, &app_path.to_string_lossy(), false, &[] as &[&str]);
|
|
Ok(auto_launch)
|
|
}
|
|
|
|
/// 启用开机自启
|
|
pub fn enable_auto_launch() -> Result<(), AppError> {
|
|
let auto_launch = get_auto_launch()?;
|
|
auto_launch
|
|
.enable()
|
|
.map_err(|e| AppError::Message(format!("启用开机自启失败: {e}")))?;
|
|
log::info!("已启用开机自启");
|
|
Ok(())
|
|
}
|
|
|
|
/// 禁用开机自启
|
|
pub fn disable_auto_launch() -> Result<(), AppError> {
|
|
let auto_launch = get_auto_launch()?;
|
|
auto_launch
|
|
.disable()
|
|
.map_err(|e| AppError::Message(format!("禁用开机自启失败: {e}")))?;
|
|
log::info!("已禁用开机自启");
|
|
Ok(())
|
|
}
|
|
|
|
/// 检查是否已启用开机自启
|
|
pub fn is_auto_launch_enabled() -> Result<bool, AppError> {
|
|
let auto_launch = get_auto_launch()?;
|
|
auto_launch
|
|
.is_enabled()
|
|
.map_err(|e| AppError::Message(format!("检查开机自启状态失败: {e}")))
|
|
}
|