feat(locallibrary): album/list play + source-aware auto-advance (playback Stage 2)
A Local Library album, or the Tracks list, now plays through with auto-advance across mixed local/offline sources. The one change to the shared playback path is additive and provably safe for Qobuz: play_audible gains a guard at the top — when the CURRENT queue track's source is "local" (and its id matches), it plays the file from disk via play_local_file_audible (read -> player.play_data + CUE seek); otherwise it falls through to the EXISTING offline/Qobuz tier-walk, byte-for-byte unchanged. Qobuz/offline queue tracks never carry source "local", so their behavior cannot change. Auto-advance, next/previous and play-all all route through play_audible, so they become source-aware for free. current_track() releases the queue read lock before play (no nested lock / deadlock). - qbz-player: QueueManager::current() (additive). - qbz-core: QbzCore::current_track() (additive). - qbz-slint playback.rs: source-aware play_audible + play_local_file_audible (extracted) + play_local_tracks_now + play_local_album (get_album_tracks_metadata) + play_local_tracks_from (search_with_filter); replaces the Stage-1 single-track helper. - main.rs: album card "play" -> play the album; Tracks row "play" -> play from that row down the searched list. (play-next / queue still stubbed.) Built green (cargo check). Local-file gapless isn't wired (local tracks aren't prefetched, so local/mixed transitions use the simple track-ended -> next path); Qobuz gapless is unchanged. Runtime smoke-test pending: (1) Qobuz streaming still plays + advances, (2) an offline album advances, (3) a local album/list advances. cc
This commit is contained in:
4 files changed
+148
-66
No files matched your search
@@ -600,6 +600,12 @@ impl<A: FrontendAdapter + Send + Sync + 'static> QbzCore<A> {
|
||||
queue.peek_upcoming(count)
|
||||
}
|
||||
|
||||
/// The current queue track, if any (source-aware playback routing).
|
||||
pub async fn current_track(&self) -> Option<QueueTrack> {
|
||||
let queue = self.queue.read().await;
|
||||
queue.current()
|
||||
}
|
||||
|
||||
// ==================== Search & Catalog ====================
|
||||
|
||||
/// Search for albums
|
||||
|
||||
Reference in new issue
Block a user