56 lines
1.6 KiB
Rust
56 lines
1.6 KiB
Rust
use std::sync::Arc;
|
|
use std::sync::atomic::{AtomicBool, Ordering};
|
|
use std::thread::{self};
|
|
use mpris::PlayerFinder;
|
|
use structs::{config::Config, data::Data};
|
|
use crate::update_players::update_players;
|
|
use crate::update_message::update_message;
|
|
use crate::print_text::print_text;
|
|
|
|
mod update_players;
|
|
mod update_message;
|
|
mod print_text;
|
|
mod structs;
|
|
|
|
fn handle_signal(data: &Data, pf: &PlayerFinder) {
|
|
if data.current_player.is_some() {
|
|
if let Ok(p) = pf.find_by_name(data.current_player.as_ref().unwrap()) {
|
|
let _ = p.checked_play_pause();
|
|
}
|
|
}
|
|
}
|
|
|
|
//todo: load different config giles depending on CLI argument
|
|
//so i can specify 3 files to use with my polybar config
|
|
|
|
fn main() {
|
|
//dotenvy::dotenv().expect("Failed to read .env file");
|
|
std::env::set_var("RUST_LOG", "error");
|
|
if let Err(e) = env_logger::init() {
|
|
panic!("{}", e);
|
|
}
|
|
|
|
let mut cfg: Config = confy::load("polybar-now-playing", None).unwrap(); //TODO: error handling
|
|
cfg.priorities_to_lower();
|
|
let mut data: Data = Data::default();
|
|
let term = Arc::new(AtomicBool::new(false));
|
|
|
|
let pf: PlayerFinder = PlayerFinder::new()
|
|
.expect("Failed to connect to Dbus!");
|
|
|
|
if let Err(e) = signal_hook::flag::register(signal_hook::consts::SIGUSR1, Arc::clone(&term)) {
|
|
panic!("{}", e);
|
|
}
|
|
|
|
loop {
|
|
thread::sleep(cfg.update_delay);
|
|
update_players(&pf, &cfg, &mut data);
|
|
update_message(&pf, &cfg, &mut data);
|
|
print_text(&cfg, &mut data);
|
|
if term.load(Ordering::Relaxed) {
|
|
handle_signal(&data, &pf);
|
|
term.swap(false, Ordering::Relaxed);
|
|
};
|
|
}
|
|
}
|