mirror of
https://github.com/13hannes11/toolbx-tuner.git
synced 2024-09-03 23:21:00 +02:00
refresh toolbox list every 10s #5
This commit is contained in:
@@ -1,10 +1,13 @@
|
|||||||
use relm4::factory::DynamicIndex;
|
use relm4::factory::DynamicIndex;
|
||||||
|
|
||||||
|
use crate::toolbx::ToolbxContainer;
|
||||||
|
|
||||||
use super::model::ToolbxEntry;
|
use super::model::ToolbxEntry;
|
||||||
|
|
||||||
pub enum AppMsg {
|
pub enum AppMsg {
|
||||||
ShowToolboxSettingsRequest,
|
ShowToolboxSettingsRequest,
|
||||||
ShowToolboxAppsRequest,
|
ShowToolboxAppsRequest,
|
||||||
|
ToolbxListUpdate(Vec<ToolbxContainer>),
|
||||||
ToolbxContainerToggleStartStop(DynamicIndex),
|
ToolbxContainerToggleStartStop(DynamicIndex),
|
||||||
OpenToolbxTerminal(DynamicIndex),
|
OpenToolbxTerminal(DynamicIndex),
|
||||||
ToolbxContainerChanged(DynamicIndex, ToolbxEntry),
|
ToolbxContainerChanged(DynamicIndex, ToolbxEntry),
|
||||||
|
|||||||
@@ -61,6 +61,10 @@ impl AppUpdate for AppModel {
|
|||||||
toolbx_container.update_entry(container);
|
toolbx_container.update_entry(container);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AppMsg::ToolbxListUpdate(tbx_vec) => {
|
||||||
|
println!("Updating Toolbox List");
|
||||||
|
self.update_toolbxes(tbx_vec.into_iter());
|
||||||
|
}
|
||||||
|
|
||||||
AppMsg::OpenToolbxTerminal(index) => {
|
AppMsg::OpenToolbxTerminal(index) => {
|
||||||
if let Some(toolbx_container) = self.toolboxes.get_mut(index.current_index()) {
|
if let Some(toolbx_container) = self.toolboxes.get_mut(index.current_index()) {
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
use relm4::factory::DynamicIndex;
|
use relm4::factory::DynamicIndex;
|
||||||
use relm4::{send, MessageHandler, Sender};
|
use relm4::{send, MessageHandler, Sender};
|
||||||
use tokio::runtime::{Builder, Runtime};
|
use tokio::runtime::{Builder, Runtime};
|
||||||
use tokio::sync::mpsc::{channel, Sender as TokioSender};
|
use tokio::sync::mpsc::{channel, Sender as TokioSender};
|
||||||
|
|
||||||
|
use crate::toolbx::ToolbxContainer;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
messages::AppMsg,
|
messages::AppMsg,
|
||||||
model::{AppModel, ToolbxEntry},
|
model::{AppModel, ToolbxEntry},
|
||||||
@@ -18,6 +22,7 @@ pub struct AsyncHandler {
|
|||||||
pub enum AsyncHandlerMsg {
|
pub enum AsyncHandlerMsg {
|
||||||
StopToolbx(DynamicIndex, ToolbxEntry),
|
StopToolbx(DynamicIndex, ToolbxEntry),
|
||||||
StartToolbx(DynamicIndex, ToolbxEntry),
|
StartToolbx(DynamicIndex, ToolbxEntry),
|
||||||
|
UpdateToolbxes,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MessageHandler<AppModel> for AsyncHandler {
|
impl MessageHandler<AppModel> for AsyncHandler {
|
||||||
@@ -37,8 +42,11 @@ impl MessageHandler<AppModel> for AsyncHandler {
|
|||||||
while let Some(msg) = rx.recv().await {
|
while let Some(msg) = rx.recv().await {
|
||||||
let parent_sender = parent_sender.clone();
|
let parent_sender = parent_sender.clone();
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
|
|
||||||
match msg {
|
match msg {
|
||||||
|
AsyncHandlerMsg::UpdateToolbxes => {
|
||||||
|
let toolboxes = ToolbxContainer::get_toolboxes();
|
||||||
|
send! {parent_sender, AppMsg::ToolbxListUpdate(toolboxes)};
|
||||||
|
}
|
||||||
AsyncHandlerMsg::StopToolbx(index, mut tbx) => {
|
AsyncHandlerMsg::StopToolbx(index, mut tbx) => {
|
||||||
tbx.toolbx_container.stop();
|
tbx.toolbx_container.stop();
|
||||||
tbx.changing_status = false;
|
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 }
|
AsyncHandler { _rt: rt, sender }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user