From c18b11b7704a9140da322368a2f5f7917ca1bceb Mon Sep 17 00:00:00 2001 From: Andy Killorin <37423245+Speedy6451@users.noreply.github.com> Date: Sun, 29 Oct 2023 08:45:15 -0500 Subject: [PATCH] added change detection swaybar still uses ~2% cpu when a song is playing --- src/main.rs | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index afd5381..5eb72c7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,7 @@ +use std::collections::hash_map::DefaultHasher; +use std::hash::Hash; +use std::hash::Hasher; + use mpris::PlaybackStatus; use mpris::PlayerFinder; use anyhow::Result; @@ -9,12 +13,14 @@ fn main() -> Result<()> { let pf = PlayerFinder::new()?; let players = pf.find_all()?; - let mut tracker = players[0].track_progress(400)?; + let mut tracker = players[0].track_progress(25)?; let icon = IconSource::Data{data: gen_icon(0.0, false), height: RES, width: RES}; let mut tray = TrayItem::new("funring", icon)?; + let mut last_hash = None; + println!("Hello, {}!", players[0].identity()); loop { let tick = tracker.tick(); @@ -23,9 +29,18 @@ fn main() -> Result<()> { let prog = elapsed as f32 / total as f32; let playing = tick.progress.playback_status() == PlaybackStatus::Playing; - tray.set_icon( - IconSource::Data{data: gen_icon(prog, playing), height: RES, width: RES} - )?; + let buffer = gen_icon(prog, playing); + let hash = { + let mut hasher = DefaultHasher::new(); + buffer.hash(&mut hasher); + hasher.finish() + }; + if !last_hash.replace(hash).is_some_and(|h| h == hash) { + tray.set_icon(IconSource::Data{data: buffer, height: RES, width: RES})?; + println!("wrote"); + } else { + println!("abstained"); + } } }