From 441914b7b860ca3600ca6a9bfc8e7af3f4e65646 Mon Sep 17 00:00:00 2001 From: quexeky Date: Thu, 16 Jan 2025 17:51:30 +1100 Subject: [PATCH] chore(exit): Progress on cleanup and exit --- desktop/src-tauri/src/cleanup.rs | 13 ++++++++++--- .../src/download_manager/download_manager.rs | 7 +++---- desktop/src-tauri/src/lib.rs | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/desktop/src-tauri/src/cleanup.rs b/desktop/src-tauri/src/cleanup.rs index d8817aed..64f0bde0 100644 --- a/desktop/src-tauri/src/cleanup.rs +++ b/desktop/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/desktop/src-tauri/src/download_manager/download_manager.rs b/desktop/src-tauri/src/download_manager/download_manager.rs index 8e5474a0..b73eb978 100644 --- a/desktop/src-tauri/src/download_manager/download_manager.rs +++ b/desktop/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/desktop/src-tauri/src/lib.rs b/desktop/src-tauri/src/lib.rs index e4b92c13..e5a1bf9a 100644 --- a/desktop/src-tauri/src/lib.rs +++ b/desktop/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); } _ => {