feat(config): Allow users to set AP port (#1420)
* added support for ap-port conf * chore: Reindent table * feat: Only set `ap_port` in session config if supplied by user * docs: Update CHANGELOG --------- Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
This commit is contained in:
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add configuration variable to set Librespot AP port
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- All requests are correctly proxied when the relevant environment variables are set
|
- All requests are correctly proxied when the relevant environment variables are set
|
||||||
|
|
||||||
|
|||||||
@@ -266,6 +266,7 @@ Possible configuration values are:
|
|||||||
| `[notification_format]` | Set the text displayed in notifications<sup>[4]</sup> | See [notification formatting](#notification-formatting) | |
|
| `[notification_format]` | Set the text displayed in notifications<sup>[4]</sup> | See [notification formatting](#notification-formatting) | |
|
||||||
| `[theme]` | Custom theme | See [custom theme](#theming) | |
|
| `[theme]` | Custom theme | See [custom theme](#theming) | |
|
||||||
| `[keybindings]` | Custom keybindings | See [custom keybindings](#custom-keybindings) | |
|
| `[keybindings]` | Custom keybindings | See [custom keybindings](#custom-keybindings) | |
|
||||||
|
| `ap-port` | Set ap-port for librespot (for restrictive firewalls) | `80`, `443`, `4070` | |
|
||||||
|
|
||||||
1. If built with the `cover` feature.
|
1. If built with the `cover` feature.
|
||||||
2. By default the statusbar will show a play icon when a track is playing and
|
2. By default the statusbar will show a play icon when a track is playing and
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ pub fn get_credentials(configuration: &Config) -> Result<RespotCredentials, Stri
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
while let Err(error) = Spotify::test_credentials(credentials.clone()) {
|
while let Err(error) = Spotify::test_credentials(configuration, credentials.clone()) {
|
||||||
let error_msg = format!("{error}");
|
let error_msg = format!("{error}");
|
||||||
credentials = credentials_prompt(Some(error_msg))?;
|
credentials = credentials_prompt(Some(error_msg))?;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ pub struct ConfigValues {
|
|||||||
pub library_tabs: Option<Vec<LibraryTab>>,
|
pub library_tabs: Option<Vec<LibraryTab>>,
|
||||||
pub hide_display_names: Option<bool>,
|
pub hide_display_names: Option<bool>,
|
||||||
pub credentials: Option<Credentials>,
|
pub credentials: Option<Credentials>,
|
||||||
|
pub ap_port: Option<u16>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Commands used to obtain user credentials automatically.
|
/// Commands used to obtain user credentials automatically.
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ impl Spotify {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Generate the librespot [SessionConfig] used when creating a [Session].
|
/// Generate the librespot [SessionConfig] used when creating a [Session].
|
||||||
pub fn session_config() -> SessionConfig {
|
pub fn session_config(cfg: &config::Config) -> SessionConfig {
|
||||||
let mut session_config = SessionConfig::default();
|
let mut session_config = SessionConfig::default();
|
||||||
match env::var("http_proxy") {
|
match env::var("http_proxy") {
|
||||||
Ok(proxy) => {
|
Ok(proxy) => {
|
||||||
@@ -137,12 +137,18 @@ impl Spotify {
|
|||||||
}
|
}
|
||||||
Err(_) => debug!("No HTTP proxy set"),
|
Err(_) => debug!("No HTTP proxy set"),
|
||||||
}
|
}
|
||||||
|
if let Some(ap_port) = cfg.values().ap_port {
|
||||||
|
session_config.ap_port = Some(ap_port)
|
||||||
|
}
|
||||||
session_config
|
session_config
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Test whether `credentials` are valid Spotify credentials.
|
/// Test whether `credentials` are valid Spotify credentials.
|
||||||
pub fn test_credentials(credentials: Credentials) -> Result<Session, SessionError> {
|
pub fn test_credentials(
|
||||||
let config = Self::session_config();
|
cfg: &config::Config,
|
||||||
|
credentials: Credentials,
|
||||||
|
) -> Result<Session, SessionError> {
|
||||||
|
let config = Self::session_config(cfg);
|
||||||
ASYNC_RUNTIME
|
ASYNC_RUNTIME
|
||||||
.get()
|
.get()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
@@ -172,7 +178,7 @@ impl Spotify {
|
|||||||
)
|
)
|
||||||
.expect("Could not create cache");
|
.expect("Could not create cache");
|
||||||
debug!("opening spotify session");
|
debug!("opening spotify session");
|
||||||
let session_config = Self::session_config();
|
let session_config = Self::session_config(cfg);
|
||||||
Session::connect(session_config, credentials, Some(cache), true)
|
Session::connect(session_config, credentials, Some(cache), true)
|
||||||
.await
|
.await
|
||||||
.map(|r| r.0)
|
.map(|r| r.0)
|
||||||
|
|||||||
Reference in New Issue
Block a user