From 3787bf8cbc5cc3978d14cf872907cd4905c4365c Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Tue, 16 Jan 2024 17:04:55 +0100 Subject: [PATCH] refactor: replace load method with reload, returning Command --- app/src/app.rs | 1 - app/src/pages/desktop/appearance.rs | 10 ++++------ app/src/pages/desktop/wallpaper/mod.rs | 20 +++++++++----------- app/src/pages/system/about.rs | 7 ++++--- app/src/pages/time/date.rs | 4 ---- page/src/binder.rs | 12 +++++------- page/src/lib.rs | 9 +++------ 7 files changed, 25 insertions(+), 38 deletions(-) diff --git a/app/src/app.rs b/app/src/app.rs index 819290a..88e6ce4 100644 --- a/app/src/app.rs +++ b/app/src/app.rs @@ -589,7 +589,6 @@ impl SettingsApp { let page_command = self .pages .page_reload(page) - .unwrap_or(iced::Command::none()) .map(Message::PageMessage) .map(cosmic::app::Message::App); diff --git a/app/src/pages/desktop/appearance.rs b/app/src/pages/desktop/appearance.rs index 5d76156..abe1ac2 100644 --- a/app/src/pages/desktop/appearance.rs +++ b/app/src/pages/desktop/appearance.rs @@ -6,7 +6,7 @@ use std::sync::Arc; use apply::Apply; use ashpd::desktop::file_chooser::{FileFilter, SelectedFiles}; use cosmic::cosmic_config::{Config, ConfigSet, CosmicConfigEntry}; -use cosmic::cosmic_theme::palette::{self, FromColor, Hsv, Srgb, Srgba}; +use cosmic::cosmic_theme::palette::{FromColor, Hsv, Srgb, Srgba}; use cosmic::cosmic_theme::{CornerRadii, Theme, ThemeBuilder, ThemeMode}; use cosmic::iced::wayland::actions::window::SctkWindowSettings; use cosmic::iced::widget::{column, row}; @@ -19,7 +19,7 @@ use cosmic::widget::{ button, color_picker::ColorPickerUpdate, container, header_bar, horizontal_space, settings, spin_button, text, ColorPickerModel, }; -use cosmic::{Command, Element}; +use cosmic::{command, Command, Element}; use cosmic_settings_desktop::wallpaper; use cosmic_settings_page::Section; use cosmic_settings_page::{self as page, section}; @@ -936,10 +936,8 @@ impl page::Page for Page { .description(fl!("appearance", "desc")) } - fn load(&self, _: page::Entity) -> Option> { - Some(Box::pin(async move { - crate::pages::Message::Appearance(Message::Entered) - })) + fn reload(&mut self, _: page::Entity) -> Command { + command::future(async move { crate::pages::Message::Appearance(Message::Entered) }) } fn on_leave(&mut self) -> Command { diff --git a/app/src/pages/desktop/wallpaper/mod.rs b/app/src/pages/desktop/wallpaper/mod.rs index 380a4b5..d67abf9 100644 --- a/app/src/pages/desktop/wallpaper/mod.rs +++ b/app/src/pages/desktop/wallpaper/mod.rs @@ -13,6 +13,12 @@ use std::{ }; use apply::Apply; +use cosmic::widget::{ + button, dropdown, list_column, row, + segmented_button::{self, SingleSelectModel}, + segmented_selection, settings, text, toggler, +}; +use cosmic::{command, Command}; use cosmic::{ iced::{wayland::actions::window::SctkWindowSettings, window, Color, Length}, prelude::CollectionWidget, @@ -26,14 +32,6 @@ use cosmic::{ iced_core::{alignment, layout}, iced_runtime::core::image::Handle as ImageHandle, }; -use cosmic::{ - widget::{ - button, dropdown, list_column, row, - segmented_button::{self, SingleSelectModel}, - segmented_selection, settings, text, toggler, - }, - Command, -}; use cosmic::{ widget::{color_picker::ColorPickerUpdate, ColorPickerModel}, Element, @@ -250,10 +248,10 @@ impl page::Page for Page { Command::none() } - fn load(&self, _page: page::Entity) -> Option> { + fn reload(&mut self, _page: page::Entity) -> Command { let current_folder = self.config.current_folder().to_owned(); - Some(Box::pin(async move { + command::future(async move { let (wallpaper_service_config, outputs) = wallpaper::config(); let update = change_folder(current_folder).await; @@ -263,7 +261,7 @@ impl page::Page for Page { outputs, update, )))) - })) + }) } } diff --git a/app/src/pages/system/about.rs b/app/src/pages/system/about.rs index 57e0013..4be588c 100644 --- a/app/src/pages/system/about.rs +++ b/app/src/pages/system/about.rs @@ -3,6 +3,7 @@ use cosmic_settings_page::{self as page, section, Section}; +use cosmic::{command, Command}; use cosmic::{ iced::{ widget::{horizontal_space, row}, @@ -46,10 +47,10 @@ impl page::Page for Page { .description(fl!("about", "desc")) } - fn load(&self, _page: page::Entity) -> Option> { - Some(Box::pin(async move { + fn reload(&mut self, _page: page::Entity) -> Command { + command::future(async move { crate::pages::Message::About(Message::Info(Box::new(Info::load()))) - })) + }) } } diff --git a/app/src/pages/time/date.rs b/app/src/pages/time/date.rs index acc2c8f..de00850 100644 --- a/app/src/pages/time/date.rs +++ b/app/src/pages/time/date.rs @@ -37,10 +37,6 @@ impl page::Page for Page { .title(fl!("time-date")) .description(fl!("time-date", "desc")) } - - fn load(&self, _page: page::Entity) -> Option> { - None - } } impl Page { diff --git a/page/src/binder.rs b/page/src/binder.rs index 7abe723..8f0d66b 100644 --- a/page/src/binder.rs +++ b/page/src/binder.rs @@ -3,7 +3,7 @@ use crate::section::{self, Section}; use crate::{Content, Info, Page}; -use cosmic::iced_runtime::command::{Action, Command}; +use cosmic::iced_runtime::command::Command; use cosmic::Element; use regex::Regex; use slotmap::{SecondaryMap, SlotMap, SparseSecondaryMap}; @@ -159,14 +159,12 @@ impl Binder { } /// Calls a page's load function to refresh its data. - pub fn page_reload(&mut self, id: crate::Entity) -> Option> { - if let Some(page) = self.page.get(id) { - if let Some(future) = page.load(id) { - return Some(Command::single(Action::Future(future))); - } + pub fn page_reload(&mut self, id: crate::Entity) -> Command { + if let Some(page) = self.page.get_mut(id) { + return page.reload(id); } - None + Command::none() } #[must_use] diff --git a/page/src/lib.rs b/page/src/lib.rs index 9430ff3..9815af2 100644 --- a/page/src/lib.rs +++ b/page/src/lib.rs @@ -14,7 +14,7 @@ pub use section::Section; use derive_setters::Setters; use slotmap::SlotMap; -use std::{borrow::Cow, future::Future, pin::Pin}; +use std::borrow::Cow; slotmap::new_key_type! { /// The unique ID of a page. @@ -24,9 +24,6 @@ slotmap::new_key_type! { /// A collection of sections which a page may be comprised of. pub type Content = Vec; -/// A request by a page to run a command in the background. -pub type Task = Pin + Send>>; - pub trait Page: Downcast { /// Information about the page fn info(&self) -> Info; @@ -51,8 +48,8 @@ pub trait Page: Downcast { #[must_use] #[allow(unused)] - fn load(&self, page: crate::Entity) -> Option> { - None + fn reload(&mut self, page: crate::Entity) -> Command { + Command::none() } /// Emit a command when the page is left