diff --git a/osu.Game/Online/API/Requests/GetScoresRequest.cs b/osu.Game/Online/API/Requests/GetScoresRequest.cs index 9037869c77..790a247ccb 100644 --- a/osu.Game/Online/API/Requests/GetScoresRequest.cs +++ b/osu.Game/Online/API/Requests/GetScoresRequest.cs @@ -9,7 +9,6 @@ using osu.Game.Online.API.Requests.Responses; using osu.Game.Rulesets.Mods; using System.Text; using System.Collections.Generic; -using System.Diagnostics; namespace osu.Game.Online.API.Requests { @@ -32,27 +31,6 @@ namespace osu.Game.Online.API.Requests this.scope = scope; this.ruleset = ruleset ?? throw new ArgumentNullException(nameof(ruleset)); this.mods = mods ?? Array.Empty(); - - Success += onSuccess; - } - - private void onSuccess(APIScoresCollection r) - { - Debug.Assert(ruleset.OnlineID >= 0); - - foreach (APIScoreInfo score in r.Scores) - { - score.Beatmap = beatmapInfo; - score.OnlineRulesetID = ruleset.OnlineID; - } - - var userScore = r.UserScore; - - if (userScore != null) - { - userScore.Score.Beatmap = beatmapInfo; - userScore.Score.OnlineRulesetID = ruleset.OnlineID; - } } protected override string Target => $@"beatmaps/{beatmapInfo.OnlineBeatmapID}/scores{createQueryParameters()}"; diff --git a/osu.Game/Online/API/Requests/Responses/APIScoreInfo.cs b/osu.Game/Online/API/Requests/Responses/APIScoreInfo.cs index 568c6bea7f..957d5991c8 100644 --- a/osu.Game/Online/API/Requests/Responses/APIScoreInfo.cs +++ b/osu.Game/Online/API/Requests/Responses/APIScoreInfo.cs @@ -39,7 +39,7 @@ namespace osu.Game.Online.API.Requests.Responses public DateTimeOffset Date { get; set; } [JsonProperty(@"beatmap")] - public IBeatmapInfo Beatmap { get; set; } + public APIBeatmap Beatmap { get; set; } [JsonProperty("accuracy")] public double Accuracy { get; set; } @@ -71,10 +71,8 @@ namespace osu.Game.Online.API.Requests.Responses [JsonConverter(typeof(StringEnumConverter))] public ScoreRank Rank { get; set; } - IBeatmapInfo IScoreInfo.Beatmap => Beatmap; - - // TODO: nuke - public ScoreInfo CreateScoreInfo(RulesetStore rulesets) + // TODO: This function will eventually be going away. + public ScoreInfo CreateScoreInfo(RulesetStore rulesets, BeatmapInfo beatmap = null) { var ruleset = rulesets.GetRuleset(OnlineRulesetID); @@ -94,7 +92,6 @@ namespace osu.Game.Online.API.Requests.Responses OnlineScoreID = OnlineID, Date = Date, PP = PP, - BeatmapInfo = Beatmap.ToBeatmapInfo(rulesets), RulesetID = OnlineRulesetID, Hash = Replay ? "online" : string.Empty, // todo: temporary? Rank = Rank, @@ -102,6 +99,9 @@ namespace osu.Game.Online.API.Requests.Responses Mods = mods, }; + if (beatmap != null) + scoreInfo.BeatmapInfo = beatmap; + if (Statistics != null) { foreach (var kvp in Statistics) @@ -138,19 +138,10 @@ namespace osu.Game.Online.API.Requests.Responses return scoreInfo; } - [JsonProperty(@"beatmapset")] - public APIBeatmapSet Metadata - { - set - { - // in the deserialisation case we need to ferry this data across. - if (Beatmap is APIBeatmap apiBeatmap) - apiBeatmap.BeatmapSet = value; - } - } - public IRulesetInfo Ruleset => new RulesetInfo { ID = OnlineRulesetID }; + IBeatmapInfo IScoreInfo.Beatmap => Beatmap; + Dictionary IScoreInfo.Statistics => new Dictionary(); // TODO: implement... maybe. hitresults have weird mappings per ruleset it would seem. } } diff --git a/osu.Game/Online/API/Requests/Responses/APIScoreWithPosition.cs b/osu.Game/Online/API/Requests/Responses/APIScoreWithPosition.cs index 89bb416393..a0fc549d98 100644 --- a/osu.Game/Online/API/Requests/Responses/APIScoreWithPosition.cs +++ b/osu.Game/Online/API/Requests/Responses/APIScoreWithPosition.cs @@ -2,6 +2,7 @@ // See the LICENCE file in the repository root for full licence text. using Newtonsoft.Json; +using osu.Game.Beatmaps; using osu.Game.Rulesets; using osu.Game.Scoring; @@ -15,10 +16,10 @@ namespace osu.Game.Online.API.Requests.Responses [JsonProperty(@"score")] public APIScoreInfo Score; - public ScoreInfo CreateScoreInfo(RulesetStore rulesets) + public ScoreInfo CreateScoreInfo(RulesetStore rulesets, BeatmapInfo beatmap = null) { - var score = Score.CreateScoreInfo(rulesets); + var score = Score.CreateScoreInfo(rulesets, beatmap); score.Position = Position; return score; } diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs index 3a3566aad9..c6eb516c7c 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs @@ -66,7 +66,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores if (value?.Scores.Any() != true) return; - scoreManager.OrderByTotalScoreAsync(value.Scores.Select(s => s.CreateScoreInfo(rulesets)).ToArray(), loadCancellationSource.Token) + scoreManager.OrderByTotalScoreAsync(value.Scores.Select(s => s.CreateScoreInfo(rulesets, Beatmap.Value)).ToArray(), loadCancellationSource.Token) .ContinueWith(ordered => Schedule(() => { if (loadCancellationSource.IsCancellationRequested) @@ -78,7 +78,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores scoreTable.Show(); var userScore = value.UserScore; - var userScoreInfo = userScore?.Score.CreateScoreInfo(rulesets); + var userScoreInfo = userScore?.Score.CreateScoreInfo(rulesets, Beatmap.Value); topScoresContainer.Add(new DrawableTopScore(topScore)); diff --git a/osu.Game/Screens/Ranking/SoloResultsScreen.cs b/osu.Game/Screens/Ranking/SoloResultsScreen.cs index 684c7574cb..4f4dfa4909 100644 --- a/osu.Game/Screens/Ranking/SoloResultsScreen.cs +++ b/osu.Game/Screens/Ranking/SoloResultsScreen.cs @@ -31,7 +31,7 @@ namespace osu.Game.Screens.Ranking return null; getScoreRequest = new GetScoresRequest(Score.BeatmapInfo, Score.Ruleset); - getScoreRequest.Success += r => scoresCallback?.Invoke(r.Scores.Where(s => s.OnlineID != Score.OnlineScoreID).Select(s => s.CreateScoreInfo(rulesets))); + getScoreRequest.Success += r => scoresCallback?.Invoke(r.Scores.Where(s => s.OnlineID != Score.OnlineScoreID).Select(s => s.CreateScoreInfo(rulesets, Beatmap.Value.BeatmapInfo))); return getScoreRequest; } diff --git a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs index 07300635aa..de1ba5cf2e 100644 --- a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs @@ -192,14 +192,14 @@ namespace osu.Game.Screens.Select.Leaderboards req.Success += r => { - scoreManager.OrderByTotalScoreAsync(r.Scores.Select(s => s.CreateScoreInfo(rulesets)).ToArray(), loadCancellationSource.Token) + scoreManager.OrderByTotalScoreAsync(r.Scores.Select(s => s.CreateScoreInfo(rulesets, BeatmapInfo)).ToArray(), loadCancellationSource.Token) .ContinueWith(ordered => Schedule(() => { if (loadCancellationSource.IsCancellationRequested) return; scoresCallback?.Invoke(ordered.Result); - TopScore = r.UserScore?.CreateScoreInfo(rulesets); + TopScore = r.UserScore?.CreateScoreInfo(rulesets, BeatmapInfo); }), TaskContinuationOptions.OnlyOnRanToCompletion); };