main.rs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. extern crate getopts;
  2. extern crate librespot;
  3. extern crate ctrlc;
  4. use std::io::{stderr, Write};
  5. use std::process::exit;
  6. use std::thread;
  7. use librespot::spirc::SpircManager;
  8. use librespot::main_helper;
  9. fn usage(program: &str, opts: &getopts::Options) -> String {
  10. let brief = format!("Usage: {} [options]", program);
  11. format!("{}", opts.usage(&brief))
  12. }
  13. fn main() {
  14. let mut opts = getopts::Options::new();
  15. main_helper::add_session_arguments(&mut opts);
  16. main_helper::add_authentication_arguments(&mut opts);
  17. main_helper::add_player_arguments(&mut opts);
  18. let args: Vec<String> = std::env::args().collect();
  19. let matches = match opts.parse(&args[1..]) {
  20. Ok(m) => m,
  21. Err(f) => {
  22. writeln!(stderr(), "error: {}\n{}", f.to_string(), usage(&args[0], &opts)).unwrap();
  23. exit(1);
  24. }
  25. };
  26. main_helper::setup_logging(&matches);
  27. let session = main_helper::create_session(&matches);
  28. let credentials = main_helper::get_credentials(&session, &matches);
  29. session.login(credentials).unwrap();
  30. let player = main_helper::create_player(&session, &matches);
  31. let spirc = SpircManager::new(session.clone(), player);
  32. let spirc_signal = spirc.clone();
  33. thread::spawn(move || spirc.run());
  34. ctrlc::set_handler(move || {
  35. spirc_signal.send_goodbye();
  36. exit(0);
  37. });
  38. loop {
  39. session.poll();
  40. }
  41. }