diff --git a/crates/state/src/playback.rs b/crates/state/src/playback.rs index 64be552e..1a803a35 100644 --- a/crates/state/src/playback.rs +++ b/crates/state/src/playback.rs @@ -541,19 +541,22 @@ impl Playback { /// Loads a track to play from `at`, after the debounce `start` asks for. The state reads /// Loading from here until the engine reports audio; a refusal or an unplayable track fails /// without reaching the engine. - fn load_from(&mut self, track: &Track, at: Duration, start: Start, cx: &mut Context) { - match self.refused { - Some(Refusal::Keys) => return self.refuse(cx), - Some(Refusal::SignIn) => return self.gate(cx), - None => {} - } + fn load_from(&mut self, track: &Track, at: Duration, start: Start, cx: &mut Context) { let Some(id) = track.id.clone() else { return self.failed(format!("{} has no track id", track.name), cx); }; + let is_local = music::is_local_id(&id); + if !is_local { + match self.refused { + Some(Refusal::Keys) => return self.refuse(cx), + Some(Refusal::SignIn) => return self.gate(cx), + None => {} + } + } if !track.playable { return self.failed(format!("{} is not available to stream", track.name), cx); } - if !music::is_local_id(&id) && Network::lost(cx) { + if !is_local && Network::lost(cx) { return self.unreachable(start, cx); } if self.engine_for(&id).is_none() { @@ -2310,4 +2313,4 @@ mod tests { previous = sample; } } -} +} \ No newline at end of file