From fe559f4b62245d66e2f6b6b0ae9a4ffa2f60fb7b Mon Sep 17 00:00:00 2001 From: naoey Date: Mon, 20 Nov 2017 10:36:26 +0530 Subject: [PATCH] Add respective query params to GetScoreRequest based on selected tab. --- .../Online/API/Requests/GetScoresRequest.cs | 25 +++++++++++++++-- osu.Game/Screens/Select/BeatmapDetailArea.cs | 1 + .../Select/Leaderboards/Leaderboard.cs | 28 ++++++++++++++++++- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/osu.Game/Online/API/Requests/GetScoresRequest.cs b/osu.Game/Online/API/Requests/GetScoresRequest.cs index 3777e10a31..a52db4496a 100644 --- a/osu.Game/Online/API/Requests/GetScoresRequest.cs +++ b/osu.Game/Online/API/Requests/GetScoresRequest.cs @@ -10,19 +10,22 @@ using osu.Game.Rulesets; using osu.Game.Users; using osu.Game.Rulesets.Replays; using osu.Game.Rulesets.Scoring; +using osu.Game.Screens.Select.Leaderboards; namespace osu.Game.Online.API.Requests { public class GetScoresRequest : APIRequest { private readonly BeatmapInfo beatmap; + private readonly LeaderboardScope scope; - public GetScoresRequest(BeatmapInfo beatmap) + public GetScoresRequest(BeatmapInfo beatmap, LeaderboardScope scope = LeaderboardScope.Global) { if (!beatmap.OnlineBeatmapID.HasValue) throw new InvalidOperationException($"Cannot lookup a beatmap's scores without having a populated {nameof(BeatmapInfo.OnlineBeatmapID)}."); this.beatmap = beatmap; + this.scope = scope; Success += onSuccess; } @@ -33,7 +36,25 @@ namespace osu.Game.Online.API.Requests score.ApplyBeatmap(beatmap); } - protected override string Target => $@"beatmaps/{beatmap.OnlineBeatmapID}/scores"; + private string mapScopeToQuery() + { + switch(scope) + { + case LeaderboardScope.Global: + return @"?type=global"; + + case LeaderboardScope.Friends: + return @"?type=friend"; + + case LeaderboardScope.Country: + return @"?type=country"; + + default: + return String.Empty; + } + } + + protected override string Target => $@"beatmaps/{beatmap.OnlineBeatmapID}/scores{mapScopeToQuery()}"; } public class GetScoresResponse diff --git a/osu.Game/Screens/Select/BeatmapDetailArea.cs b/osu.Game/Screens/Select/BeatmapDetailArea.cs index a676516300..790a8421a2 100644 --- a/osu.Game/Screens/Select/BeatmapDetailArea.cs +++ b/osu.Game/Screens/Select/BeatmapDetailArea.cs @@ -52,6 +52,7 @@ namespace osu.Game.Screens.Select default: Details.Hide(); + Leaderboard.Scope = (LeaderboardScope) tab - 1; Leaderboard.Show(); break; } diff --git a/osu.Game/Screens/Select/Leaderboards/Leaderboard.cs b/osu.Game/Screens/Select/Leaderboards/Leaderboard.cs index d896da5319..20ab09e83e 100644 --- a/osu.Game/Screens/Select/Leaderboards/Leaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/Leaderboard.cs @@ -74,6 +74,19 @@ namespace osu.Game.Screens.Select.Leaderboards } } + private LeaderboardScope scope = LeaderboardScope.Global; + public LeaderboardScope Scope + { + get { return scope; } + set + { + if (value == scope) return; + + scope = value; + updateScores(); + } + } + public Leaderboard() { Children = new Drawable[] @@ -120,6 +133,11 @@ namespace osu.Game.Screens.Select.Leaderboards { if (!IsLoaded) return; + if (Scope == LeaderboardScope.Local) + { + // TODO: get local scores from wherever here. + } + Scores = null; getScoresRequest?.Cancel(); @@ -127,7 +145,7 @@ namespace osu.Game.Screens.Select.Leaderboards loading.Show(); - getScoresRequest = new GetScoresRequest(Beatmap); + getScoresRequest = new GetScoresRequest(Beatmap, Scope); getScoresRequest.Success += r => { Scores = r.Scores; @@ -165,4 +183,12 @@ namespace osu.Game.Screens.Select.Leaderboards } } } + + public enum LeaderboardScope + { + Local, + Country, + Global, + Friends, + } }