added change detection
swaybar still uses ~2% cpu when a song is playing
This commit is contained in:
parent
88335daf6c
commit
c18b11b770
1 changed files with 19 additions and 4 deletions
23
src/main.rs
23
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::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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue