1
Fork 0

added change detection

swaybar still uses ~2% cpu when a song is playing
This commit is contained in:
Andy Killorin 2023-10-29 08:45:15 -05:00
parent 88335daf6c
commit c18b11b770
Signed by: ank
GPG key ID: B6241CA3B552BCA4

View file

@ -1,3 +1,7 @@
use std::collections::hash_map::DefaultHasher;
use std::hash::Hash;
use std::hash::Hasher;
use mpris::PlaybackStatus; use mpris::PlaybackStatus;
use mpris::PlayerFinder; use mpris::PlayerFinder;
use anyhow::Result; use anyhow::Result;
@ -9,12 +13,14 @@ fn main() -> Result<()> {
let pf = PlayerFinder::new()?; let pf = PlayerFinder::new()?;
let players = pf.find_all()?; 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 icon = IconSource::Data{data: gen_icon(0.0, false), height: RES, width: RES};
let mut tray = TrayItem::new("funring", icon)?; let mut tray = TrayItem::new("funring", icon)?;
let mut last_hash = None;
println!("Hello, {}!", players[0].identity()); println!("Hello, {}!", players[0].identity());
loop { loop {
let tick = tracker.tick(); let tick = tracker.tick();
@ -23,9 +29,18 @@ fn main() -> Result<()> {
let prog = elapsed as f32 / total as f32; let prog = elapsed as f32 / total as f32;
let playing = tick.progress.playback_status() == PlaybackStatus::Playing; let playing = tick.progress.playback_status() == PlaybackStatus::Playing;
tray.set_icon( let buffer = gen_icon(prog, playing);
IconSource::Data{data: gen_icon(prog, playing), height: RES, width: RES} 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");
}
} }
} }