use std::time::Duration;
use tokio::sync::mpsc;
use tokio::time::interval;
use crate::actor::messages::{RefreshControl, TmuxCommand, UIEvent};
pub struct RefreshActor {
#[allow(dead_code)]
tmux_tx: mpsc::Sender<TmuxCommand>,
ui_event_tx: mpsc::Sender<UIEvent>,
refresh_control: RefreshControl,
interval: Duration,
}
impl RefreshActor {
pub fn new(
tmux_tx: mpsc::Sender<TmuxCommand>,
ui_event_tx: mpsc::Sender<UIEvent>,
refresh_control: RefreshControl,
interval: Duration,
) -> Self {
Self {
tmux_tx,
ui_event_tx,
refresh_control,
interval,
}
}
pub async fn run(self) {
let mut ticker = interval(self.interval);
loop {
ticker.tick().await;
if self.refresh_control.is_paused() {
continue;
}
if self.ui_event_tx.send(UIEvent::Tick).await.is_err() {
break;
}
}
}
}