diff --git a/osu.Game/Screens/SelectV2/ISongSelect.cs b/osu.Game/Screens/SelectV2/ISongSelect.cs index 84c4fd8a0f..1a80548380 100644 --- a/osu.Game/Screens/SelectV2/ISongSelect.cs +++ b/osu.Game/Screens/SelectV2/ISongSelect.cs @@ -18,6 +18,11 @@ namespace osu.Game.Screens.SelectV2 /// void Delete(BeatmapSetInfo beatmapBeatmapSetInfo); + /// + /// Immediately restores any hidden beatmaps in the provided beatmap set. + /// + void RestoreAllHidden(BeatmapSetInfo beatmapSet); + /// /// Opens the manage collections dialog. /// diff --git a/osu.Game/Screens/SelectV2/PanelBeatmapSet.cs b/osu.Game/Screens/SelectV2/PanelBeatmapSet.cs index 1bf6d4d90b..23152fdb61 100644 --- a/osu.Game/Screens/SelectV2/PanelBeatmapSet.cs +++ b/osu.Game/Screens/SelectV2/PanelBeatmapSet.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; 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.Sprites; @@ -17,7 +18,10 @@ using osu.Game.Graphics; using osu.Game.Graphics.Carousel; using osu.Game.Graphics.Sprites; using osu.Game.Graphics.UserInterface; +using osu.Game.Localisation; +using osu.Game.Online.API; using osu.Game.Overlays; +using osu.Game.Rulesets; using osuTK; namespace osu.Game.Screens.SelectV2 @@ -45,7 +49,16 @@ namespace osu.Game.Screens.SelectV2 private BeatmapManager beatmaps { get; set; } = null!; [Resolved] - private SongSelect? songSelect { get; set; } + private ISongSelect? songSelect { get; set; } + + [Resolved] + private OsuGame? game { get; set; } + + [Resolved] + private IAPIProvider api { get; set; } = null!; + + [Resolved] + private IBindable ruleset { get; set; } = null!; public PanelBeatmapSet() { @@ -192,6 +205,12 @@ namespace osu.Game.Screens.SelectV2 items.Add(new OsuMenuItemSpacer()); } + if (beatmapSet.Beatmaps.Any(b => b.Hidden)) + items.Add(new OsuMenuItem("Restore all hidden", MenuItemType.Standard, () => songSelect?.RestoreAllHidden(beatmapSet))); + + if (beatmapSet.GetOnlineURL(api, ruleset.Value) is string url) + items.Add(new OsuMenuItem(CommonStrings.CopyLink, MenuItemType.Standard, () => game?.CopyToClipboard(url))); + if (beatmapSet.OnlineID > 0) items.Add(new OsuMenuItem("Details...", MenuItemType.Standard, () => beatmapOverlay?.FetchAndShowBeatmapSet(beatmapSet.OnlineID))); diff --git a/osu.Game/Screens/SelectV2/SongSelect.cs b/osu.Game/Screens/SelectV2/SongSelect.cs index b999b32487..4e85d0a3eb 100644 --- a/osu.Game/Screens/SelectV2/SongSelect.cs +++ b/osu.Game/Screens/SelectV2/SongSelect.cs @@ -487,6 +487,12 @@ namespace osu.Game.Screens.SelectV2 public void Delete(BeatmapSetInfo beatmapSet) => dialogOverlay?.Push(new BeatmapDeleteDialog(beatmapSet)); + public void RestoreAllHidden(BeatmapSetInfo beatmapSet) + { + foreach (var b in beatmapSet.Beatmaps) + beatmaps.Restore(b); + } + #endregion } }