Merge pull request #875 from JasonLG1979/refactor-main

Refactor main.rs
This commit is contained in:
Roderick van Domburg 2021-11-17 22:44:22 +01:00 committed by GitHub
commit 85d6049ee7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 969 additions and 332 deletions

View file

@ -7,11 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
### Changed
- [main] Enforce reasonable ranges for option values (breaking).
- [main] Don't evaluate options that would otherwise have no effect.
### Added ### Added
- [cache] Add `disable-credential-cache` flag (breaking). - [cache] Add `disable-credential-cache` flag (breaking).
- [main] Use different option descriptions and error messages based on what backends are enabled at build time.
- [main] Add a `-q`, `--quiet` option that changes the logging level to warn.
- [main] Add a short name for every flag and option.
### Fixed ### Fixed
- [main] Prevent hang when discovery is disabled and there are no credentials or when bad credentials are given. - [main] Prevent hang when discovery is disabled and there are no credentials or when bad credentials are given.
- [main] Don't panic when parsing options. Instead list valid values and exit.
### Removed
- [playback] `alsamixer`: previously deprecated option `mixer-card` has been removed.
- [playback] `alsamixer`: previously deprecated option `mixer-name` has been removed.
- [playback] `alsamixer`: previously deprecated option `mixer-index` has been removed.
## [0.3.1] - 2021-10-24 ## [0.3.1] - 2021-10-24

View file

@ -125,3 +125,15 @@ pub struct ConnectConfig {
pub has_volume_ctrl: bool, pub has_volume_ctrl: bool,
pub autoplay: bool, pub autoplay: bool,
} }
impl Default for ConnectConfig {
fn default() -> ConnectConfig {
ConnectConfig {
name: "Librespot".to_string(),
device_type: DeviceType::default(),
initial_volume: Some(50),
has_volume_ctrl: true,
autoplay: false,
}
}
}

View file

@ -146,11 +146,6 @@ pub fn find(name: Option<String>) -> Option<SinkBuilder> {
.find(|backend| name == backend.0) .find(|backend| name == backend.0)
.map(|backend| backend.1) .map(|backend| backend.1)
} else { } else {
Some( BACKENDS.first().map(|backend| backend.1)
BACKENDS
.first()
.expect("No backends were enabled at build time")
.1,
)
} }
} }

View file

@ -76,7 +76,7 @@ impl AudioFormat {
} }
} }
#[derive(Clone, Debug, PartialEq)] #[derive(Clone, Copy, Debug, PartialEq)]
pub enum NormalisationType { pub enum NormalisationType {
Album, Album,
Track, Track,
@ -101,7 +101,7 @@ impl Default for NormalisationType {
} }
} }
#[derive(Clone, Debug, PartialEq)] #[derive(Clone, Copy, Debug, PartialEq)]
pub enum NormalisationMethod { pub enum NormalisationMethod {
Basic, Basic,
Dynamic, Dynamic,

View file

@ -53,11 +53,19 @@ fn mk_sink<M: Mixer + 'static>(config: MixerConfig) -> Box<dyn Mixer> {
Box::new(M::open(config)) Box::new(M::open(config))
} }
pub fn find(name: Option<&str>) -> Option<MixerFn> { pub const MIXERS: &[(&str, MixerFn)] = &[
match name { (SoftMixer::NAME, mk_sink::<SoftMixer>), // default goes first
None | Some(SoftMixer::NAME) => Some(mk_sink::<SoftMixer>),
#[cfg(feature = "alsa-backend")] #[cfg(feature = "alsa-backend")]
Some(AlsaMixer::NAME) => Some(mk_sink::<AlsaMixer>), (AlsaMixer::NAME, mk_sink::<AlsaMixer>),
_ => None, ];
pub fn find(name: Option<&str>) -> Option<MixerFn> {
if let Some(name) = name {
MIXERS
.iter()
.find(|mixer| name == mixer.0)
.map(|mixer| mixer.1)
} else {
MIXERS.first().map(|mixer| mixer.1)
} }
} }

File diff suppressed because it is too large Load diff