player_event_handler.rs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. use librespot::playback::player::PlayerEvent;
  2. use std::collections::HashMap;
  3. use std::process::Command;
  4. fn run_program(program: &str, env_vars: HashMap<&str, String>) {
  5. let mut v: Vec<&str> = program.split_whitespace().collect();
  6. info!("Running {:?} with environment variables {:?}", v, env_vars);
  7. Command::new(&v.remove(0))
  8. .args(&v)
  9. .envs(env_vars.iter())
  10. .spawn()
  11. .expect("program failed to start");
  12. }
  13. pub fn run_program_on_events(event: PlayerEvent, onevent: &str) {
  14. let mut env_vars = HashMap::new();
  15. match event {
  16. PlayerEvent::Changed {
  17. old_track_id,
  18. new_track_id,
  19. } => {
  20. env_vars.insert("PLAYER_EVENT", "change".to_string());
  21. env_vars.insert("OLD_TRACK_ID", old_track_id.to_base16());
  22. env_vars.insert("TRACK_ID", new_track_id.to_base16());
  23. }
  24. PlayerEvent::Started { track_id } => {
  25. env_vars.insert("PLAYER_EVENT", "start".to_string());
  26. env_vars.insert("TRACK_ID", track_id.to_base16());
  27. }
  28. PlayerEvent::Stopped { track_id } => {
  29. env_vars.insert("PLAYER_EVENT", "stop".to_string());
  30. env_vars.insert("TRACK_ID", track_id.to_base16());
  31. }
  32. }
  33. run_program(onevent, env_vars);
  34. }