diff --git a/connect/src/state.rs b/connect/src/state.rs index 12c5b9862..73010b257 100644 --- a/connect/src/state.rs +++ b/connect/src/state.rs @@ -118,7 +118,7 @@ pub struct ConnectState { /// the context from which we play, is used to top up prev and next tracks context: Option, /// seed extracted in [ConnectState::handle_initial_transfer] and used in [ConnectState::finish_transfer] - transfer_shuffle_seed: Option, + transfer_shuffle_seed: Option, /// a context to keep track of the autoplay context autoplay_context: Option, diff --git a/connect/src/state/transfer.rs b/connect/src/state/transfer.rs index 510b6f841..1e2f40cf2 100644 --- a/connect/src/state/transfer.rs +++ b/connect/src/state/transfer.rs @@ -58,11 +58,21 @@ impl ConnectState { player.play_origin = session.play_origin.take().map(Into::into).into(); player.suppressions = session.suppressions.take().map(Into::into).into(); - if let Some(mut ctx) = session.context.take() { - if let Some(seed) = ctx.get_shuffle_seed() { - let _ = shuffle_seed.insert(seed.clone()); - } + // maybe at some point we can use the shuffle seed provided by spotify, + // but I doubt it, as spotify doesn't use true randomness but rather an algorithm + // based shuffle + trace!( + "shuffle_seed: <{:?}> (spotify), <{:?}> (own)", + session.shuffle_seed, + session.context.get_shuffle_seed() + ); + + shuffle_seed = session + .context + .get_shuffle_seed() + .and_then(|seed| seed.parse().ok()); + if let Some(mut ctx) = session.context.take() { player.restrictions = ctx.restrictions.take().map(Into::into).into(); for (key, value) in ctx.metadata { player.context_metadata.insert(key, value); @@ -150,13 +160,10 @@ impl ConnectState { } if self.shuffling_context() { - let previous_seed = self - .transfer_shuffle_seed - .take() - .and_then(|s| s.parse().ok()); - self.set_current_track(current_index.unwrap_or_default())?; self.set_shuffle(true); + + let previous_seed = self.transfer_shuffle_seed.take(); self.shuffle(previous_seed)?; } else { self.reset_playback_to_position(current_index)?;