mirror of
https://github.com/oSumAtrIX/free-librespot.git
synced 2025-12-19 18:04:20 +00:00
Ensure the player events are emitted correctly. Only call the external script on events we want to notify about. Stop sink when loading to pause. cargo fmt
39 lines
1.4 KiB
Rust
39 lines
1.4 KiB
Rust
use librespot::playback::player::PlayerEvent;
|
|
use log::info;
|
|
use std::collections::HashMap;
|
|
use std::io;
|
|
use std::process::Command;
|
|
use tokio_process::{Child, CommandExt};
|
|
|
|
fn run_program(program: &str, env_vars: HashMap<&str, String>) -> io::Result<Child> {
|
|
let mut v: Vec<&str> = program.split_whitespace().collect();
|
|
info!("Running {:?} with environment variables {:?}", v, env_vars);
|
|
Command::new(&v.remove(0))
|
|
.args(&v)
|
|
.envs(env_vars.iter())
|
|
.spawn_async()
|
|
}
|
|
|
|
pub fn run_program_on_events(event: PlayerEvent, onevent: &str) -> Option<io::Result<Child>> {
|
|
let mut env_vars = HashMap::new();
|
|
match event {
|
|
PlayerEvent::Changed {
|
|
old_track_id,
|
|
new_track_id,
|
|
} => {
|
|
env_vars.insert("PLAYER_EVENT", "change".to_string());
|
|
env_vars.insert("OLD_TRACK_ID", old_track_id.to_base62());
|
|
env_vars.insert("TRACK_ID", new_track_id.to_base62());
|
|
}
|
|
PlayerEvent::Started { track_id, .. } => {
|
|
env_vars.insert("PLAYER_EVENT", "start".to_string());
|
|
env_vars.insert("TRACK_ID", track_id.to_base62());
|
|
}
|
|
PlayerEvent::Stopped { track_id, .. } => {
|
|
env_vars.insert("PLAYER_EVENT", "stop".to_string());
|
|
env_vars.insert("TRACK_ID", track_id.to_base62());
|
|
}
|
|
_ => return None,
|
|
}
|
|
Some(run_program(onevent, env_vars))
|
|
}
|