diff --git a/Cargo.lock b/Cargo.lock index e791ca4..1cdf36e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,7 +31,7 @@ dependencies = [ [[package]] name = "anime-game-core" -version = "1.3.2" +version = "1.3.3" dependencies = [ "anyhow", "bzip2", @@ -188,9 +188,9 @@ dependencies = [ [[package]] name = "cached" -version = "0.40.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b4147cd94d5fbdc2ab71b11d50a2f45493625576b3bb70257f59eedea69f3d" +checksum = "5e5877db5d1af7fae60d06b5db9430b68056a69b3582a0be8e3691e87654aeb6" dependencies = [ "async-trait", "async_once", @@ -207,12 +207,13 @@ dependencies = [ [[package]] name = "cached_proc_macro" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "751f7f4e7a091545e7f6c65bacc404eaee7e87bfb1f9ece234a1caa173dc16f2" +checksum = "e10ca87c81aaa3a949dbbe2b5e6c2c45dbc94ba4897e45ea31ff9ec5087be3dc" dependencies = [ "cached_proc_macro_types", - "darling 0.13.4", + "darling", + "proc-macro2", "quote", "syn", ] @@ -395,38 +396,14 @@ dependencies = [ "winapi", ] -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core 0.13.4", - "darling_macro 0.13.4", -] - [[package]] name = "darling" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" dependencies = [ - "darling_core 0.14.2", - "darling_macro 0.14.2", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", + "darling_core", + "darling_macro", ] [[package]] @@ -443,24 +420,13 @@ dependencies = [ "syn", ] -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core 0.13.4", - "quote", - "syn", -] - [[package]] name = "darling_macro" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" dependencies = [ - "darling_core 0.14.2", + "darling_core", "quote", "syn", ] @@ -480,7 +446,7 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" dependencies = [ - "darling 0.14.2", + "darling", "proc-macro2", "quote", "syn", @@ -1104,9 +1070,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" [[package]] name = "heck" diff --git a/anime-launcher-sdk b/anime-launcher-sdk index 3a7486e..8a32066 160000 --- a/anime-launcher-sdk +++ b/anime-launcher-sdk @@ -1 +1 @@ -Subproject commit 3a7486e6b725bfdb8e2c511fcbf2bc2cb7ea595d +Subproject commit 8a32066c07cd471fe2a33ecfa778edffb8796f19 diff --git a/src/ui/components/group.rs b/src/ui/components/group.rs index ee79f76..4ba088e 100644 --- a/src/ui/components/group.rs +++ b/src/ui/components/group.rs @@ -1,4 +1,5 @@ use relm4::prelude::*; +use relm4::component::*; use adw::prelude::*; @@ -8,7 +9,7 @@ pub struct ComponentGroup { pub title: String, pub show_recommended_only: bool, - pub versions: Vec> + pub versions: Vec> } #[derive(Debug)] @@ -18,8 +19,8 @@ pub enum AppMsg { CallOnDeleted } -#[relm4::component(pub)] -impl SimpleComponent for ComponentGroup { +#[relm4::component(async, pub)] +impl SimpleAsyncComponent for ComponentGroup { type Init = (super::ComponentsListGroup, PathBuf); type Input = AppMsg; type Output = super::list::AppMsg; @@ -30,11 +31,12 @@ impl SimpleComponent for ComponentGroup { } } - fn init( + #[allow(clippy::redundant_clone)] + async fn init( init: Self::Init, - root: &Self::Root, - sender: ComponentSender, - ) -> ComponentParts { + root: Self::Root, + sender: AsyncComponentSender, + ) -> AsyncComponentParts { let model = ComponentGroup { title: init.0.title, show_recommended_only: true, @@ -55,10 +57,10 @@ impl SimpleComponent for ComponentGroup { widgets.group.add_row(version.widget()); } - ComponentParts { model, widgets } + AsyncComponentParts { model, widgets } } - fn update(&mut self, msg: Self::Input, sender: ComponentSender) { + async fn update(&mut self, msg: Self::Input, sender: AsyncComponentSender) { tracing::debug!("Called component group [{}] event: {:?}", self.title, msg); match msg { diff --git a/src/ui/components/list.rs b/src/ui/components/list.rs index 8a7010f..c40537e 100644 --- a/src/ui/components/list.rs +++ b/src/ui/components/list.rs @@ -1,4 +1,5 @@ use relm4::prelude::*; +use relm4::component::*; use adw::prelude::*; @@ -13,7 +14,7 @@ pub struct ComponentsList { pub show_recommended_only: bool, pub init: ComponentsListInit, - pub groups: Vec> + pub groups: Vec> } #[derive(Debug)] @@ -23,8 +24,8 @@ pub enum AppMsg { CallOnDeleted } -#[relm4::component(pub)] -impl SimpleComponent for ComponentsList { +#[relm4::component(async, pub)] +impl SimpleAsyncComponent for ComponentsList { type Init = ComponentsListInit; type Input = AppMsg; type Output = crate::ui::preferences::main::AppMsg; @@ -33,11 +34,12 @@ impl SimpleComponent for ComponentsList { group = adw::PreferencesGroup {} } - fn init( + #[allow(clippy::redundant_clone)] + async fn init( init: Self::Init, - root: &Self::Root, - sender: ComponentSender, - ) -> ComponentParts { + root: Self::Root, + sender: AsyncComponentSender, + ) -> AsyncComponentParts { let init_copy = init.clone(); let model = ComponentsList { @@ -60,10 +62,10 @@ impl SimpleComponent for ComponentsList { widgets.group.add(group.widget()); } - ComponentParts { model, widgets } + AsyncComponentParts { model, widgets } } - fn update(&mut self, msg: Self::Input, sender: ComponentSender) { + async fn update(&mut self, msg: Self::Input, sender: AsyncComponentSender) { tracing::debug!("Called components list event: {:?}", msg); match msg { diff --git a/src/ui/components/progress_bar.rs b/src/ui/components/progress_bar.rs index 09d1449..07b20b9 100644 --- a/src/ui/components/progress_bar.rs +++ b/src/ui/components/progress_bar.rs @@ -1,4 +1,5 @@ use relm4::prelude::*; +use relm4::component::*; use adw::prelude::*; @@ -28,14 +29,15 @@ pub enum AppMsg { SetVisible(bool) } -#[relm4::component(pub)] -impl SimpleComponent for ProgressBar { +#[relm4::component(async, pub)] +impl SimpleAsyncComponent for ProgressBar { type Init = (Option, bool); type Input = AppMsg; type Output = (); view! { - progress_bar = gtk::ProgressBar { + #[root] + gtk::ProgressBar { set_valign: gtk::Align::Center, #[watch] @@ -61,11 +63,12 @@ impl SimpleComponent for ProgressBar { } } - fn init( + #[allow(clippy::redundant_clone)] + async fn init( init: Self::Init, - root: &Self::Root, - _sender: ComponentSender, - ) -> ComponentParts { + root: Self::Root, + _sender: AsyncComponentSender, + ) -> AsyncComponentParts { let model = ProgressBar { fraction: 0.0, caption: init.0, @@ -75,10 +78,10 @@ impl SimpleComponent for ProgressBar { let widgets = view_output!(); - ComponentParts { model, widgets } + AsyncComponentParts { model, widgets } } - fn update(&mut self, msg: Self::Input, _sender: ComponentSender) { + async fn update(&mut self, msg: Self::Input, _sender: AsyncComponentSender) { tracing::debug!("Called components list event: {:?}", msg); match msg { diff --git a/src/ui/components/version.rs b/src/ui/components/version.rs index 45dfcb6..307b3c9 100644 --- a/src/ui/components/version.rs +++ b/src/ui/components/version.rs @@ -1,4 +1,5 @@ use relm4::prelude::*; +use relm4::component::*; use gtk::prelude::*; use adw::prelude::*; @@ -30,7 +31,7 @@ pub struct ComponentVersion { pub show_recommended_only: bool, pub state: VersionState, - pub progress_bar: Controller + pub progress_bar: AsyncController } #[derive(Debug)] @@ -40,8 +41,8 @@ pub enum AppMsg { SetState(VersionState) } -#[relm4::component(pub)] -impl SimpleComponent for ComponentVersion { +#[relm4::component(async, pub)] +impl SimpleAsyncComponent for ComponentVersion { type Init = (super::ComponentsListVersion, PathBuf); type Input = AppMsg; type Output = super::group::AppMsg; @@ -73,11 +74,12 @@ impl SimpleComponent for ComponentVersion { } } - fn init( + #[allow(clippy::redundant_clone)] + async fn init( init: Self::Init, - root: &Self::Root, - _sender: ComponentSender, - ) -> ComponentParts { + root: Self::Root, + _sender: AsyncComponentSender, + ) -> AsyncComponentParts { let mut model = ComponentVersion { name: init.0.name, title: init.0.title, @@ -102,16 +104,16 @@ impl SimpleComponent for ComponentVersion { }; // Set progress bar width - model.progress_bar.widgets().progress_bar.set_width_request(200); + model.progress_bar.widget().set_width_request(200); let widgets = view_output!(); widgets.row.add_suffix(model.progress_bar.widget()); - ComponentParts { model, widgets } + AsyncComponentParts { model, widgets } } - fn update(&mut self, msg: Self::Input, sender: ComponentSender) { + async fn update(&mut self, msg: Self::Input, sender: AsyncComponentSender) { tracing::debug!("Called component version [{}] event: {:?} (state = {:?})", self.title, msg, self.state); match msg { diff --git a/src/ui/main.rs b/src/ui/main.rs index f34dea2..d195f5b 100644 --- a/src/ui/main.rs +++ b/src/ui/main.rs @@ -1,4 +1,9 @@ -use relm4::{prelude::*, actions::*, MessageBroker}; +use relm4::{ + prelude::*, + component::*, + actions::*, + MessageBroker +}; use gtk::prelude::*; use adw::prelude::*; @@ -16,7 +21,7 @@ relm4::new_stateless_action!(ConfigFile, WindowActionGroup, "config_file"); relm4::new_stateless_action!(About, WindowActionGroup, "about"); -static mut PREFERENCES_WINDOW: Option> = None; +static mut PREFERENCES_WINDOW: Option> = None; static mut ABOUT_DIALOG: Option> = None; pub struct App { @@ -193,11 +198,11 @@ impl SimpleComponent for App { match msg { AppMsg::OpenPreferences => unsafe { - PREFERENCES_WINDOW.as_ref().unwrap_unchecked().widgets().preferences_window.show(); + PREFERENCES_WINDOW.as_ref().unwrap_unchecked().widget().show(); } AppMsg::ClosePreferences => unsafe { - PREFERENCES_WINDOW.as_ref().unwrap_unchecked().widgets().preferences_window.hide(); + PREFERENCES_WINDOW.as_ref().unwrap_unchecked().widget().hide(); } } } diff --git a/src/ui/preferences/main.rs b/src/ui/preferences/main.rs index 9cacd4a..4fd68bb 100644 --- a/src/ui/preferences/main.rs +++ b/src/ui/preferences/main.rs @@ -1,4 +1,5 @@ use relm4::prelude::*; +use relm4::component::*; use gtk::prelude::*; use adw::prelude::*; @@ -11,8 +12,8 @@ use crate::i18n::tr; use crate::CONFIG; pub struct App { - wine_components: Controller, - dxvk_components: Controller, + wine_components: AsyncController, + dxvk_components: AsyncController, downloaded_wine_versions: Vec, downloaded_dxvk_versions: Vec, @@ -29,13 +30,14 @@ pub enum AppMsg { UpdateDownloadedDxvk } -#[relm4::component(pub)] -impl SimpleComponent for App { +#[relm4::component(async, pub)] +impl SimpleAsyncComponent for App { type Init = gtk::Window; type Input = AppMsg; type Output = (); view! { + #[root] preferences_window = adw::PreferencesWindow { set_title: Some(&tr("preferences")), set_default_size: (700, 560), @@ -102,11 +104,12 @@ impl SimpleComponent for App { } } - fn init( + #[allow(clippy::redundant_clone)] + async fn init( parent: Self::Init, - root: &Self::Root, - sender: ComponentSender, - ) -> ComponentParts { + root: Self::Root, + sender: AsyncComponentSender, + ) -> AsyncComponentParts { tracing::info!("Initializing preferences window"); let model = App { @@ -146,10 +149,10 @@ impl SimpleComponent for App { sender.input(AppMsg::UpdateDownloadedWine); sender.input(AppMsg::UpdateDownloadedDxvk); - ComponentParts { model, widgets } + AsyncComponentParts { model, widgets } } - fn update(&mut self, msg: Self::Input, _sender: ComponentSender) { + async fn update(&mut self, msg: Self::Input, _sender: AsyncComponentSender) { tracing::debug!("Called preferences window event: {:?}", msg); match msg {