diff --git a/src/main.rs b/src/main.rs index 733e8ed..058bf99 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,7 +12,11 @@ pub const APP_DEBUG: bool = cfg!(debug_assertions); fn main() { tracing_subscriber::fmt() .with_span_events(tracing_subscriber::fmt::format::FmtSpan::FULL) - .with_max_level(tracing::Level::TRACE) + .with_max_level(if APP_DEBUG { + tracing::Level::TRACE + } else { + tracing::Level::INFO + }) .init(); tracing::info!("Starting application"); diff --git a/src/ui/components/version.rs b/src/ui/components/version.rs index fdf9850..cf70532 100644 --- a/src/ui/components/version.rs +++ b/src/ui/components/version.rs @@ -1,11 +1,19 @@ use relm4::prelude::*; +use gtk::prelude::*; use adw::prelude::*; +use gtk::glib::clone; + +use anime_launcher_sdk::config; +use anime_launcher_sdk::anime_game_core::installer::installer::*; + use std::path::PathBuf; +#[derive(Debug)] pub enum VersionState { Downloaded, + Loading, Downloading(u64, u64), Unpacking(u64, u64), NotDownloaded @@ -25,7 +33,8 @@ pub struct ComponentVersion { #[derive(Debug)] pub enum AppMsg { - ShowRecommendedOnly(bool) + ShowRecommendedOnly(bool), + PerformAction } #[relm4::component(pub)] @@ -51,7 +60,9 @@ impl SimpleComponent for ComponentVersion { }, add_css_class: "flat", - set_valign: gtk::Align::Center + set_valign: gtk::Align::Center, + + connect_clicked => AppMsg::PerformAction } } } @@ -86,10 +97,50 @@ impl SimpleComponent for ComponentVersion { } fn update(&mut self, msg: Self::Input, _sender: ComponentSender) { - tracing::debug!("Called component version [{}] event: {:?}", self.title, msg); + tracing::debug!("Called component version [{}] event: {:?} (state = {:?})", self.title, msg, self.state); match msg { - AppMsg::ShowRecommendedOnly(state) => self.show_recommended_only = state + AppMsg::ShowRecommendedOnly(state) => self.show_recommended_only = state, + + AppMsg::PerformAction => { + match self.state { + VersionState::Downloaded => { + let path = self.download_folder.join(&self.name); + + if path.exists() { + // todo + std::fs::remove_dir_all(path).expect("Failed to delete component"); + + self.state = VersionState::NotDownloaded; + } + } + + VersionState::NotDownloaded => { + if let Ok(config) = config::get() { + // todo + let mut installer = Installer::new(&self.download_uri).expect("Failed to create installer instance for this version"); + + if let Some(temp) = config.launcher.temp { + installer.set_temp_folder(temp); + } + + // self.state = VersionState::Loading; + + // todo sus + std::thread::spawn(clone!(@strong self.download_folder as download_folder => move || { + installer.install(download_folder, |status| { + match status { + Update::UnpackingFinished | Update::UnpackingError(_) => println!("sus"), + _ => (), + } + }); + })); + } + } + + _ => () + } + } } } }