main.rs 1.3 KB

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