From 538a00147471b1f8cfe4475efbb3803f472f7058 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Wed, 20 Sep 2023 06:16:49 -0500 Subject: [PATCH] trying to update save file on save --- src/qml/main.qml | 3 +- src/rust/settings.rs | 76 ++++++++++++++++++++++++++++++++++++-------- 2 files changed, 65 insertions(+), 14 deletions(-) diff --git a/src/qml/main.qml b/src/qml/main.qml index 0a16537..c0a555f 100644 --- a/src/qml/main.qml +++ b/src/qml/main.qml @@ -222,7 +222,6 @@ Kirigami.ApplicationWindow { title: "Pick a Sound Effect" folder: shortcuts.home /* fileMode: FileDialog.SaveFile */ - /* defaultSuffix: ".pres" */ selectExisting: true onAccepted: { soundEffect = loadFileDialog.fileUrl; @@ -253,6 +252,8 @@ Kirigami.ApplicationWindow { function save(file) { const saved = mainPage.serviceItems.save(file); + saved ? RSettings.setSaveFile(file) + : console.log("File: " + file + " wasn't saved"); saved ? showPassiveNotification("SAVED! " + file) : showPassiveNotification("FAILED!"); } diff --git a/src/rust/settings.rs b/src/rust/settings.rs index 417bff4..1a2db8d 100644 --- a/src/rust/settings.rs +++ b/src/rust/settings.rs @@ -3,6 +3,8 @@ mod settings { use configparser::ini::Ini; use dirs; + use std::error::Error; + use std::path::PathBuf; unsafe extern "C++" { include!("cxx-qt-lib/qstring.h"); @@ -14,6 +16,8 @@ mod settings { #[derive(Clone)] #[cxx_qt::qobject] pub struct Settings { + config: Ini, + #[qproperty] screen: QString, #[qproperty] @@ -25,6 +29,7 @@ mod settings { impl Default for Settings { fn default() -> Self { Self { + config: Ini::new(), screen: QString::from(""), sound_effect: QString::from(""), last_save_file: QUrl::from(""), @@ -42,28 +47,73 @@ mod settings { } #[qinvokable] - pub fn setup(self: Pin<&mut Self>) { - let mut config = Ini::new(); + pub fn setup(mut self: Pin<&mut Self>) { let home = dirs::config_dir(); println!("{:?}", home); if let Some(mut conf) = home { conf.push("lumina"); conf.push("lumina.conf"); - let _map = config.load(conf); - - println!("{:?}", config); - println!("{:?}", _map); - let sf = config.get("General", "lastSaveFile"); - println!("{:?}", sf); - if let Some(s) = sf { - self.set_last_save_file(QUrl::from(&s)); - println!("{s}"); - } else { - println!("error loading last save file"); + match self.as_mut().config_mut().load(conf) { + Ok(map) => { + // println!("{:?}", self.rust().config); + let sf = self + .as_ref() + .config() + .get("General", "lastSaveFile"); + println!("{:?}", sf); + if let Some(s) = sf { + self.set_last_save_file(QUrl::from(&s)); + println!("{s}"); + } else { + println!("error loading last save file"); + } + } + Err(e) => { + println!("settings_load_error: {:?}", e) + } } } else { println!("Couldn't find home directory"); } } + + #[qinvokable] + pub fn set_save_file(mut self: Pin<&mut Self>, file: QUrl) { + println!("{file}"); + match self.as_mut().config_mut().set( + "General", + "lastSaveFile", + Some(file.to_string()), + ) { + Some(s) => { + println!( + "set-save-file: {:?}", + self.as_mut() + .config_mut() + .get("General", "lastSaveFile") + ); + if let Err(e) = self.as_mut().write() { + println!("error: {:?}", e) + } + self.set_last_save_file(file); + } + _ => println!("error-setting-save-file"), + } + } + + pub fn write( + mut self: Pin<&mut Self>, + ) -> std::io::Result<&str> { + let mut file = dirs::config_dir().unwrap(); + file.push("lumina"); + file.push("lumina.conf"); + match self.as_mut().config_mut().write(file) { + Ok(_s) => Ok("Saved File"), + Err(e) => { + println!("error: {:?}", e); + Err(e) + } + } + } } }