From f8feb1c5b3501f5fd930314718d0aa2388cddadc Mon Sep 17 00:00:00 2001 From: NimBold Date: Fri, 28 Aug 2026 00:33:19 +0330 Subject: [PATCH] fix(startup): further split Windows invoke handlers (#37) --- src-tauri/src/lib.rs | 303 +++++++++++++++++++++++-------------------- 1 file changed, 160 insertions(+), 143 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index e9c0fe1..c5586c9 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -18217,6 +18217,9 @@ fn set_log_stream_active(caller: tauri::WebviewWindow, active: bool) -> Result<( Ok(()) } +type FirelinkInvokeHandler = + Box) -> bool + Send + Sync>; + #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { ensure_reqwest_crypto_provider(); @@ -19864,8 +19867,7 @@ pub fn run() { // Tauri expands generate_handler! into one command match whose arms include // argument extraction for every command. A single 1.4-era table was large // enough to overflow the Windows main-thread stack on the first invoke. - let startup_handler: Box) -> bool + Send + Sync> = - Box::new(tauri::generate_handler![ + let engine_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ get_engine_status, get_aria2_engine_status, get_ytdlp_engine_status, @@ -19875,6 +19877,8 @@ pub fn run() { test_aria2c, test_ffmpeg, test_deno, + ]); + let media_startup_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ pause_download, resume_download, fetch_metadata, @@ -19886,6 +19890,8 @@ pub fn run() { begin_dock_badge_session, update_dock_badge, get_platform_info, + ]); + let system_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ approve_download_root, set_prevent_sleep, set_power_preferences, @@ -19895,14 +19901,15 @@ pub fn run() { check_automation_permission, request_automation_permission, open_automation_settings, - ]); - let account_and_extension_handler: Box) -> bool + Send + Sync> = - Box::new(tauri::generate_handler![ + ]); + let keychain_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ set_keychain_password, get_keychain_password, delete_keychain_password, save_site_login, delete_site_login, + ]); + let pairing_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ hydrate_extension_pairing_token, get_session_pairing_token, regenerate_pairing_token, @@ -19912,6 +19919,8 @@ pub fn run() { abandon_keychain_grant, authorize_keychain_access, acknowledge_pairing_token_change, + ]); + let extension_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ inspect_download_target, toggle_tray_icon, set_extension_pairing_token, @@ -19919,9 +19928,8 @@ pub fn run() { set_extension_frontend_ready, ack_frontend_exit, ack_extension_download, - ]); - let torrent_handler: Box) -> bool + Send + Sync> = - Box::new(tauri::generate_handler![ + ]); + let torrent_limits_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ set_concurrent_limit, set_queue_concurrency_limits, set_download_speed_limit, @@ -19929,6 +19937,8 @@ pub fn run() { set_torrent_peer_options, get_torrent_peers, get_torrent_availability, + ]); + let torrent_files_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ get_torrent_file_progress, get_torrent_piece_progress, get_torrent_file_selection, @@ -19936,6 +19946,8 @@ pub fn run() { get_torrent_details, get_torrent_magnet_link, export_torrent_metadata, + ]); + let torrent_storage_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ move_torrent_data, cancel_torrent_move_data, verify_torrent_data, @@ -19944,12 +19956,11 @@ pub fn run() { set_torrent_max_open_files, set_torrent_overall_upload_limit, set_global_speed_limit, + ]); + let download_queue_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ remove_download, get_download_primary_path, detach_download_for_reconfigure, - ]); - let queue_and_properties_handler: Box) -> bool + Send + Sync> = - Box::new(tauri::generate_handler![ enqueue_download, enqueue_many, cancel_enqueue_generation, @@ -19957,25 +19968,29 @@ pub fn run() { move_many_in_queue, remove_from_queue, get_pending_order, - commands::reveal_in_file_manager, - commands::open_downloaded_file, - properties_window::open_download_properties_window, - properties_window::get_properties_window_download_id, - properties_window::properties_window_send_ready, - properties_window::properties_window_reveal, - properties_window::properties_window_send_action, - properties_window::validate_properties_window_request, - properties_window::close_download_properties_window, - properties_window::properties_window_registry_remove_for_download, - ]); - let persistence_and_logs_handler: Box) -> bool + Send + Sync> = + ]); + let commands_and_properties_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ + commands::reveal_in_file_manager, + commands::open_downloaded_file, + properties_window::open_download_properties_window, + properties_window::get_properties_window_download_id, + properties_window::properties_window_send_ready, + properties_window::properties_window_reveal, + properties_window::properties_window_send_action, + properties_window::validate_properties_window_request, + properties_window::close_download_properties_window, + properties_window::properties_window_registry_remove_for_download, + ]); + let parity_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ parity::get_system_proxy, parity::get_file_category, parity::check_for_updates, parity::is_supported_media, parity::get_supported_media_domains, parity::create_category_directories, + ]); + let database_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ db_save_settings, db_load_settings, canonicalize_torrent_network_setting, @@ -19986,136 +20001,138 @@ pub fn run() { reconcile_torrent_removal_reservations, db_get_all_queues, db_replace_queues, + ]); + let logs_handler: FirelinkInvokeHandler = Box::new(tauri::generate_handler![ read_logs, export_logs, toggle_log_pause, is_log_paused, clear_logs, set_log_stream_active, - ]); + ]); builder .invoke_handler(move |invoke| { - let command = invoke.message.command().to_owned(); - match command.as_str() { - "get_engine_status" - | "get_aria2_engine_status" - | "get_ytdlp_engine_status" - | "get_ffmpeg_engine_status" - | "get_deno_engine_status" - | "test_ytdlp" - | "test_aria2c" - | "test_ffmpeg" - | "test_deno" - | "pause_download" - | "resume_download" - | "fetch_metadata" - | "inspect_torrent" - | "rekey_torrent_metadata" - | "remove_torrent_metadata" - | "fetch_media_metadata" - | "fetch_media_playlist_metadata" - | "begin_dock_badge_session" - | "update_dock_badge" - | "get_platform_info" - | "approve_download_root" - | "set_prevent_sleep" - | "set_power_preferences" - | "get_free_space" - | "perform_system_action" - | "ack_schedule_trigger" - | "check_automation_permission" - | "request_automation_permission" - | "open_automation_settings" => startup_handler(invoke), - "set_keychain_password" - | "get_keychain_password" - | "delete_keychain_password" - | "save_site_login" - | "delete_site_login" - | "hydrate_extension_pairing_token" - | "get_session_pairing_token" - | "regenerate_pairing_token" - | "grant_keychain_access" - | "get_keychain_grant_status" - | "accept_keychain_grant" - | "abandon_keychain_grant" - | "authorize_keychain_access" - | "acknowledge_pairing_token_change" - | "inspect_download_target" - | "toggle_tray_icon" - | "set_extension_pairing_token" - | "get_extension_server_port" - | "set_extension_frontend_ready" - | "ack_frontend_exit" - | "ack_extension_download" => account_and_extension_handler(invoke), - "set_concurrent_limit" - | "set_queue_concurrency_limits" - | "set_download_speed_limit" - | "set_torrent_upload_limit" - | "set_torrent_peer_options" - | "get_torrent_peers" - | "get_torrent_availability" - | "get_torrent_file_progress" - | "get_torrent_piece_progress" - | "get_torrent_file_selection" - | "set_torrent_file_selection" - | "get_torrent_details" - | "get_torrent_magnet_link" - | "export_torrent_metadata" - | "move_torrent_data" - | "cancel_torrent_move_data" - | "verify_torrent_data" - | "get_torrent_web_seeds" - | "set_torrent_web_seeds" - | "set_torrent_max_open_files" - | "set_torrent_overall_upload_limit" - | "set_global_speed_limit" - | "remove_download" - | "get_download_primary_path" - | "detach_download_for_reconfigure" => torrent_handler(invoke), - "enqueue_download" - | "enqueue_many" - | "cancel_enqueue_generation" - | "move_in_queue" - | "move_many_in_queue" - | "remove_from_queue" - | "get_pending_order" - | "reveal_in_file_manager" - | "open_downloaded_file" - | "open_download_properties_window" - | "get_properties_window_download_id" - | "properties_window_send_ready" - | "properties_window_reveal" - | "properties_window_send_action" - | "validate_properties_window_request" - | "close_download_properties_window" - | "properties_window_registry_remove_for_download" => { - queue_and_properties_handler(invoke) + let command = invoke.message.command().to_owned(); + match command.as_str() { + "get_engine_status" + | "get_aria2_engine_status" + | "get_ytdlp_engine_status" + | "get_ffmpeg_engine_status" + | "get_deno_engine_status" + | "test_ytdlp" + | "test_aria2c" + | "test_ffmpeg" + | "test_deno" => engine_handler(invoke), + "pause_download" + | "resume_download" + | "fetch_metadata" + | "inspect_torrent" + | "rekey_torrent_metadata" + | "remove_torrent_metadata" + | "fetch_media_metadata" + | "fetch_media_playlist_metadata" + | "begin_dock_badge_session" + | "update_dock_badge" + | "get_platform_info" => media_startup_handler(invoke), + "approve_download_root" + | "set_prevent_sleep" + | "set_power_preferences" + | "get_free_space" + | "perform_system_action" + | "ack_schedule_trigger" + | "check_automation_permission" + | "request_automation_permission" + | "open_automation_settings" => system_handler(invoke), + "set_keychain_password" + | "get_keychain_password" + | "delete_keychain_password" + | "save_site_login" + | "delete_site_login" => keychain_handler(invoke), + "hydrate_extension_pairing_token" + | "get_session_pairing_token" + | "regenerate_pairing_token" + | "grant_keychain_access" + | "get_keychain_grant_status" + | "accept_keychain_grant" + | "abandon_keychain_grant" + | "authorize_keychain_access" + | "acknowledge_pairing_token_change" => pairing_handler(invoke), + "inspect_download_target" + | "toggle_tray_icon" + | "set_extension_pairing_token" + | "get_extension_server_port" + | "set_extension_frontend_ready" + | "ack_frontend_exit" + | "ack_extension_download" => extension_handler(invoke), + "set_concurrent_limit" + | "set_queue_concurrency_limits" + | "set_download_speed_limit" + | "set_torrent_upload_limit" + | "set_torrent_peer_options" + | "get_torrent_peers" + | "get_torrent_availability" => torrent_limits_handler(invoke), + "get_torrent_file_progress" + | "get_torrent_piece_progress" + | "get_torrent_file_selection" + | "set_torrent_file_selection" + | "get_torrent_details" + | "get_torrent_magnet_link" + | "export_torrent_metadata" => torrent_files_handler(invoke), + "move_torrent_data" + | "cancel_torrent_move_data" + | "verify_torrent_data" + | "get_torrent_web_seeds" + | "set_torrent_web_seeds" + | "set_torrent_max_open_files" + | "set_torrent_overall_upload_limit" + | "set_global_speed_limit" => torrent_storage_handler(invoke), + "remove_download" + | "get_download_primary_path" + | "detach_download_for_reconfigure" + | "enqueue_download" + | "enqueue_many" + | "cancel_enqueue_generation" + | "move_in_queue" + | "move_many_in_queue" + | "remove_from_queue" + | "get_pending_order" => download_queue_handler(invoke), + "reveal_in_file_manager" + | "open_downloaded_file" + | "open_download_properties_window" + | "get_properties_window_download_id" + | "properties_window_send_ready" + | "properties_window_reveal" + | "properties_window_send_action" + | "validate_properties_window_request" + | "close_download_properties_window" + | "properties_window_registry_remove_for_download" => { + commands_and_properties_handler(invoke) + } + "get_system_proxy" + | "get_file_category" + | "check_for_updates" + | "is_supported_media" + | "get_supported_media_domains" + | "create_category_directories" => parity_handler(invoke), + "db_save_settings" + | "db_load_settings" + | "canonicalize_torrent_network_setting" + | "db_get_all_downloads" + | "db_replace_downloads" + | "db_commit_download_state" + | "clear_torrent_removal_paths" + | "reconcile_torrent_removal_reservations" + | "db_get_all_queues" + | "db_replace_queues" => database_handler(invoke), + "read_logs" + | "export_logs" + | "toggle_log_pause" + | "is_log_paused" + | "clear_logs" + | "set_log_stream_active" => logs_handler(invoke), + _ => false, } - "get_system_proxy" - | "get_file_category" - | "check_for_updates" - | "is_supported_media" - | "get_supported_media_domains" - | "create_category_directories" - | "db_save_settings" - | "db_load_settings" - | "canonicalize_torrent_network_setting" - | "db_get_all_downloads" - | "db_replace_downloads" - | "db_commit_download_state" - | "clear_torrent_removal_paths" - | "reconcile_torrent_removal_reservations" - | "db_get_all_queues" - | "db_replace_queues" - | "read_logs" - | "export_logs" - | "toggle_log_pause" - | "is_log_paused" - | "clear_logs" - | "set_log_stream_active" => persistence_and_logs_handler(invoke), - _ => false, - } }) .build(tauri::generate_context!()) .expect("error while building tauri application")