Make main_helper useful with values not from getopts.

Applications that gets these values from config file
shouldn't have to reinvent the wheel.
This commit is contained in:
Simon Persson 2017-01-06 12:50:44 +01:00
parent e254bb7291
commit b4c7e8e057
2 changed files with 34 additions and 19 deletions

View file

@ -32,11 +32,11 @@ fn main() {
main_helper::setup_logging(&matches); main_helper::setup_logging(&matches);
let session = main_helper::create_session(&matches); let session = main_helper::session_from_matches(&matches);
let credentials = main_helper::get_credentials(&session, &matches); let credentials = main_helper::credentials_from_matches(&session, &matches);
session.login(credentials).unwrap(); session.login(credentials).unwrap();
let player = main_helper::create_player(&session, &matches); let player = main_helper::player_from_matches(&session, &matches);
let spirc = SpircManager::new(session.clone(), player); let spirc = SpircManager::new(session.clone(), player);
let spirc_signal = spirc.clone(); let spirc_signal = spirc.clone();

View file

@ -55,14 +55,26 @@ pub fn add_player_arguments(opts: &mut getopts::Options) {
.optopt("", "device", "Audio device to use. Use '?' to list options", "DEVICE"); .optopt("", "device", "Audio device to use. Use '?' to list options", "DEVICE");
} }
pub fn create_session(matches: &getopts::Matches) -> Session { pub fn session_from_matches(matches: &getopts::Matches) -> Session {
create_session(matches.opt_str("n").unwrap(),
matches.opt_str("b").as_ref().map(String::as_ref),
matches.opt_str("c").as_ref().map(String::as_ref),
matches.opt_str("onstart"),
matches.opt_str("onstop"))
}
pub fn create_session(name: String,
bitrate: Option<&str>,
cache: Option<&str>,
onstart: Option<String>,
onstop: Option<String>)
-> Session {
info!("librespot {} ({}). Built on {}.", info!("librespot {} ({}). Built on {}.",
version::short_sha(), version::short_sha(),
version::commit_date(), version::commit_date(),
version::short_now()); version::short_now());
let name = matches.opt_str("n").unwrap(); let bitrate = match bitrate {
let bitrate = match matches.opt_str("b").as_ref().map(String::as_ref) {
None => Bitrate::Bitrate160, // default value None => Bitrate::Bitrate160, // default value
Some("96") => Bitrate::Bitrate96, Some("96") => Bitrate::Bitrate96,
@ -74,13 +86,10 @@ pub fn create_session(matches: &getopts::Matches) -> Session {
} }
}; };
let cache = matches.opt_str("c").map(|cache_location| { let cache = cache.map(|cache_location| {
Box::new(DefaultCache::new(PathBuf::from(cache_location)).unwrap()) as Box<Cache + Send + Sync> Box::new(DefaultCache::new(PathBuf::from(cache_location)).unwrap()) as Box<Cache + Send + Sync>
}).unwrap_or_else(|| Box::new(NoCache) as Box<Cache + Send + Sync>); }).unwrap_or_else(|| Box::new(NoCache) as Box<Cache + Send + Sync>);
let onstart = matches.opt_str("onstart");
let onstop = matches.opt_str("onstop");
let config = Config { let config = Config {
user_agent: version::version_string(), user_agent: version::version_string(),
device_name: name, device_name: name,
@ -92,13 +101,16 @@ pub fn create_session(matches: &getopts::Matches) -> Session {
Session::new(config, cache) Session::new(config, cache)
} }
pub fn get_credentials(session: &Session, matches: &getopts::Matches) -> Credentials { pub fn credentials_from_matches(session: &Session,
matches: &getopts::Matches) -> Credentials {
get_credentials(session, matches.opt_str("username"), matches.opt_str("password"))
}
pub fn get_credentials(session: &Session, username: Option<String>,
password: Option<String>) -> Credentials {
let credentials = session.cache().get_credentials(); let credentials = session.cache().get_credentials();
match (matches.opt_str("username"), match (username, password, credentials) {
matches.opt_str("password"),
credentials) {
(Some(username), Some(password), _) (Some(username), Some(password), _)
=> Credentials::with_password(username, password), => Credentials::with_password(username, password),
@ -122,11 +134,14 @@ pub fn get_credentials(session: &Session, matches: &getopts::Matches) -> Credent
} }
} }
pub fn create_player(session: &Session, matches: &getopts::Matches) -> Player { pub fn player_from_matches(session: &Session, matches: &getopts::Matches) -> Player {
let backend_name = matches.opt_str("backend"); create_player(session, matches.opt_str("backend").as_ref().map(String::as_ref)
let device_name = matches.opt_str("device"); , matches.opt_str("device"))
}
let make_backend = find_backend(backend_name.as_ref().map(AsRef::as_ref)); pub fn create_player(session: &Session, backend_name: Option<&str>
, device_name: Option<String>) -> Player {
let make_backend = find_backend(backend_name);
Player::new(session.clone(), move || { Player::new(session.clone(), move || {
make_backend(device_name.as_ref().map(AsRef::as_ref)) make_backend(device_name.as_ref().map(AsRef::as_ref))