Skip to content

Commit 6c2491b

Browse files
authored
adding callback for reusable credentials (#983)
This allows more control over how the credentials are saved to the cache
1 parent 1efda79 commit 6c2491b

7 files changed

Lines changed: 17 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1616
- [playback] `Sink`: `write()` now receives ownership of the packet (breaking).
1717
- [playback] `pipe`: create file if it doesn't already exist
1818
- [playback] More robust dynamic limiter for very wide dynamic range (breaking)
19+
- [core] `Session`: `connect()` now returns the long-term credentials.
20+
- [core] `Session`: `connect()` now accespt a flag if the credentails should be stored via the cache.
1921
- [build] The MSRV is now 1.53.
2022

2123
### Added

core/src/session.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ impl Session {
6666
config: SessionConfig,
6767
credentials: Credentials,
6868
cache: Option<Cache>,
69-
) -> Result<Session, SessionError> {
69+
store_credentials: bool,
70+
) -> Result<(Session, Credentials), SessionError> {
7071
let ap = apresolve(config.proxy.as_ref(), config.ap_port).await;
7172

7273
info!("Connecting to AP \"{}\"", ap);
@@ -76,18 +77,20 @@ impl Session {
7677
connection::authenticate(&mut conn, credentials, &config.device_id).await?;
7778
info!("Authenticated as \"{}\" !", reusable_credentials.username);
7879
if let Some(cache) = &cache {
79-
cache.save_credentials(&reusable_credentials);
80+
if store_credentials {
81+
cache.save_credentials(&reusable_credentials);
82+
}
8083
}
8184

8285
let session = Session::create(
8386
conn,
8487
config,
8588
cache,
86-
reusable_credentials.username,
89+
reusable_credentials.username.clone(),
8790
tokio::runtime::Handle::current(),
8891
);
8992

90-
Ok(session)
93+
Ok((session, reusable_credentials))
9194
}
9295

9396
fn create(

core/tests/connect.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ async fn test_connection() {
1313
SessionConfig::default(),
1414
Credentials::with_password("test", "test"),
1515
None,
16+
false,
1617
)
1718
.await;
1819

examples/get_token.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ async fn main() {
2020

2121
println!("Connecting..");
2222
let credentials = Credentials::with_password(&args[1], &args[2]);
23-
let session = Session::connect(session_config, credentials, None)
23+
let (session, _) = Session::connect(session_config, credentials, None, false)
2424
.await
2525
.unwrap();
2626

examples/play.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ async fn main() {
2727
let backend = audio_backend::find(None).unwrap();
2828

2929
println!("Connecting ..");
30-
let session = Session::connect(session_config, credentials, None)
30+
let (session, _) = Session::connect(session_config, credentials, None, false)
3131
.await
3232
.unwrap();
3333

examples/playlist_tracks.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ async fn main() {
2727
process::exit(1);
2828
});
2929

30-
let session = Session::connect(session_config, credentials, None)
30+
let (session, _) = Session::connect(session_config, credentials, None, false)
3131
.await
3232
.unwrap();
3333

src/main.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1599,6 +1599,7 @@ async fn main() {
15991599
setup.session_config.clone(),
16001600
credentials,
16011601
setup.cache.clone(),
1602+
true,
16021603
)
16031604
.fuse(),
16041605
);
@@ -1634,6 +1635,7 @@ async fn main() {
16341635
setup.session_config.clone(),
16351636
credentials,
16361637
setup.cache.clone(),
1638+
true,
16371639
).fuse());
16381640
},
16391641
None => {
@@ -1643,7 +1645,7 @@ async fn main() {
16431645
}
16441646
},
16451647
session = &mut connecting, if !connecting.is_terminated() => match session {
1646-
Ok(session) => {
1648+
Ok((session,_)) => {
16471649
let mixer_config = setup.mixer_config.clone();
16481650
let mixer = (setup.mixer)(mixer_config);
16491651
let player_config = setup.player_config.clone();
@@ -1711,6 +1713,7 @@ async fn main() {
17111713
setup.session_config.clone(),
17121714
credentials,
17131715
setup.cache.clone(),
1716+
true
17141717
).fuse());
17151718
},
17161719
_ => {

0 commit comments

Comments
 (0)