use crate::modules::{Module, ModuleInfo, ModuleUpdateEvent, ModuleWidget, WidgetContext}; use color_eyre::{eyre::Report, eyre::Result, eyre::WrapErr, Section}; use gtk::prelude::*; use gtk::Label; use serde::Deserialize; use std::process::Command; use tokio::spawn; use tokio::sync::mpsc::{Receiver, Sender}; use tokio::time::sleep; use tracing::{error, instrument}; #[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