endless pomodoros (wayland + gtk4/relm4 + rust)
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}