From 97ebf382883210c1828a276b9a2685c2f5e071f5 Mon Sep 17 00:00:00 2001 From: Kelvin <2yangk23@gmail.com> Date: Mon, 28 Aug 2017 00:56:03 -0700 Subject: [PATCH] Use PlaylistList to manage Prev/Next tracks --- osu.Game/Overlays/Music/PlaylistItem.cs | 2 +- osu.Game/Overlays/Music/PlaylistList.cs | 18 ++++++++++++++++++ osu.Game/Overlays/Music/PlaylistOverlay.cs | 16 ++++++++-------- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/osu.Game/Overlays/Music/PlaylistItem.cs b/osu.Game/Overlays/Music/PlaylistItem.cs index 6c38755e72..f6ba78c897 100644 --- a/osu.Game/Overlays/Music/PlaylistItem.cs +++ b/osu.Game/Overlays/Music/PlaylistItem.cs @@ -29,8 +29,8 @@ namespace osu.Game.Overlays.Music private IEnumerable titleSprites; private UnicodeBindableString titleBind; private UnicodeBindableString artistBind; - private FillFlowContainer Playlist; + private readonly FillFlowContainer Playlist; public readonly BeatmapSetInfo BeatmapSetInfo; public Action OnSelect; diff --git a/osu.Game/Overlays/Music/PlaylistList.cs b/osu.Game/Overlays/Music/PlaylistList.cs index 3cbef8c22e..019049eb96 100644 --- a/osu.Game/Overlays/Music/PlaylistList.cs +++ b/osu.Game/Overlays/Music/PlaylistList.cs @@ -46,6 +46,24 @@ namespace osu.Game.Overlays.Music } } + public BeatmapSetInfo NextItem + { + get + { + var available = items.Children; + return (available.SkipWhile(i => !i.Selected).Skip(1).FirstOrDefault() ?? available.FirstOrDefault())?.BeatmapSetInfo; + } + } + + public BeatmapSetInfo PreviousItem + { + get + { + var available = items.Children.Reverse(); + return (available.SkipWhile(i => !i.Selected).Skip(1).FirstOrDefault() ?? available.FirstOrDefault())?.BeatmapSetInfo; + } + } + public PlaylistList() { Children = new Drawable[] diff --git a/osu.Game/Overlays/Music/PlaylistOverlay.cs b/osu.Game/Overlays/Music/PlaylistOverlay.cs index 83e92c5554..e987e7a5c1 100644 --- a/osu.Game/Overlays/Music/PlaylistOverlay.cs +++ b/osu.Game/Overlays/Music/PlaylistOverlay.cs @@ -126,24 +126,24 @@ namespace osu.Game.Overlays.Music public void PlayPrevious() { - var currentID = beatmapBacking.Value?.BeatmapSetInfo.ID ?? -1; - var available = BeatmapSets.Reverse(); - - var playable = available.SkipWhile(b => b.ID != currentID).Skip(1).FirstOrDefault() ?? available.FirstOrDefault(); + var playable = list.PreviousItem; if (playable != null) + { playSpecified(playable.Beatmaps[0]); + list.SelectedItem = playable; + } } public void PlayNext() { - var currentID = beatmapBacking.Value?.BeatmapSetInfo.ID ?? -1; - var available = BeatmapSets; - - var playable = available.SkipWhile(b => b.ID != currentID).Skip(1).FirstOrDefault() ?? available.FirstOrDefault(); + var playable = list.NextItem; if (playable != null) + { playSpecified(playable.Beatmaps[0]); + list.SelectedItem = playable; + } } private void playSpecified(BeatmapInfo info)