From 18b41fd707af311a3adf6578d87fc2b45a9e8574 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 19 Feb 2025 11:08:45 +0100 Subject: [PATCH] feat: handle quit on close setting --- src/stremio_app/app.rs | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/stremio_app/app.rs b/src/stremio_app/app.rs index 545a36e..10bce2b 100644 --- a/src/stremio_app/app.rs +++ b/src/stremio_app/app.rs @@ -1,6 +1,7 @@ use native_windows_derive::NwgUi; use native_windows_gui as nwg; use rand::Rng; +use serde::Deserialize; use serde_json; use std::{ cell::RefCell, @@ -29,6 +30,12 @@ use crate::stremio_app::{ use super::stremio_server::StremioServer; +#[derive(Default, Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct Settings { + pub quit_on_close: bool, +} + #[derive(Default, NwgUi)] pub struct MainWindow { pub command: String, @@ -41,6 +48,7 @@ pub struct MainWindow { pub release_candidate: bool, pub autoupdater_setup_file: Arc>>, pub saved_window_style: RefCell, + pub settings: Arc>, #[nwg_resource] pub embed: nwg::EmbedResource, #[nwg_resource(source_embed: Some(&data.embed), source_embed_str: Some("MAINICON"))] @@ -223,6 +231,8 @@ impl MainWindow { let hide_splash_sender = self.hide_splash_notice.sender(); let focus_sender = self.focus_notice.sender(); let autoupdater_setup_mutex = self.autoupdater_setup_file.clone(); + let app_settings = self.settings.clone(); + thread::spawn(move || loop { if let Some(msg) = web_rx .recv() @@ -250,6 +260,18 @@ impl MainWindow { web_tx_web.send(RPCResponse::open_media(command_ref)).ok(); } } + Some("update_settings") => { + if let Some(arg) = msg.get_params() { + match serde_json::from_value::(arg.to_owned()) { + Ok(settings) => { + let mut app_settings = app_settings.lock().unwrap(); + *app_settings = settings; + println!("App settings updated."); + } + Err(e) => eprintln!("Failed to deserialize settings object: {e}"), + } + } + } Some("app-error") => { hide_splash_sender.notice(); if let Some(arg) = msg.get_params() { @@ -396,8 +418,14 @@ impl MainWindow { if let nwg::EventData::OnWindowClose(data) = data { data.close(false); } - self.window.set_visible(false); - self.tray.tray_show_hide.set_checked(self.window.visible()); - self.transmit_window_full_screen_change(false, false); + + let settings = self.settings.lock().unwrap(); + if settings.quit_on_close { + self.quit_notice.sender().notice(); + } else { + self.window.set_visible(false); + self.tray.tray_show_hide.set_checked(self.window.visible()); + self.transmit_window_full_screen_change(false, false); + } } }