Compare commits

...

1 Commits

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