1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-15 08:13:31 +08:00

Merge pull request #15222 from peppy/online-info-as-interface

Move online beatmap set info to interface
This commit is contained in:
Dan Balasescu 2021-10-21 17:49:05 +09:00 committed by GitHub
commit 12620fcf78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 332 additions and 179 deletions

View File

@ -3,6 +3,7 @@
using NUnit.Framework; using NUnit.Framework;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Overlays.BeatmapSet; using osu.Game.Overlays.BeatmapSet;
namespace osu.Game.Tests.Visual.Online namespace osu.Game.Tests.Visual.Online
@ -22,7 +23,7 @@ namespace osu.Game.Tests.Visual.Online
{ {
AddStep("set undownloadable beatmapset with link", () => container.BeatmapSet = new BeatmapSetInfo AddStep("set undownloadable beatmapset with link", () => container.BeatmapSet = new BeatmapSetInfo
{ {
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Availability = new BeatmapSetOnlineAvailability Availability = new BeatmapSetOnlineAvailability
{ {
@ -40,7 +41,7 @@ namespace osu.Game.Tests.Visual.Online
{ {
AddStep("set undownloadable beatmapset without link", () => container.BeatmapSet = new BeatmapSetInfo AddStep("set undownloadable beatmapset without link", () => container.BeatmapSet = new BeatmapSetInfo
{ {
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Availability = new BeatmapSetOnlineAvailability Availability = new BeatmapSetOnlineAvailability
{ {
@ -57,7 +58,7 @@ namespace osu.Game.Tests.Visual.Online
{ {
AddStep("set parts-removed beatmapset with link", () => container.BeatmapSet = new BeatmapSetInfo AddStep("set parts-removed beatmapset with link", () => container.BeatmapSet = new BeatmapSetInfo
{ {
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Availability = new BeatmapSetOnlineAvailability Availability = new BeatmapSetOnlineAvailability
{ {
@ -75,7 +76,7 @@ namespace osu.Game.Tests.Visual.Online
{ {
AddStep("set normal beatmapset", () => container.BeatmapSet = new BeatmapSetInfo AddStep("set normal beatmapset", () => container.BeatmapSet = new BeatmapSetInfo
{ {
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Availability = new BeatmapSetOnlineAvailability Availability = new BeatmapSetOnlineAvailability
{ {

View File

@ -11,6 +11,7 @@ using osu.Game.Users;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using osu.Game.Online.API.Requests.Responses;
namespace osu.Game.Tests.Visual.Online namespace osu.Game.Tests.Visual.Online
{ {
@ -63,7 +64,7 @@ namespace osu.Game.Tests.Visual.Online
Id = 3, Id = 3,
}, },
}, },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Preview = @"https://b.ppy.sh/preview/12345.mp3", Preview = @"https://b.ppy.sh/preview/12345.mp3",
PlayCount = 123, PlayCount = 123,
@ -134,7 +135,7 @@ namespace osu.Game.Tests.Visual.Online
Id = 3, Id = 3,
}, },
}, },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Availability = new BeatmapSetOnlineAvailability Availability = new BeatmapSetOnlineAvailability
{ {
@ -224,7 +225,7 @@ namespace osu.Game.Tests.Visual.Online
Id = 3, Id = 3,
} }
}, },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Covers = new BeatmapSetOnlineCovers(), Covers = new BeatmapSetOnlineCovers(),
}, },
@ -309,7 +310,7 @@ namespace osu.Game.Tests.Visual.Online
Id = 3, Id = 3,
}, },
}, },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Preview = @"https://b.ppy.sh/preview/123.mp3", Preview = @"https://b.ppy.sh/preview/123.mp3",
HasVideo = true, HasVideo = true,

View File

@ -8,6 +8,7 @@ using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Utils; using osu.Framework.Utils;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Overlays; using osu.Game.Overlays;
using osu.Game.Overlays.BeatmapSet; using osu.Game.Overlays.BeatmapSet;
using osu.Game.Screens.Select.Details; using osu.Game.Screens.Select.Details;
@ -57,7 +58,7 @@ namespace osu.Game.Tests.Visual.Online
}, },
} }
}, },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Status = BeatmapSetOnlineStatus.Ranked Status = BeatmapSetOnlineStatus.Ranked
} }

View File

@ -7,6 +7,7 @@ using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Online; using osu.Game.Online;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Overlays.BeatmapListing.Panels; using osu.Game.Overlays.BeatmapListing.Panels;
using osu.Game.Rulesets.Osu; using osu.Game.Rulesets.Osu;
using osu.Game.Tests.Resources; using osu.Game.Tests.Resources;
@ -74,7 +75,7 @@ namespace osu.Game.Tests.Visual.Online
{ {
ID = 1, ID = 1,
OnlineBeatmapSetID = 241526, OnlineBeatmapSetID = 241526,
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Availability = new BeatmapSetOnlineAvailability Availability = new BeatmapSetOnlineAvailability
{ {

View File

@ -7,6 +7,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Game.Audio; using osu.Game.Audio;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Overlays.BeatmapListing.Panels; using osu.Game.Overlays.BeatmapListing.Panels;
using osu.Game.Rulesets; using osu.Game.Rulesets;
using osu.Game.Users; using osu.Game.Users;
@ -31,7 +32,7 @@ namespace osu.Game.Tests.Visual.Online
Id = 3, Id = 3,
}, },
}, },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Availability = new BeatmapSetOnlineAvailability Availability = new BeatmapSetOnlineAvailability
{ {
@ -86,7 +87,7 @@ namespace osu.Game.Tests.Visual.Online
Id = 3, Id = 3,
} }
}, },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
HasVideo = true, HasVideo = true,
HasStoryboard = true, HasStoryboard = true,

View File

@ -10,6 +10,7 @@ using osu.Framework.Graphics.Containers;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Configuration; using osu.Game.Configuration;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Overlays; using osu.Game.Overlays;
using osu.Game.Overlays.BeatmapListing; using osu.Game.Overlays.BeatmapListing;
using osuTK; using osuTK;
@ -111,7 +112,7 @@ namespace osu.Game.Tests.Visual.UserInterface
private static readonly BeatmapSetInfo beatmap_set = new BeatmapSetInfo private static readonly BeatmapSetInfo beatmap_set = new BeatmapSetInfo
{ {
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Covers = new BeatmapSetOnlineCovers Covers = new BeatmapSetOnlineCovers
{ {
@ -122,7 +123,7 @@ namespace osu.Game.Tests.Visual.UserInterface
private static readonly BeatmapSetInfo no_cover_beatmap_set = new BeatmapSetInfo private static readonly BeatmapSetInfo no_cover_beatmap_set = new BeatmapSetInfo
{ {
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Covers = new BeatmapSetOnlineCovers Covers = new BeatmapSetOnlineCovers
{ {

View File

@ -11,6 +11,7 @@ using osu.Game.Users;
using System; using System;
using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Shapes;
using System.Collections.Generic; using System.Collections.Generic;
using osu.Game.Online.API.Requests.Responses;
namespace osu.Game.Tests.Visual.UserInterface namespace osu.Game.Tests.Visual.UserInterface
{ {
@ -69,7 +70,7 @@ namespace osu.Game.Tests.Visual.UserInterface
Id = 100 Id = 100
} }
}, },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Covers = new BeatmapSetOnlineCovers Covers = new BeatmapSetOnlineCovers
{ {
@ -90,7 +91,7 @@ namespace osu.Game.Tests.Visual.UserInterface
Id = 100 Id = 100
} }
}, },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Covers = new BeatmapSetOnlineCovers Covers = new BeatmapSetOnlineCovers
{ {
@ -115,7 +116,7 @@ namespace osu.Game.Tests.Visual.UserInterface
Id = 100 Id = 100
} }
}, },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Covers = new BeatmapSetOnlineCovers Covers = new BeatmapSetOnlineCovers
{ {
@ -136,7 +137,7 @@ namespace osu.Game.Tests.Visual.UserInterface
Id = 100 Id = 100
} }
}, },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Covers = new BeatmapSetOnlineCovers Covers = new BeatmapSetOnlineCovers
{ {

View File

@ -13,6 +13,7 @@ using osu.Framework.Testing;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Beatmaps.Drawables; using osu.Game.Beatmaps.Drawables;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using osu.Game.Online.API.Requests.Responses;
using osuTK; using osuTK;
namespace osu.Game.Tests.Visual.UserInterface namespace osu.Game.Tests.Visual.UserInterface
@ -22,21 +23,21 @@ namespace osu.Game.Tests.Visual.UserInterface
[Test] [Test]
public void TestLocal([Values] BeatmapSetCoverType coverType) public void TestLocal([Values] BeatmapSetCoverType coverType)
{ {
AddStep("setup cover", () => Child = new UpdateableBeatmapSetCover(coverType) AddStep("setup cover", () => Child = new UpdateableOnlineBeatmapSetCover(coverType)
{ {
BeatmapSet = CreateBeatmap(Ruleset.Value).BeatmapInfo.BeatmapSet, BeatmapSet = CreateBeatmap(Ruleset.Value).BeatmapInfo.BeatmapSet,
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Masking = true, Masking = true,
}); });
AddUntilStep("wait for load", () => this.ChildrenOfType<BeatmapSetCover>().SingleOrDefault()?.IsLoaded ?? false); AddUntilStep("wait for load", () => this.ChildrenOfType<OnlineBeatmapSetCover>().SingleOrDefault()?.IsLoaded ?? false);
} }
[Test] [Test]
public void TestUnloadAndReload() public void TestUnloadAndReload()
{ {
OsuScrollContainer scroll = null; OsuScrollContainer scroll = null;
List<UpdateableBeatmapSetCover> covers = new List<UpdateableBeatmapSetCover>(); List<UpdateableOnlineBeatmapSetCover> covers = new List<UpdateableOnlineBeatmapSetCover>();
AddStep("setup covers", () => AddStep("setup covers", () =>
{ {
@ -65,7 +66,7 @@ namespace osu.Game.Tests.Visual.UserInterface
{ {
var coverType = coverTypes[i % coverTypes.Count]; var coverType = coverTypes[i % coverTypes.Count];
var cover = new UpdateableBeatmapSetCover(coverType) var cover = new UpdateableOnlineBeatmapSetCover(coverType)
{ {
BeatmapSet = setInfo, BeatmapSet = setInfo,
Height = 100, Height = 100,
@ -84,7 +85,7 @@ namespace osu.Game.Tests.Visual.UserInterface
} }
}); });
var loadedCovers = covers.Where(c => c.ChildrenOfType<BeatmapSetCover>().SingleOrDefault()?.IsLoaded ?? false); var loadedCovers = covers.Where(c => c.ChildrenOfType<OnlineBeatmapSetCover>().SingleOrDefault()?.IsLoaded ?? false);
AddUntilStep("some loaded", () => loadedCovers.Any()); AddUntilStep("some loaded", () => loadedCovers.Any());
AddStep("scroll to end", () => scroll.ScrollToEnd()); AddStep("scroll to end", () => scroll.ScrollToEnd());
@ -94,9 +95,9 @@ namespace osu.Game.Tests.Visual.UserInterface
[Test] [Test]
public void TestSetNullBeatmapWhileLoading() public void TestSetNullBeatmapWhileLoading()
{ {
TestUpdateableBeatmapSetCover updateableCover = null; TestUpdateableOnlineBeatmapSetCover updateableCover = null;
AddStep("setup cover", () => Child = updateableCover = new TestUpdateableBeatmapSetCover AddStep("setup cover", () => Child = updateableCover = new TestUpdateableOnlineBeatmapSetCover
{ {
BeatmapSet = CreateBeatmap(Ruleset.Value).BeatmapInfo.BeatmapSet, BeatmapSet = CreateBeatmap(Ruleset.Value).BeatmapInfo.BeatmapSet,
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
@ -111,10 +112,10 @@ namespace osu.Game.Tests.Visual.UserInterface
[Test] [Test]
public void TestCoverChangeOnNewBeatmap() public void TestCoverChangeOnNewBeatmap()
{ {
TestUpdateableBeatmapSetCover updateableCover = null; TestUpdateableOnlineBeatmapSetCover updateableCover = null;
BeatmapSetCover initialCover = null; OnlineBeatmapSetCover initialCover = null;
AddStep("setup cover", () => Child = updateableCover = new TestUpdateableBeatmapSetCover(0) AddStep("setup cover", () => Child = updateableCover = new TestUpdateableOnlineBeatmapSetCover(0)
{ {
BeatmapSet = createBeatmapWithCover("https://assets.ppy.sh/beatmaps/1189904/covers/cover.jpg"), BeatmapSet = createBeatmapWithCover("https://assets.ppy.sh/beatmaps/1189904/covers/cover.jpg"),
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
@ -122,38 +123,38 @@ namespace osu.Game.Tests.Visual.UserInterface
Alpha = 0.4f Alpha = 0.4f
}); });
AddUntilStep("cover loaded", () => updateableCover.ChildrenOfType<BeatmapSetCover>().Any()); AddUntilStep("cover loaded", () => updateableCover.ChildrenOfType<OnlineBeatmapSetCover>().Any());
AddStep("store initial cover", () => initialCover = updateableCover.ChildrenOfType<BeatmapSetCover>().Single()); AddStep("store initial cover", () => initialCover = updateableCover.ChildrenOfType<OnlineBeatmapSetCover>().Single());
AddUntilStep("wait for fade complete", () => initialCover.Alpha == 1); AddUntilStep("wait for fade complete", () => initialCover.Alpha == 1);
AddStep("switch beatmap", AddStep("switch beatmap",
() => updateableCover.BeatmapSet = createBeatmapWithCover("https://assets.ppy.sh/beatmaps/1079428/covers/cover.jpg")); () => updateableCover.BeatmapSet = createBeatmapWithCover("https://assets.ppy.sh/beatmaps/1079428/covers/cover.jpg"));
AddUntilStep("new cover loaded", () => updateableCover.ChildrenOfType<BeatmapSetCover>().Except(new[] { initialCover }).Any()); AddUntilStep("new cover loaded", () => updateableCover.ChildrenOfType<OnlineBeatmapSetCover>().Except(new[] { initialCover }).Any());
} }
private static BeatmapSetInfo createBeatmapWithCover(string coverUrl) => new BeatmapSetInfo private static BeatmapSetInfo createBeatmapWithCover(string coverUrl) => new BeatmapSetInfo
{ {
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = new APIBeatmapSet
{ {
Covers = new BeatmapSetOnlineCovers { Cover = coverUrl } Covers = new BeatmapSetOnlineCovers { Cover = coverUrl }
} }
}; };
private class TestUpdateableBeatmapSetCover : UpdateableBeatmapSetCover private class TestUpdateableOnlineBeatmapSetCover : UpdateableOnlineBeatmapSetCover
{ {
private readonly int loadDelay; private readonly int loadDelay;
public TestUpdateableBeatmapSetCover(int loadDelay = 10000) public TestUpdateableOnlineBeatmapSetCover(int loadDelay = 10000)
{ {
this.loadDelay = loadDelay; this.loadDelay = loadDelay;
} }
protected override Drawable CreateDrawable(BeatmapSetInfo model) protected override Drawable CreateDrawable(IBeatmapSetOnlineInfo model)
{ {
if (model == null) if (model == null)
return null; return null;
return new TestBeatmapSetCover(model, loadDelay) return new TestOnlineBeatmapSetCover(model, loadDelay)
{ {
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
@ -163,11 +164,11 @@ namespace osu.Game.Tests.Visual.UserInterface
} }
} }
private class TestBeatmapSetCover : BeatmapSetCover private class TestOnlineBeatmapSetCover : OnlineBeatmapSetCover
{ {
private readonly int loadDelay; private readonly int loadDelay;
public TestBeatmapSetCover(BeatmapSetInfo set, int loadDelay) public TestOnlineBeatmapSetCover(IBeatmapSetOnlineInfo set, int loadDelay)
: base(set) : base(set)
{ {
this.loadDelay = loadDelay; this.loadDelay = loadDelay;

View File

@ -10,7 +10,6 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Framework.Localisation;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Beatmaps.Drawables; using osu.Game.Beatmaps.Drawables;
using osu.Game.Graphics; using osu.Game.Graphics;
@ -21,7 +20,8 @@ namespace osu.Game.Tournament.Components
{ {
public class TournamentBeatmapPanel : CompositeDrawable public class TournamentBeatmapPanel : CompositeDrawable
{ {
public readonly BeatmapInfo BeatmapInfo; public readonly IBeatmapInfo BeatmapInfo;
private readonly string mod; private readonly string mod;
private const float horizontal_padding = 10; private const float horizontal_padding = 10;
@ -32,12 +32,13 @@ namespace osu.Game.Tournament.Components
private readonly Bindable<TournamentMatch> currentMatch = new Bindable<TournamentMatch>(); private readonly Bindable<TournamentMatch> currentMatch = new Bindable<TournamentMatch>();
private Box flash; private Box flash;
public TournamentBeatmapPanel(BeatmapInfo beatmapInfo, string mod = null) public TournamentBeatmapPanel(IBeatmapInfo beatmapInfo, string mod = null)
{ {
if (beatmapInfo == null) throw new ArgumentNullException(nameof(beatmapInfo)); if (beatmapInfo == null) throw new ArgumentNullException(nameof(beatmapInfo));
BeatmapInfo = beatmapInfo; BeatmapInfo = beatmapInfo;
this.mod = mod; this.mod = mod;
Width = 400; Width = 400;
Height = HEIGHT; Height = HEIGHT;
} }
@ -57,11 +58,11 @@ namespace osu.Game.Tournament.Components
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Colour = Color4.Black, Colour = Color4.Black,
}, },
new UpdateableBeatmapSetCover new UpdateableOnlineBeatmapSetCover
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Colour = OsuColour.Gray(0.5f), Colour = OsuColour.Gray(0.5f),
BeatmapSet = BeatmapInfo.BeatmapSet, BeatmapSet = BeatmapInfo.BeatmapSet as IBeatmapSetOnlineInfo,
}, },
new FillFlowContainer new FillFlowContainer
{ {
@ -74,9 +75,7 @@ namespace osu.Game.Tournament.Components
{ {
new TournamentSpriteText new TournamentSpriteText
{ {
Text = new RomanisableString( Text = BeatmapInfo.GetDisplayTitleRomanisable(false),
$"{BeatmapInfo.Metadata.ArtistUnicode ?? BeatmapInfo.Metadata.Artist} - {BeatmapInfo.Metadata.TitleUnicode ?? BeatmapInfo.Metadata.Title}",
$"{BeatmapInfo.Metadata.Artist} - {BeatmapInfo.Metadata.Title}"),
Font = OsuFont.Torus.With(weight: FontWeight.Bold), Font = OsuFont.Torus.With(weight: FontWeight.Bold),
}, },
new FillFlowContainer new FillFlowContainer
@ -93,7 +92,7 @@ namespace osu.Game.Tournament.Components
}, },
new TournamentSpriteText new TournamentSpriteText
{ {
Text = BeatmapInfo.Metadata.AuthorString, Text = BeatmapInfo.Metadata?.Author,
Padding = new MarginPadding { Right = 20 }, Padding = new MarginPadding { Right = 20 },
Font = OsuFont.Torus.With(weight: FontWeight.Bold, size: 14) Font = OsuFont.Torus.With(weight: FontWeight.Bold, size: 14)
}, },
@ -105,7 +104,7 @@ namespace osu.Game.Tournament.Components
}, },
new TournamentSpriteText new TournamentSpriteText
{ {
Text = BeatmapInfo.Version, Text = BeatmapInfo.DifficultyName,
Font = OsuFont.Torus.With(weight: FontWeight.Bold, size: 14) Font = OsuFont.Torus.With(weight: FontWeight.Bold, size: 14)
}, },
} }
@ -149,7 +148,7 @@ namespace osu.Game.Tournament.Components
private void updateState() private void updateState()
{ {
var found = currentMatch.Value.PicksBans.FirstOrDefault(p => p.BeatmapID == BeatmapInfo.OnlineBeatmapID); var found = currentMatch.Value.PicksBans.FirstOrDefault(p => p.BeatmapID == BeatmapInfo.OnlineID);
bool doFlash = found != choice; bool doFlash = found != choice;
choice = found; choice = found;

View File

@ -147,11 +147,11 @@ namespace osu.Game.Tournament.Screens.MapPool
if (map != null) if (map != null)
{ {
if (e.Button == MouseButton.Left && map.BeatmapInfo.OnlineBeatmapID != null) if (e.Button == MouseButton.Left && map.BeatmapInfo.OnlineID > 0)
addForBeatmap(map.BeatmapInfo.OnlineBeatmapID.Value); addForBeatmap(map.BeatmapInfo.OnlineID);
else else
{ {
var existing = CurrentMatch.Value.PicksBans.FirstOrDefault(p => p.BeatmapID == map.BeatmapInfo.OnlineBeatmapID); var existing = CurrentMatch.Value.PicksBans.FirstOrDefault(p => p.BeatmapID == map.BeatmapInfo.OnlineID);
if (existing != null) if (existing != null)
{ {

View File

@ -16,12 +16,17 @@ namespace osu.Game.Beatmaps
/// <summary> /// <summary>
/// A user-presentable display title representing this beatmap, with localisation handling for potentially romanisable fields. /// A user-presentable display title representing this beatmap, with localisation handling for potentially romanisable fields.
/// </summary> /// </summary>
public static RomanisableString GetDisplayTitleRomanisable(this IBeatmapInfo beatmapInfo) public static RomanisableString GetDisplayTitleRomanisable(this IBeatmapInfo beatmapInfo, bool includeDifficultyName = true)
{ {
var metadata = getClosestMetadata(beatmapInfo).GetDisplayTitleRomanisable(); var metadata = getClosestMetadata(beatmapInfo).GetDisplayTitleRomanisable();
var versionString = getVersionString(beatmapInfo);
return new RomanisableString($"{metadata.GetPreferred(true)} {versionString}".Trim(), $"{metadata.GetPreferred(false)} {versionString}".Trim()); if (includeDifficultyName)
{
var versionString = getVersionString(beatmapInfo);
return new RomanisableString($"{metadata.GetPreferred(true)} {versionString}".Trim(), $"{metadata.GetPreferred(false)} {versionString}".Trim());
}
return new RomanisableString($"{metadata.GetPreferred(true)}".Trim(), $"{metadata.GetPreferred(false)}".Trim());
} }
public static string[] GetSearchableTerms(this IBeatmapInfo beatmapInfo) => new[] public static string[] GetSearchableTerms(this IBeatmapInfo beatmapInfo) => new[]

View File

@ -6,13 +6,15 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Linq; using System.Linq;
using JetBrains.Annotations; using JetBrains.Annotations;
using Newtonsoft.Json;
using osu.Framework.Testing; using osu.Framework.Testing;
using osu.Game.Database; using osu.Game.Database;
using osu.Game.Online.API.Requests.Responses;
namespace osu.Game.Beatmaps namespace osu.Game.Beatmaps
{ {
[ExcludeFromDynamicCompile] [ExcludeFromDynamicCompile]
public class BeatmapSetInfo : IHasPrimaryKey, IHasFiles<BeatmapSetFileInfo>, ISoftDelete, IEquatable<BeatmapSetInfo>, IBeatmapSetInfo public class BeatmapSetInfo : IHasPrimaryKey, IHasFiles<BeatmapSetFileInfo>, ISoftDelete, IEquatable<BeatmapSetInfo>, IBeatmapSetInfo, IBeatmapSetOnlineInfo
{ {
public int ID { get; set; } public int ID { get; set; }
@ -26,8 +28,6 @@ namespace osu.Game.Beatmaps
public DateTimeOffset DateAdded { get; set; } public DateTimeOffset DateAdded { get; set; }
public BeatmapSetOnlineStatus Status { get; set; } = BeatmapSetOnlineStatus.None;
public BeatmapMetadata Metadata { get; set; } public BeatmapMetadata Metadata { get; set; }
public List<BeatmapInfo> Beatmaps { get; set; } public List<BeatmapInfo> Beatmaps { get; set; }
@ -36,7 +36,7 @@ namespace osu.Game.Beatmaps
public List<BeatmapSetFileInfo> Files { get; set; } = new List<BeatmapSetFileInfo>(); public List<BeatmapSetFileInfo> Files { get; set; } = new List<BeatmapSetFileInfo>();
[NotMapped] [NotMapped]
public BeatmapSetOnlineInfo OnlineInfo { get; set; } public APIBeatmapSet OnlineInfo { get; set; }
[NotMapped] [NotMapped]
public BeatmapSetMetrics Metrics { get; set; } public BeatmapSetMetrics Metrics { get; set; }
@ -102,5 +102,141 @@ namespace osu.Game.Beatmaps
IEnumerable<INamedFileUsage> IBeatmapSetInfo.Files => Files; IEnumerable<INamedFileUsage> IBeatmapSetInfo.Files => Files;
#endregion #endregion
#region Delegation for IBeatmapSetOnlineInfo
[NotMapped]
[JsonIgnore]
public DateTimeOffset Submitted
{
get => OnlineInfo.Submitted;
set => OnlineInfo.Submitted = value;
}
[NotMapped]
[JsonIgnore]
public DateTimeOffset? Ranked
{
get => OnlineInfo.Ranked;
set => OnlineInfo.Ranked = value;
}
[NotMapped]
[JsonIgnore]
public DateTimeOffset? LastUpdated
{
get => OnlineInfo.LastUpdated;
set => OnlineInfo.LastUpdated = value;
}
[NotMapped]
[JsonIgnore]
public BeatmapSetOnlineStatus Status { get; set; } = BeatmapSetOnlineStatus.None;
[NotMapped]
[JsonIgnore]
public bool HasExplicitContent
{
get => OnlineInfo.HasExplicitContent;
set => OnlineInfo.HasExplicitContent = value;
}
[NotMapped]
[JsonIgnore]
public bool HasVideo
{
get => OnlineInfo.HasVideo;
set => OnlineInfo.HasVideo = value;
}
[NotMapped]
[JsonIgnore]
public bool HasStoryboard
{
get => OnlineInfo.HasStoryboard;
set => OnlineInfo.HasStoryboard = value;
}
[NotMapped]
[JsonIgnore]
public BeatmapSetOnlineCovers Covers
{
get => OnlineInfo.Covers;
set => OnlineInfo.Covers = value;
}
[NotMapped]
[JsonIgnore]
public string Preview
{
get => OnlineInfo.Preview;
set => OnlineInfo.Preview = value;
}
[NotMapped]
[JsonIgnore]
public double BPM
{
get => OnlineInfo.BPM;
set => OnlineInfo.BPM = value;
}
[NotMapped]
[JsonIgnore]
public int PlayCount
{
get => OnlineInfo.PlayCount;
set => OnlineInfo.PlayCount = value;
}
[NotMapped]
[JsonIgnore]
public int FavouriteCount
{
get => OnlineInfo.FavouriteCount;
set => OnlineInfo.FavouriteCount = value;
}
[NotMapped]
[JsonIgnore]
public bool HasFavourited
{
get => OnlineInfo.HasFavourited;
set => OnlineInfo.HasFavourited = value;
}
[NotMapped]
[JsonIgnore]
public BeatmapSetOnlineAvailability Availability
{
get => OnlineInfo.Availability;
set => OnlineInfo.Availability = value;
}
[NotMapped]
[JsonIgnore]
public BeatmapSetOnlineGenre Genre
{
get => OnlineInfo.Genre;
set => OnlineInfo.Genre = value;
}
[NotMapped]
[JsonIgnore]
public BeatmapSetOnlineLanguage Language
{
get => OnlineInfo.Language;
set => OnlineInfo.Language = value;
}
[NotMapped]
[JsonIgnore]
public int? TrackId
{
get => OnlineInfo.TrackId;
set => OnlineInfo.TrackId = value;
}
#endregion
} }
} }

View File

@ -0,0 +1,16 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using Newtonsoft.Json;
namespace osu.Game.Beatmaps
{
public class BeatmapSetOnlineAvailability
{
[JsonProperty(@"download_disabled")]
public bool DownloadDisabled { get; set; }
[JsonProperty(@"more_information")]
public string ExternalLink { get; set; }
}
}

View File

@ -0,0 +1,25 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using Newtonsoft.Json;
namespace osu.Game.Beatmaps
{
public class BeatmapSetOnlineCovers
{
public string CoverLowRes { get; set; }
[JsonProperty(@"cover@2x")]
public string Cover { get; set; }
public string CardLowRes { get; set; }
[JsonProperty(@"card@2x")]
public string Card { get; set; }
public string ListLowRes { get; set; }
[JsonProperty(@"list@2x")]
public string List { get; set; }
}
}

View File

@ -0,0 +1,11 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
namespace osu.Game.Beatmaps
{
public class BeatmapSetOnlineGenre
{
public int Id { get; set; }
public string Name { get; set; }
}
}

View File

@ -0,0 +1,11 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
namespace osu.Game.Beatmaps
{
public class BeatmapSetOnlineLanguage
{
public int Id { get; set; }
public string Name { get; set; }
}
}

View File

@ -9,12 +9,12 @@ using osu.Framework.Graphics.Textures;
namespace osu.Game.Beatmaps.Drawables namespace osu.Game.Beatmaps.Drawables
{ {
[LongRunningLoad] [LongRunningLoad]
public class BeatmapSetCover : Sprite public class OnlineBeatmapSetCover : Sprite
{ {
private readonly BeatmapSetInfo set; private readonly IBeatmapSetOnlineInfo set;
private readonly BeatmapSetCoverType type; private readonly BeatmapSetCoverType type;
public BeatmapSetCover(BeatmapSetInfo set, BeatmapSetCoverType type = BeatmapSetCoverType.Cover) public OnlineBeatmapSetCover(IBeatmapSetOnlineInfo set, BeatmapSetCoverType type = BeatmapSetCoverType.Cover)
{ {
if (set == null) if (set == null)
throw new ArgumentNullException(nameof(set)); throw new ArgumentNullException(nameof(set));
@ -31,15 +31,15 @@ namespace osu.Game.Beatmaps.Drawables
switch (type) switch (type)
{ {
case BeatmapSetCoverType.Cover: case BeatmapSetCoverType.Cover:
resource = set.OnlineInfo.Covers.Cover; resource = set.Covers.Cover;
break; break;
case BeatmapSetCoverType.Card: case BeatmapSetCoverType.Card:
resource = set.OnlineInfo.Covers.Card; resource = set.Covers.Card;
break; break;
case BeatmapSetCoverType.List: case BeatmapSetCoverType.List:
resource = set.OnlineInfo.Covers.List; resource = set.Covers.List;
break; break;
} }

View File

@ -54,7 +54,7 @@ namespace osu.Game.Beatmaps.Drawables
{ {
// prefer online cover where available. // prefer online cover where available.
if (model?.BeatmapSet?.OnlineInfo != null) if (model?.BeatmapSet?.OnlineInfo != null)
return new BeatmapSetCover(model.BeatmapSet, beatmapSetCoverType); return new OnlineBeatmapSetCover(model.BeatmapSet, beatmapSetCoverType);
return model?.ID > 0 return model?.ID > 0
? new BeatmapBackgroundSprite(beatmaps.GetWorkingBeatmap(model)) ? new BeatmapBackgroundSprite(beatmaps.GetWorkingBeatmap(model))

View File

@ -9,11 +9,11 @@ using osu.Game.Graphics;
namespace osu.Game.Beatmaps.Drawables namespace osu.Game.Beatmaps.Drawables
{ {
public class UpdateableBeatmapSetCover : ModelBackedDrawable<BeatmapSetInfo> public class UpdateableOnlineBeatmapSetCover : ModelBackedDrawable<IBeatmapSetOnlineInfo>
{ {
private readonly BeatmapSetCoverType coverType; private readonly BeatmapSetCoverType coverType;
public BeatmapSetInfo BeatmapSet public IBeatmapSetOnlineInfo BeatmapSet
{ {
get => Model; get => Model;
set => Model = value; set => Model = value;
@ -25,7 +25,7 @@ namespace osu.Game.Beatmaps.Drawables
set => base.Masking = value; set => base.Masking = value;
} }
public UpdateableBeatmapSetCover(BeatmapSetCoverType coverType = BeatmapSetCoverType.Cover) public UpdateableOnlineBeatmapSetCover(BeatmapSetCoverType coverType = BeatmapSetCoverType.Cover)
{ {
this.coverType = coverType; this.coverType = coverType;
@ -43,12 +43,12 @@ namespace osu.Game.Beatmaps.Drawables
protected override DelayedLoadWrapper CreateDelayedLoadWrapper(Func<Drawable> createContentFunc, double timeBeforeLoad) protected override DelayedLoadWrapper CreateDelayedLoadWrapper(Func<Drawable> createContentFunc, double timeBeforeLoad)
=> new DelayedLoadUnloadWrapper(createContentFunc, timeBeforeLoad); => new DelayedLoadUnloadWrapper(createContentFunc, timeBeforeLoad);
protected override Drawable CreateDrawable(BeatmapSetInfo model) protected override Drawable CreateDrawable(IBeatmapSetOnlineInfo model)
{ {
if (model == null) if (model == null)
return null; return null;
return new BeatmapSetCover(model, coverType) return new OnlineBeatmapSetCover(model, coverType)
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Anchor = Anchor.Centre, Anchor = Anchor.Centre,

View File

@ -1,139 +1,99 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
using System; using System;
using Newtonsoft.Json;
namespace osu.Game.Beatmaps namespace osu.Game.Beatmaps
{ {
/// <summary> /// <summary>
/// Beatmap set info retrieved for previewing locally without having the set downloaded. /// Beatmap set info retrieved for previewing locally without having the set downloaded.
/// </summary> /// </summary>
public class BeatmapSetOnlineInfo public interface IBeatmapSetOnlineInfo
{ {
/// <summary> /// <summary>
/// The date this beatmap set was submitted to the online listing. /// The date this beatmap set was submitted to the online listing.
/// </summary> /// </summary>
public DateTimeOffset Submitted { get; set; } DateTimeOffset Submitted { get; set; }
/// <summary> /// <summary>
/// The date this beatmap set was ranked. /// The date this beatmap set was ranked.
/// </summary> /// </summary>
public DateTimeOffset? Ranked { get; set; } DateTimeOffset? Ranked { get; set; }
/// <summary> /// <summary>
/// The date this beatmap set was last updated. /// The date this beatmap set was last updated.
/// </summary> /// </summary>
public DateTimeOffset? LastUpdated { get; set; } DateTimeOffset? LastUpdated { get; set; }
/// <summary> /// <summary>
/// The status of this beatmap set. /// The status of this beatmap set.
/// </summary> /// </summary>
public BeatmapSetOnlineStatus Status { get; set; } BeatmapSetOnlineStatus Status { get; set; }
/// <summary> /// <summary>
/// Whether or not this beatmap set has explicit content. /// Whether or not this beatmap set has explicit content.
/// </summary> /// </summary>
public bool HasExplicitContent { get; set; } bool HasExplicitContent { get; set; }
/// <summary> /// <summary>
/// Whether or not this beatmap set has a background video. /// Whether or not this beatmap set has a background video.
/// </summary> /// </summary>
public bool HasVideo { get; set; } bool HasVideo { get; set; }
/// <summary> /// <summary>
/// Whether or not this beatmap set has a storyboard. /// Whether or not this beatmap set has a storyboard.
/// </summary> /// </summary>
public bool HasStoryboard { get; set; } bool HasStoryboard { get; set; }
/// <summary> /// <summary>
/// The different sizes of cover art for this beatmap set. /// The different sizes of cover art for this beatmap set.
/// </summary> /// </summary>
public BeatmapSetOnlineCovers Covers { get; set; } BeatmapSetOnlineCovers Covers { get; set; }
/// <summary> /// <summary>
/// A small sample clip of this beatmap set's song. /// A small sample clip of this beatmap set's song.
/// </summary> /// </summary>
public string Preview { get; set; } string Preview { get; set; }
/// <summary> /// <summary>
/// The beats per minute of this beatmap set's song. /// The beats per minute of this beatmap set's song.
/// </summary> /// </summary>
public double BPM { get; set; } double BPM { get; set; }
/// <summary> /// <summary>
/// The amount of plays this beatmap set has. /// The amount of plays this beatmap set has.
/// </summary> /// </summary>
public int PlayCount { get; set; } int PlayCount { get; set; }
/// <summary> /// <summary>
/// The amount of people who have favourited this beatmap set. /// The amount of people who have favourited this beatmap set.
/// </summary> /// </summary>
public int FavouriteCount { get; set; } int FavouriteCount { get; set; }
/// <summary> /// <summary>
/// Whether this beatmap set has been favourited by the current user. /// Whether this beatmap set has been favourited by the current user.
/// </summary> /// </summary>
public bool HasFavourited { get; set; } bool HasFavourited { get; set; }
/// <summary> /// <summary>
/// The availability of this beatmap set. /// The availability of this beatmap set.
/// </summary> /// </summary>
public BeatmapSetOnlineAvailability Availability { get; set; } BeatmapSetOnlineAvailability Availability { get; set; }
/// <summary> /// <summary>
/// The song genre of this beatmap set. /// The song genre of this beatmap set.
/// </summary> /// </summary>
public BeatmapSetOnlineGenre Genre { get; set; } BeatmapSetOnlineGenre Genre { get; set; }
/// <summary> /// <summary>
/// The song language of this beatmap set. /// The song language of this beatmap set.
/// </summary> /// </summary>
public BeatmapSetOnlineLanguage Language { get; set; } BeatmapSetOnlineLanguage Language { get; set; }
/// <summary> /// <summary>
/// The track ID of this beatmap set. /// The track ID of this beatmap set.
/// Non-null only if the track is linked to a featured artist track entry. /// Non-null only if the track is linked to a featured artist track entry.
/// </summary> /// </summary>
public int? TrackId { get; set; } int? TrackId { get; set; }
}
public class BeatmapSetOnlineGenre
{
public int Id { get; set; }
public string Name { get; set; }
}
public class BeatmapSetOnlineLanguage
{
public int Id { get; set; }
public string Name { get; set; }
}
public class BeatmapSetOnlineCovers
{
public string CoverLowRes { get; set; }
[JsonProperty(@"cover@2x")]
public string Cover { get; set; }
public string CardLowRes { get; set; }
[JsonProperty(@"card@2x")]
public string Card { get; set; }
public string ListLowRes { get; set; }
[JsonProperty(@"list@2x")]
public string List { get; set; }
}
public class BeatmapSetOnlineAvailability
{
[JsonProperty(@"download_disabled")]
public bool DownloadDisabled { get; set; }
[JsonProperty(@"more_information")]
public string ExternalLink { get; set; }
} }
} }

View File

@ -10,10 +10,10 @@ using osu.Game.Rulesets;
namespace osu.Game.Online.API.Requests.Responses namespace osu.Game.Online.API.Requests.Responses
{ {
public class APIBeatmapSet : BeatmapMetadata // todo: this is a bit wrong... public class APIBeatmapSet : BeatmapMetadata, IBeatmapSetOnlineInfo
{ {
[JsonProperty(@"covers")] [JsonProperty(@"covers")]
private BeatmapSetOnlineCovers covers { get; set; } public BeatmapSetOnlineCovers Covers { get; set; }
private int? onlineBeatmapSetID; private int? onlineBeatmapSetID;
@ -28,43 +28,43 @@ namespace osu.Game.Online.API.Requests.Responses
public BeatmapSetOnlineStatus Status { get; set; } public BeatmapSetOnlineStatus Status { get; set; }
[JsonProperty(@"preview_url")] [JsonProperty(@"preview_url")]
private string preview { get; set; } public string Preview { get; set; }
[JsonProperty(@"has_favourited")] [JsonProperty(@"has_favourited")]
private bool hasFavourited { get; set; } public bool HasFavourited { get; set; }
[JsonProperty(@"play_count")] [JsonProperty(@"play_count")]
private int playCount { get; set; } public int PlayCount { get; set; }
[JsonProperty(@"favourite_count")] [JsonProperty(@"favourite_count")]
private int favouriteCount { get; set; } public int FavouriteCount { get; set; }
[JsonProperty(@"bpm")] [JsonProperty(@"bpm")]
private double bpm { get; set; } public double BPM { get; set; }
[JsonProperty(@"nsfw")] [JsonProperty(@"nsfw")]
private bool hasExplicitContent { get; set; } public bool HasExplicitContent { get; set; }
[JsonProperty(@"video")] [JsonProperty(@"video")]
private bool hasVideo { get; set; } public bool HasVideo { get; set; }
[JsonProperty(@"storyboard")] [JsonProperty(@"storyboard")]
private bool hasStoryboard { get; set; } public bool HasStoryboard { get; set; }
[JsonProperty(@"submitted_date")] [JsonProperty(@"submitted_date")]
private DateTimeOffset submitted { get; set; } public DateTimeOffset Submitted { get; set; }
[JsonProperty(@"ranked_date")] [JsonProperty(@"ranked_date")]
private DateTimeOffset? ranked { get; set; } public DateTimeOffset? Ranked { get; set; }
[JsonProperty(@"last_updated")] [JsonProperty(@"last_updated")]
private DateTimeOffset lastUpdated { get; set; } public DateTimeOffset? LastUpdated { get; set; }
[JsonProperty(@"ratings")] [JsonProperty(@"ratings")]
private int[] ratings { get; set; } private int[] ratings { get; set; }
[JsonProperty(@"track_id")] [JsonProperty(@"track_id")]
private int? trackId { get; set; } public int? TrackId { get; set; }
[JsonProperty(@"user_id")] [JsonProperty(@"user_id")]
private int creatorId private int creatorId
@ -73,13 +73,13 @@ namespace osu.Game.Online.API.Requests.Responses
} }
[JsonProperty(@"availability")] [JsonProperty(@"availability")]
private BeatmapSetOnlineAvailability availability { get; set; } public BeatmapSetOnlineAvailability Availability { get; set; }
[JsonProperty(@"genre")] [JsonProperty(@"genre")]
private BeatmapSetOnlineGenre genre { get; set; } public BeatmapSetOnlineGenre Genre { get; set; }
[JsonProperty(@"language")] [JsonProperty(@"language")]
private BeatmapSetOnlineLanguage language { get; set; } public BeatmapSetOnlineLanguage Language { get; set; }
[JsonProperty(@"beatmaps")] [JsonProperty(@"beatmaps")]
private IEnumerable<APIBeatmap> beatmaps { get; set; } private IEnumerable<APIBeatmap> beatmaps { get; set; }
@ -92,26 +92,7 @@ namespace osu.Game.Online.API.Requests.Responses
Metadata = this, Metadata = this,
Status = Status, Status = Status,
Metrics = ratings == null ? null : new BeatmapSetMetrics { Ratings = ratings }, Metrics = ratings == null ? null : new BeatmapSetMetrics { Ratings = ratings },
OnlineInfo = new BeatmapSetOnlineInfo OnlineInfo = this
{
Covers = covers,
Preview = preview,
PlayCount = playCount,
FavouriteCount = favouriteCount,
BPM = bpm,
Status = Status,
HasExplicitContent = hasExplicitContent,
HasVideo = hasVideo,
HasStoryboard = hasStoryboard,
Submitted = submitted,
Ranked = ranked,
LastUpdated = lastUpdated,
Availability = availability,
HasFavourited = hasFavourited,
Genre = genre,
Language = language,
TrackId = trackId
},
}; };
beatmapSet.Beatmaps = beatmaps?.Select(b => beatmapSet.Beatmaps = beatmaps?.Select(b =>

View File

@ -59,7 +59,7 @@ namespace osu.Game.Online.Rooms
protected override bool VerifyDatabasedModel(BeatmapSetInfo databasedSet) protected override bool VerifyDatabasedModel(BeatmapSetInfo databasedSet)
{ {
int? beatmapId = SelectedItem.Value?.Beatmap.Value.OnlineBeatmapID; int beatmapId = SelectedItem.Value?.Beatmap.Value.OnlineID ?? -1;
string checksum = SelectedItem.Value?.Beatmap.Value.MD5Hash; string checksum = SelectedItem.Value?.Beatmap.Value.MD5Hash;
var matchingBeatmap = databasedSet.Beatmaps.FirstOrDefault(b => b.OnlineBeatmapID == beatmapId && b.MD5Hash == checksum); var matchingBeatmap = databasedSet.Beatmaps.FirstOrDefault(b => b.OnlineBeatmapID == beatmapId && b.MD5Hash == checksum);
@ -75,10 +75,10 @@ namespace osu.Game.Online.Rooms
protected override bool IsModelAvailableLocally() protected override bool IsModelAvailableLocally()
{ {
int? beatmapId = SelectedItem.Value.Beatmap.Value.OnlineBeatmapID; int onlineId = SelectedItem.Value.Beatmap.Value.OnlineID;
string checksum = SelectedItem.Value.Beatmap.Value.MD5Hash; string checksum = SelectedItem.Value.Beatmap.Value.MD5Hash;
var beatmap = Manager.QueryBeatmap(b => b.OnlineBeatmapID == beatmapId && b.MD5Hash == checksum); var beatmap = Manager.QueryBeatmap(b => b.OnlineBeatmapID == onlineId && b.MD5Hash == checksum);
return beatmap?.BeatmapSet.DeletePending == false; return beatmap?.BeatmapSet.DeletePending == false;
} }

View File

@ -76,7 +76,7 @@ namespace osu.Game.Overlays.BeatmapListing
private readonly BeatmapSearchFilterRow<SearchExplicit> explicitContentFilter; private readonly BeatmapSearchFilterRow<SearchExplicit> explicitContentFilter;
private readonly Box background; private readonly Box background;
private readonly UpdateableBeatmapSetCover beatmapCover; private readonly UpdateableOnlineBeatmapSetCover beatmapCover;
public BeatmapListingSearchControl() public BeatmapListingSearchControl()
{ {
@ -196,7 +196,7 @@ namespace osu.Game.Overlays.BeatmapListing
} }
} }
private class TopSearchBeatmapSetCover : UpdateableBeatmapSetCover private class TopSearchBeatmapSetCover : UpdateableOnlineBeatmapSetCover
{ {
protected override bool TransformImmediately => true; protected override bool TransformImmediately => true;
} }

View File

@ -160,7 +160,7 @@ namespace osu.Game.Overlays.BeatmapListing.Panels
return icons; return icons;
} }
protected Drawable CreateBackground() => new UpdateableBeatmapSetCover protected Drawable CreateBackground() => new UpdateableOnlineBeatmapSetCover
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
BeatmapSet = SetInfo, BeatmapSet = SetInfo,

View File

@ -32,7 +32,7 @@ namespace osu.Game.Overlays.BeatmapSet
public readonly Details Details; public readonly Details Details;
public readonly BeatmapPicker Picker; public readonly BeatmapPicker Picker;
private readonly UpdateableBeatmapSetCover cover; private readonly UpdateableOnlineBeatmapSetCover cover;
private readonly Box coverGradient; private readonly Box coverGradient;
private readonly OsuSpriteText title, artist; private readonly OsuSpriteText title, artist;
private readonly AuthorInfo author; private readonly AuthorInfo author;
@ -68,7 +68,7 @@ namespace osu.Game.Overlays.BeatmapSet
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Children = new Drawable[] Children = new Drawable[]
{ {
cover = new UpdateableBeatmapSetCover cover = new UpdateableOnlineBeatmapSetCover
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Masking = true, Masking = true,

View File

@ -77,7 +77,7 @@ namespace osu.Game.Overlays.Dashboard.Home
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Masking = true, Masking = true,
CornerRadius = 6, CornerRadius = 6,
Child = new UpdateableBeatmapSetCover Child = new UpdateableOnlineBeatmapSetCover
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Anchor = Anchor.Centre, Anchor = Anchor.Centre,

View File

@ -42,7 +42,7 @@ namespace osu.Game.Overlays.Profile.Sections.Historical
{ {
AddRangeInternal(new Drawable[] AddRangeInternal(new Drawable[]
{ {
new UpdateableBeatmapSetCover(BeatmapSetCoverType.List) new UpdateableOnlineBeatmapSetCover(BeatmapSetCoverType.List)
{ {
RelativeSizeAxes = Axes.Y, RelativeSizeAxes = Axes.Y,
Width = cover_width, Width = cover_width,

View File

@ -86,7 +86,7 @@ namespace osu.Game.Screens.OnlinePlay.Components
Text = new RomanisableString(beatmap.Value.Metadata.TitleUnicode, beatmap.Value.Metadata.Title), Text = new RomanisableString(beatmap.Value.Metadata.TitleUnicode, beatmap.Value.Metadata.Title),
Font = OsuFont.GetFont(size: TextSize), Font = OsuFont.GetFont(size: TextSize),
} }
}, LinkAction.OpenBeatmap, beatmap.Value.OnlineBeatmapID.ToString(), "Open beatmap"); }, LinkAction.OpenBeatmap, beatmap.Value.OnlineID.ToString(), "Open beatmap");
} }
} }
} }

View File

@ -8,6 +8,7 @@ using System.Text;
using osu.Framework.Extensions; using osu.Framework.Extensions;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.IO; using osu.Game.IO;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Rulesets; using osu.Game.Rulesets;
using Decoder = osu.Game.Beatmaps.Formats.Decoder; using Decoder = osu.Game.Beatmaps.Formats.Decoder;
@ -32,7 +33,7 @@ namespace osu.Game.Tests.Beatmaps
BeatmapInfo.BeatmapSet.Beatmaps = new List<BeatmapInfo> { BeatmapInfo }; BeatmapInfo.BeatmapSet.Beatmaps = new List<BeatmapInfo> { BeatmapInfo };
BeatmapInfo.Length = 75000; BeatmapInfo.Length = 75000;
BeatmapInfo.OnlineInfo = new BeatmapOnlineInfo(); BeatmapInfo.OnlineInfo = new BeatmapOnlineInfo();
BeatmapInfo.BeatmapSet.OnlineInfo = new BeatmapSetOnlineInfo BeatmapInfo.BeatmapSet.OnlineInfo = new APIBeatmapSet
{ {
Status = BeatmapSetOnlineStatus.Ranked, Status = BeatmapSetOnlineStatus.Ranked,
Covers = new BeatmapSetOnlineCovers Covers = new BeatmapSetOnlineCovers