diff --git a/src-tauri/src/cleanup.rs b/src-tauri/src/cleanup.rs index d8817ae..64f0bde 100644 --- a/src-tauri/src/cleanup.rs +++ b/src-tauri/src/cleanup.rs @@ -1,13 +1,20 @@ use log::{debug, info}; use tauri::AppHandle; +use crate::AppState; + #[tauri::command] -pub fn quit(app: tauri::AppHandle) { - cleanup_and_exit(&app); +pub fn quit(app: tauri::AppHandle, state: tauri::State<'_, std::sync::Mutex>>) { + cleanup_and_exit(&app, &state); } -pub fn cleanup_and_exit(app: &AppHandle) { +pub fn cleanup_and_exit(app: &AppHandle, state: &tauri::State<'_, std::sync::Mutex>>) { debug!("Cleaning up and exiting application"); + let download_manager = state.lock().unwrap().download_manager.clone(); + match download_manager.ensure_terminated() { + Ok(_) => {}, + Err(e) => panic!("{:?}", e), + } app.exit(0); } diff --git a/src-tauri/src/download_manager/download_manager.rs b/src-tauri/src/download_manager/download_manager.rs index 8e5474a..b73eb97 100644 --- a/src-tauri/src/download_manager/download_manager.rs +++ b/src-tauri/src/download_manager/download_manager.rs @@ -3,8 +3,7 @@ use std::{ collections::VecDeque, fmt::Debug, sync::{ - mpsc::{SendError, Sender}, - MutexGuard, + mpsc::{SendError, Sender}, Mutex, MutexGuard }, thread::JoinHandle, }; @@ -84,7 +83,7 @@ pub enum DownloadStatus { /// which provides raw access to the underlying queue. /// THIS EDITING IS BLOCKING!!! pub struct DownloadManager { - terminator: JoinHandle>, + terminator: Mutex>>, download_queue: Queue, progress: CurrentProgressObject, command_sender: Sender, @@ -174,7 +173,7 @@ impl DownloadManager { pub fn resume_downloads(&self) { self.command_sender.send(DownloadManagerSignal::Go).unwrap(); } - pub fn ensure_terminated(self) -> Result, Box> { + pub fn ensure_terminated(&self) -> Result, Box> { self.command_sender .send(DownloadManagerSignal::Finish) .unwrap(); diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index e4b92c1..e5a1bf9 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -315,7 +315,7 @@ pub fn run() { app.webview_windows().get("main").unwrap().show().unwrap(); } "quit" => { - cleanup_and_exit(app); + cleanup_and_exit(app, &state); } _ => {