From 047b44a91f6c01bd4ece4ecfb82d5033f11774a6 Mon Sep 17 00:00:00 2001 From: Hannes Kuchelmeister Date: Sun, 19 Jun 2022 21:11:48 +0200 Subject: [PATCH] refresh toolbox list every 10s #5 --- src/ui/app/messages.rs | 3 +++ src/ui/app/update.rs | 4 ++++ src/ui/app/workers.rs | 18 +++++++++++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/ui/app/messages.rs b/src/ui/app/messages.rs index 27f8c9e..6b138b4 100644 --- a/src/ui/app/messages.rs +++ b/src/ui/app/messages.rs @@ -1,10 +1,13 @@ use relm4::factory::DynamicIndex; +use crate::toolbx::ToolbxContainer; + use super::model::ToolbxEntry; pub enum AppMsg { ShowToolboxSettingsRequest, ShowToolboxAppsRequest, + ToolbxListUpdate(Vec), ToolbxContainerToggleStartStop(DynamicIndex), OpenToolbxTerminal(DynamicIndex), ToolbxContainerChanged(DynamicIndex, ToolbxEntry), diff --git a/src/ui/app/update.rs b/src/ui/app/update.rs index 43f03c7..7502293 100644 --- a/src/ui/app/update.rs +++ b/src/ui/app/update.rs @@ -61,6 +61,10 @@ impl AppUpdate for AppModel { toolbx_container.update_entry(container); } } + AppMsg::ToolbxListUpdate(tbx_vec) => { + println!("Updating Toolbox List"); + self.update_toolbxes(tbx_vec.into_iter()); + } AppMsg::OpenToolbxTerminal(index) => { if let Some(toolbx_container) = self.toolboxes.get_mut(index.current_index()) { diff --git a/src/ui/app/workers.rs b/src/ui/app/workers.rs index 2722cb3..e99f41a 100644 --- a/src/ui/app/workers.rs +++ b/src/ui/app/workers.rs @@ -1,8 +1,12 @@ +use std::time::Duration; + use relm4::factory::DynamicIndex; use relm4::{send, MessageHandler, Sender}; use tokio::runtime::{Builder, Runtime}; use tokio::sync::mpsc::{channel, Sender as TokioSender}; +use crate::toolbx::ToolbxContainer; + use super::{ messages::AppMsg, model::{AppModel, ToolbxEntry}, @@ -18,6 +22,7 @@ pub struct AsyncHandler { pub enum AsyncHandlerMsg { StopToolbx(DynamicIndex, ToolbxEntry), StartToolbx(DynamicIndex, ToolbxEntry), + UpdateToolbxes, } impl MessageHandler for AsyncHandler { @@ -37,8 +42,11 @@ impl MessageHandler for AsyncHandler { while let Some(msg) = rx.recv().await { let parent_sender = parent_sender.clone(); tokio::spawn(async move { - tokio::time::sleep(std::time::Duration::from_secs(1)).await; match msg { + AsyncHandlerMsg::UpdateToolbxes => { + let toolboxes = ToolbxContainer::get_toolboxes(); + send! {parent_sender, AppMsg::ToolbxListUpdate(toolboxes)}; + } AsyncHandlerMsg::StopToolbx(index, mut tbx) => { tbx.toolbx_container.stop(); tbx.changing_status = false; @@ -54,6 +62,14 @@ impl MessageHandler for AsyncHandler { } }); + let _sender = sender.clone(); + rt.spawn(async move { + loop { + tokio::time::sleep(Duration::from_secs(10)).await; + _sender.send(AsyncHandlerMsg::UpdateToolbxes).await; + } + }); + AsyncHandler { _rt: rt, sender } }