下载非内核
This commit is contained in:
+35
-49
@@ -1,17 +1,15 @@
|
||||
use tauri::Manager;
|
||||
|
||||
mod aria2_manager;
|
||||
mod download_engine;
|
||||
mod logger;
|
||||
mod mihomo_manager;
|
||||
mod process_manager;
|
||||
|
||||
use aria2_manager::{
|
||||
Aria2Manager, downloader_add_uri, downloader_change_global_option, downloader_check_kernel_update,
|
||||
downloader_get_active, downloader_get_global_stat, downloader_get_rpc_info, downloader_get_settings,
|
||||
downloader_get_status, downloader_get_stopped, downloader_get_waiting, downloader_install_kernel,
|
||||
downloader_kernel_info, downloader_open_dir, downloader_open_url, downloader_pause, downloader_remove, downloader_restart, downloader_save_settings,
|
||||
downloader_start, downloader_status, downloader_stop, downloader_unpause, downloader_update_kernel,
|
||||
downloader_version,
|
||||
use download_engine::{
|
||||
DownloadEngine, ExtensionServer,
|
||||
downloader_add_task, downloader_get_extension_info, downloader_get_settings, downloader_get_tasks,
|
||||
downloader_open_dir, downloader_open_url, downloader_pause_task, downloader_remove_task,
|
||||
downloader_resume_task, downloader_save_settings, downloader_status,
|
||||
};
|
||||
use logger::{
|
||||
clear_logs, get_log_info, get_logs, log_message, LogManager,
|
||||
@@ -37,13 +35,13 @@ fn greet(name: &str) -> String {
|
||||
fn quit_app(
|
||||
state: tauri::State<'_, ProcessManager>,
|
||||
mihomo: tauri::State<'_, MihomoManager>,
|
||||
aria2: tauri::State<'_, Aria2Manager>,
|
||||
engine: tauri::State<'_, DownloadEngine>,
|
||||
app: tauri::AppHandle,
|
||||
) {
|
||||
// 退出前清理系统代理,避免遗留导致网络问题
|
||||
mihomo.cleanup_on_exit();
|
||||
// 退出前让 aria2 优雅关闭(保存 session,2s 超时)
|
||||
aria2.cleanup_on_exit();
|
||||
// 退出前保存下载引擎状态
|
||||
engine.cleanup_on_exit();
|
||||
// 停止所有子进程(同步 kill + 带超时的 wait,确保进程真正终止)
|
||||
state.stop_all();
|
||||
// 通过 app.exit 触发 RunEvent::ExitRequested,统一退出路径
|
||||
@@ -93,28 +91,15 @@ pub fn run() {
|
||||
proxy_set_system_proxy,
|
||||
proxy_clear_system_proxy,
|
||||
proxy_get_system_proxy,
|
||||
downloader_get_tasks,
|
||||
downloader_add_task,
|
||||
downloader_pause_task,
|
||||
downloader_resume_task,
|
||||
downloader_remove_task,
|
||||
downloader_get_settings,
|
||||
downloader_save_settings,
|
||||
downloader_kernel_info,
|
||||
downloader_check_kernel_update,
|
||||
downloader_update_kernel,
|
||||
downloader_install_kernel,
|
||||
downloader_status,
|
||||
downloader_start,
|
||||
downloader_stop,
|
||||
downloader_restart,
|
||||
downloader_version,
|
||||
downloader_get_global_stat,
|
||||
downloader_get_active,
|
||||
downloader_get_waiting,
|
||||
downloader_get_stopped,
|
||||
downloader_get_status,
|
||||
downloader_add_uri,
|
||||
downloader_pause,
|
||||
downloader_unpause,
|
||||
downloader_remove,
|
||||
downloader_change_global_option,
|
||||
downloader_get_rpc_info,
|
||||
downloader_get_extension_info,
|
||||
downloader_open_dir,
|
||||
downloader_open_url
|
||||
])
|
||||
@@ -132,12 +117,25 @@ pub fn run() {
|
||||
.path()
|
||||
.app_data_dir()
|
||||
.unwrap_or_else(|_| std::path::PathBuf::from("."));
|
||||
|
||||
let mihomo = MihomoManager::new(app_data_dir.clone());
|
||||
app.manage(mihomo);
|
||||
|
||||
// 初始化 Aria2Manager,数据目录: {app_data_dir}/downloader/
|
||||
let aria2 = Aria2Manager::new(app_data_dir);
|
||||
app.manage(aria2);
|
||||
// 初始化 DownloadEngine,数据目录: {app_data_dir}/downloader/
|
||||
let engine = DownloadEngine::new(
|
||||
app_data_dir.join("downloader"),
|
||||
app.handle().clone(),
|
||||
);
|
||||
let settings = engine.get_settings();
|
||||
app.manage(engine.clone());
|
||||
|
||||
// 启动扩展 HTTP API 服务器
|
||||
let server_engine = engine.clone();
|
||||
let server_port = settings.extension_port;
|
||||
let server_secret = settings.extension_secret.clone();
|
||||
tauri::async_runtime::spawn(async move {
|
||||
ExtensionServer::start(server_engine, server_port, server_secret).await;
|
||||
});
|
||||
|
||||
let open = tauri::menu::MenuItem::with_id(app, "open", "设置", true, None::<&str>)?;
|
||||
let quit = tauri::menu::MenuItem::with_id(app, "quit", "退出", true, None::<&str>)?;
|
||||
@@ -155,13 +153,11 @@ pub fn run() {
|
||||
}
|
||||
}
|
||||
"quit" => {
|
||||
// 退出前清理系统代理 + 优雅关闭 aria2 + 停止所有子进程
|
||||
// 直接调用 cleanup + stop_all + exit(quit_app 命令是给前端用的)
|
||||
if let Some(mihomo) = app.try_state::<MihomoManager>() {
|
||||
mihomo.cleanup_on_exit();
|
||||
}
|
||||
if let Some(aria2) = app.try_state::<Aria2Manager>() {
|
||||
aria2.cleanup_on_exit();
|
||||
if let Some(engine) = app.try_state::<DownloadEngine>() {
|
||||
engine.cleanup_on_exit();
|
||||
}
|
||||
if let Some(pm) = app.try_state::<ProcessManager>() {
|
||||
pm.stop_all();
|
||||
@@ -195,13 +191,6 @@ pub fn run() {
|
||||
}
|
||||
}
|
||||
|
||||
// 应用启动时自动启动 aria2(如果用户在设置中开启了自动启动)
|
||||
if let Some(aria2) = app.try_state::<Aria2Manager>() {
|
||||
if let Some(pm) = app.try_state::<ProcessManager>() {
|
||||
aria2.auto_start_on_launch(app.handle(), &pm);
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
})
|
||||
.on_window_event(|window, event| {
|
||||
@@ -213,15 +202,12 @@ pub fn run() {
|
||||
.build(tauri::generate_context!())
|
||||
.expect("error while building tauri application")
|
||||
.run(|app, event| {
|
||||
// 退出请求兜底:捕获所有退出路径(app.exit、窗口全部关闭、系统信号等)
|
||||
// 确保 mihomo/aria2 子进程在任何情况下都被清理
|
||||
// 注:quit_app 命令和托盘菜单已主动调用 cleanup,这里作为二次保险
|
||||
if let tauri::RunEvent::ExitRequested { .. } = event {
|
||||
if let Some(mihomo) = app.try_state::<MihomoManager>() {
|
||||
mihomo.cleanup_on_exit();
|
||||
}
|
||||
if let Some(aria2) = app.try_state::<Aria2Manager>() {
|
||||
aria2.cleanup_on_exit();
|
||||
if let Some(engine) = app.try_state::<DownloadEngine>() {
|
||||
engine.cleanup_on_exit();
|
||||
}
|
||||
if let Some(pm) = app.try_state::<ProcessManager>() {
|
||||
pm.stop_all();
|
||||
|
||||
Reference in New Issue
Block a user