aboutsummaryrefslogtreecommitdiffstats
path: root/src/client/listener.rs
diff options
context:
space:
mode:
authorVidhu Kant Sharma <vidhukant@vidhukant.com>2025-09-08 22:34:26 +0530
committerVidhu Kant Sharma <vidhukant@vidhukant.com>2025-09-08 22:34:26 +0530
commitb2882ae0b0e1521edd82bdb74b59dc2733f78a15 (patch)
tree806a23740dd982d117b269af28ff1490519ac81b /src/client/listener.rs
first commit
Diffstat (limited to 'src/client/listener.rs')
-rw-r--r--src/client/listener.rs73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/client/listener.rs b/src/client/listener.rs
new file mode 100644
index 0000000..2e223f6
--- /dev/null
+++ b/src/client/listener.rs
@@ -0,0 +1,73 @@
+/* Polydoro - Pomodoro widget for polybar and friends
+ * Copyright (C) 2025 Vidhu Kant Sharma <vidhukant@vidhukant.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+use std::os::unix::net::UnixStream;
+use std::io::{BufReader};
+
+use bincode::{decode_from_std_read, config};
+use crate::daemon::pomo::{Pomo,State};
+
+pub fn start_listener() {
+ let sock_path = "/tmp/polydorod.sock";
+ let stream = UnixStream::connect(sock_path).unwrap_or_else(|_| panic!("could not connect to daemon"));
+ let mut reader = BufReader::new(stream);
+
+ loop {
+ // blocks until a struct is received
+ match decode_from_std_read::<Pomo, _, _>(&mut reader, config::standard()) {
+ Ok(p) => {
+ pretty_print(p);
+ }
+ Err(e) => {
+ eprintln!("polydoro listener error: {}", e);
+ std::process::exit(1);
+ }
+ }
+ }
+}
+
+pub fn format_time(secs: u64) -> String {
+ format!("{:02}:{:02}", secs / 60, secs % 60)
+}
+
+pub fn pretty_print(p: Pomo) {
+ let format_work = "work";
+ let format_work_paused = "[work]";
+ let format_work_idle = "(work)";
+ let format_break = "break";
+ let format_break_paused = "[break]";
+ let format_break_idle = "(break)";
+ let format_long_break = "long break";
+ let format_long_break_paused = "[long break]";
+ let format_long_break_idle = "(long break)";
+
+ let f = match p.current_state {
+ State::Work => format_work,
+ State::Break => format_break,
+ State::LongBreak => format_long_break,
+
+ State::WorkPaused => format_work_paused,
+ State::BreakPaused => format_break_paused,
+ State::LongBreakPaused => format_long_break_paused,
+
+ State::WorkIdle => format_work_idle,
+ State::BreakIdle => format_break_idle,
+ State::LongBreakIdle => format_long_break_idle,
+ };
+
+ println!("{} {} - {}", f, p.counter, format_time(p.secs_elapsed));
+}