From 240a0a7c412084875c0ec48533f7e2d6dcd76fc8 Mon Sep 17 00:00:00 2001 From: Henrik Friedrichsen Date: Wed, 8 Dec 2021 21:32:36 +0100 Subject: [PATCH] Fix: Play multiples of Track and Playable With the migration to rspotify 0.11.x playlists were changed to be a list of `Playable` instead of `Track` items, so that playlists can contain podcast episodes. This needs to be considered when collecting all tracks for playback in `ListView`. Should help with #667 --- src/ui/listview.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/ui/listview.rs b/src/ui/listview.rs index 9db0f48..595d9ff 100644 --- a/src/ui/listview.rs +++ b/src/ui/listview.rs @@ -113,12 +113,14 @@ impl ListView { fn attempt_play_all_tracks(&self) -> bool { let content = self.content.read().unwrap(); let any = &(*content) as &dyn std::any::Any; - if let Some(tracks) = any.downcast_ref::>() { - let tracks: Vec = tracks - .iter() - .map(|track| Playable::Track(track.clone())) - .collect(); - let index = self.queue.append_next(&tracks); + let playables = any.downcast_ref::>(); + let tracks = any.downcast_ref::>().map(|t| { + t.iter() + .map(|t| Playable::Track(t.clone())) + .collect::>() + }); + if let Some(tracks) = playables.or_else(|| tracks.as_ref()) { + let index = self.queue.append_next(tracks); self.queue.play(index + self.selected, true, false); true } else {