refresh toolbox list every 10s #5

This commit is contained in:
2022-06-19 21:11:48 +02:00
parent 3fec9bee21
commit 047b44a91f
3 changed files with 24 additions and 1 deletions

View File

@@ -1,10 +1,13 @@
use relm4::factory::DynamicIndex;
use crate::toolbx::ToolbxContainer;
use super::model::ToolbxEntry;
pub enum AppMsg {
ShowToolboxSettingsRequest,
ShowToolboxAppsRequest,
ToolbxListUpdate(Vec<ToolbxContainer>),
ToolbxContainerToggleStartStop(DynamicIndex),
OpenToolbxTerminal(DynamicIndex),
ToolbxContainerChanged(DynamicIndex, ToolbxEntry),

View File

@@ -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()) {

View File

@@ -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<AppModel> for AsyncHandler {
@@ -37,8 +42,11 @@ impl MessageHandler<AppModel> 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<AppModel> 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 }
}