From 6d552081f911cc324dea837f990c66ae73d1e4cf Mon Sep 17 00:00:00 2001 From: Miguel Aranha Baldi Horlle Date: Thu, 18 Apr 2024 17:19:51 -0300 Subject: [PATCH] Messages page improvements. - Handling `Stop` button action better. - Naive handling of `on loading` to avoid trigger any actions while an action is running. --- src/component/app.rs | 1 - src/component/messages/messages_page.rs | 24 +++++++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/component/app.rs b/src/component/app.rs index 24f5aba..2c755d9 100644 --- a/src/component/app.rs +++ b/src/component/app.rs @@ -282,7 +282,6 @@ impl Component for AppModel { messages_page, settings_page, }; - widgets.load_window_size(); ComponentParts { model, widgets } } diff --git a/src/component/messages/messages_page.rs b/src/component/messages/messages_page.rs index 577ea88..17710fd 100644 --- a/src/component/messages/messages_page.rs +++ b/src/component/messages/messages_page.rs @@ -93,12 +93,14 @@ impl Component for MessagesPageModel { set_orientation: gtk::Orientation::Horizontal, set_halign: gtk::Align::Start, set_hexpand: true, + #[name(btn_get_messages)] gtk::Button { set_icon_name: "media-playback-start-symbolic", connect_clicked[sender] => move |_| { sender.input(MessagesPageMsg::GetMessages); }, }, + #[name(btn_stop_messages)] gtk::Button { set_icon_name: "media-playback-stop-symbolic", set_margin_start: 5, @@ -106,7 +108,7 @@ impl Component for MessagesPageModel { sender.input(MessagesPageMsg::StopGetMessages); }, }, - #[name(cache_refresh)] + #[name(btn_cache_refresh)] gtk::Button { set_icon_name: "media-playlist-repeat-symbolic", set_margin_start: 5, @@ -114,7 +116,7 @@ impl Component for MessagesPageModel { sender.input(MessagesPageMsg::RefreshMessages); }, }, - #[name(cache_toggle)] + #[name(btn_cache_toggle)] gtk::ToggleButton { set_margin_start: 5, set_label: "Cache", @@ -515,7 +517,7 @@ impl Component for MessagesPageModel { .unwrap_or_default(); widgets.cache_timestamp.set_label(&cache_ts); widgets.cache_timestamp.set_visible(true); - widgets.cache_toggle.set_active(toggled); + widgets.btn_cache_toggle.set_active(toggled); widgets.pag_total_entry.set_text(""); widgets.pag_current_entry.set_text(""); widgets.pag_last_entry.set_text(""); @@ -525,6 +527,7 @@ impl Component for MessagesPageModel { } MessagesPageMsg::GetMessages => { STATUS_BROKER.send(StatusBarMsg::Start); + on_loading(widgets, false); let mode = self.mode; self.mode = match self.mode { MessagesMode::Cached { refresh: _ } => MessagesMode::Cached { refresh: false }, @@ -565,6 +568,7 @@ impl Component for MessagesPageModel { } MessagesPageMsg::GetNextMessages => { STATUS_BROKER.send(StatusBarMsg::Start); + on_loading(widgets, false); let mode = self.mode; let topic = self.topic.clone().unwrap(); let conn = self.connection.clone().unwrap(); @@ -615,6 +619,7 @@ impl Component for MessagesPageModel { } MessagesPageMsg::GetPreviousMessages => { STATUS_BROKER.send(StatusBarMsg::Start); + on_loading(widgets, false); let mode = self.mode; let topic = self.topic.clone().unwrap(); let conn = self.connection.clone().unwrap(); @@ -667,6 +672,10 @@ impl Component for MessagesPageModel { MessagesPageMsg::StopGetMessages => { info!("cancelling get messages..."); self.token.cancel(); + on_loading(widgets, true); + STATUS_BROKER.send(StatusBarMsg::StopWithInfo { + text: Some("Operation cancelled!".to_string()), + }); } MessagesPageMsg::UpdateMessage(message) => { self.messages_wrapper.append(MessageListItem::new(message)); @@ -709,6 +718,7 @@ impl Component for MessagesPageModel { .unwrap_or(String::default()); widgets.cache_timestamp.set_label(&cache_ts); widgets.cache_timestamp.set_visible(true); + on_loading(widgets, true); STATUS_BROKER.send(StatusBarMsg::StopWithInfo { text: Some(format!("{} messages loaded!", self.messages_wrapper.len())), }); @@ -761,6 +771,14 @@ impl Component for MessagesPageModel { } } +fn on_loading(widgets: &mut MessagesPageModelWidgets, enabled: bool,) { + widgets.btn_next_page.set_sensitive(enabled); + widgets.btn_previous_page.set_sensitive(enabled); + widgets.btn_get_messages.set_sensitive(enabled); + widgets.btn_cache_refresh.set_sensitive(enabled); + widgets.btn_cache_toggle.set_sensitive(enabled); +} + fn fill_pagination( page_op: PageOp, widgets: &mut MessagesPageModelWidgets,