use crate::modules::{Module, ModuleInfo, ModuleUpdateEvent, ModuleWidget, WidgetContext}; use crate::script::exec_command; use color_eyre::Result; use gtk::prelude::*; use gtk::Label; use serde::Deserialize; use tokio::spawn; use tokio::sync::mpsc::{Receiver, Sender}; use tokio::time::sleep; use tracing::error; #[derive(Debug, Deserialize, Clone)] pub struct ScriptModule { /// Path to script to execute. path: String, /// Time in milliseconds between executions. #[serde(default = "default_interval")] interval: u64, } /// 5000ms const fn default_interval() -> u64 { 5000 } impl Module