endless pomodoros (wayland + gtk4/relm4 + rust)
at trunk 52 lines 957 B view raw
1use std::time::Duration; 2 3use tokio::time; 4 5use relm4::{ 6 Worker, 7 ComponentSender 8}; 9 10 11pub struct Timer; 12 13#[derive(Debug)] 14pub enum TimerMessage { 15 Tick, 16} 17 18impl Worker for Timer { 19 type Init = Duration; 20 type Input = (); 21 22 type Output = TimerMessage; 23 24 fn init(duration: Self::Init, sender: ComponentSender<Self>) -> Self 25 { 26 let fut = { 27 let output = sender.output_sender().clone(); 28 29 async move { 30 let mut interval = time::interval(duration); 31 32 interval.tick().await; 33 34 loop { 35 output.send(TimerMessage::Tick).unwrap(); 36 interval.tick().await; 37 } 38 } 39 }; 40 41 sender.command(move |_, shutdown| { 42 shutdown.register(fut) 43 .drop_on_shutdown() 44 }); 45 46 Self 47 } 48 49 fn update(&mut self, _: Self::Input, _: ComponentSender<Self>) 50 { 51 } 52}