1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-15 22:27:46 +08:00

Fix playlist not being handled correctly for non-joined cases

This commit is contained in:
smoogipoo 2021-02-16 21:32:35 +09:00
parent 379393fe10
commit 100097d78f
2 changed files with 13 additions and 9 deletions

View File

@ -539,10 +539,7 @@ namespace osu.Game.Online.Multiplayer
var allowedMods = settings.AllowedMods.Select(m => m.ToMod(ruleset));
// Update an existing playlist item from the API room, or create a new item.
var playlistItem = apiRoom.Playlist.FirstOrDefault(i => i.ID == settings.PlaylistItemId);
if (playlistItem == null)
apiRoom.Playlist.Add(playlistItem = new PlaylistItem());
var playlistItem = apiRoom.Playlist.FirstOrDefault(i => i.ID == settings.PlaylistItemId) ?? new PlaylistItem();
playlistItem.ID = settings.PlaylistItemId;
playlistItem.Beatmap.Value = beatmap;
@ -552,6 +549,9 @@ namespace osu.Game.Online.Multiplayer
playlistItem.AllowedMods.Clear();
playlistItem.AllowedMods.AddRange(allowedMods);
if (!apiRoom.Playlist.Contains(playlistItem))
apiRoom.Playlist.Add(playlistItem);
CurrentMatchPlayingItem.Value = playlistItem;
}

View File

@ -2,8 +2,8 @@
// See the LICENCE file in the repository root for full licence text.
using System.Diagnostics;
using System.Linq;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.UserInterface;
@ -62,7 +62,8 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
base.LoadComplete();
Debug.Assert(SelectedItem != null);
SelectedItem.BindValueChanged(onSelectedItemChanged, true);
SelectedItem.BindValueChanged(_ => updateBeatmap());
Playlist.BindCollectionChanged((_, __) => updateBeatmap(), true);
Host.BindValueChanged(host =>
{
@ -73,12 +74,15 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
}, true);
}
private void onSelectedItemChanged(ValueChangedEvent<PlaylistItem> selectedItem)
private void updateBeatmap()
{
if (selectedItem.NewValue == null)
Debug.Assert(SelectedItem != null);
PlaylistItem item = SelectedItem.Value ?? Playlist.FirstOrDefault();
if (item == null)
beatmapPanelContainer.Clear();
else
beatmapPanelContainer.Child = new DrawableRoomPlaylistItem(selectedItem.NewValue, false, false);
beatmapPanelContainer.Child = new DrawableRoomPlaylistItem(item, false, false);
}
}
}