Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make leaderboard tabs and active ruleset filter scores #1599

Merged
merged 39 commits into from Dec 21, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
fe559f4
Add respective query params to GetScoreRequest based on selected tab.
naoey Nov 20, 2017
a58bd72
Add placeholder when there are no scores.
naoey Nov 20, 2017
487483e
Move loader hiding to a better place.
naoey Nov 20, 2017
096e98b
Add game mode query to request.
naoey Nov 21, 2017
b6de1ce
Handle query params better.
naoey Nov 22, 2017
c5a78e5
Add a retry button for when scores request fails.
naoey Nov 24, 2017
e723e66
Merge remote-tracking branch 'upstream/master' into leaderboard-scopes
naoey Nov 24, 2017
0b3f755
Don't break VisualTests and add a real beatmap step.
naoey Nov 25, 2017
ae9ce2f
Unbind ruleset event from leaderboard.
naoey Nov 25, 2017
f4f732c
Remove unnecessary null check and tweak transform a bit.
naoey Nov 26, 2017
b261d32
Put retry button in a BeatSyncedContainer and change error message.
naoey Nov 26, 2017
4212315
Use a single placeholder container for empty and retry.
naoey Nov 26, 2017
ae201f0
R#
naoey Nov 26, 2017
ac1fb51
Fix line endings and derp that was causing request failures.
naoey Nov 28, 2017
e832f16
Add failure test case.
naoey Nov 28, 2017
a30cd42
Make retry button not look drunk.
naoey Nov 28, 2017
ccbbd09
Merge remote-tracking branch 'upstream/master' into leaderboard-scopes
naoey Dec 11, 2017
47bd973
Use ShortName for mode.
naoey Dec 11, 2017
21829ba
Merge branch 'master' into leaderboard-scopes
peppy Dec 20, 2017
63dce59
Throw an exception if we try and retrieve local scores online
peppy Dec 20, 2017
1b91f24
Simplify scope logic
peppy Dec 20, 2017
c871a25
Remove unnecessary constructure and make ruleset required
peppy Dec 20, 2017
3292ef3
Fix test edge cases
peppy Dec 20, 2017
6d471da
Remove unnecessary workaround
peppy Dec 20, 2017
23f4799
Create placeholder classes instead of changing Children.
naoey Dec 20, 2017
c8c8b68
Kill ugly retry button bounce.
naoey Dec 20, 2017
8d24a04
Remove unused usings.
naoey Dec 20, 2017
85dee3a
Increase GetScoresRequest timeout & leave existing scores when API dies.
naoey Dec 20, 2017
2ff351c
Show retrieval failure when OnlineBeatmapID is missing
peppy Dec 20, 2017
afcb991
Reorder API / logged in checks to make more sense
peppy Dec 20, 2017
01c4b1e
Maintain a placeholder state and add tests showing all the states.
naoey Dec 21, 2017
63f2436
Merge branch 'master' into leaderboard-scopes
peppy Dec 21, 2017
644aaa8
Unsubscribe from API state change event.
naoey Dec 21, 2017
4bd2c7e
Fix minor formatting issue
peppy Dec 21, 2017
65e6206
Use local bindable
peppy Dec 21, 2017
57fdbda
Remove unnecessary IsLoaded check
peppy Dec 21, 2017
40ceaf1
Merge branch 'master' into leaderboard-scopes
peppy Dec 21, 2017
5c9d484
Adjust debounce a bit
peppy Dec 21, 2017
aa38888
Adjust animation slightly
peppy Dec 21, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
75 changes: 66 additions & 9 deletions osu.Game.Tests/Visual/TestCaseLeaderboard.cs
Expand Up @@ -6,14 +6,44 @@
using osu.Game.Rulesets.Scoring;
using osu.Game.Screens.Select.Leaderboards;
using osu.Game.Users;
using osu.Framework.Allocation;
using OpenTK;
using System.Linq;
using osu.Game.Beatmaps;
using osu.Game.Rulesets;

namespace osu.Game.Tests.Visual
{
[Description("PlaySongSelect leaderboard")]
public class TestCaseLeaderboard : OsuTestCase
{
private readonly Leaderboard leaderboard;
private RulesetStore rulesets;

private readonly FailableLeaderboard leaderboard;

public TestCaseLeaderboard()
{
Add(leaderboard = new FailableLeaderboard
{
Origin = Anchor.Centre,
Anchor = Anchor.Centre,
Size = new Vector2(550f, 450f),
Scope = LeaderboardScope.Global,
});

AddStep(@"New Scores", newScores);
AddStep(@"Empty Scores", () => leaderboard.SetRetrievalState(PlaceholderState.NoScores));
AddStep(@"Network failure", () => leaderboard.SetRetrievalState(PlaceholderState.NetworkFailure));
AddStep(@"No supporter", () => leaderboard.SetRetrievalState(PlaceholderState.NotSupporter));
AddStep(@"Not logged in", () => leaderboard.SetRetrievalState(PlaceholderState.NotLoggedIn));
AddStep(@"Real beatmap", realBeatmap);
}

[BackgroundDependencyLoader]
private void load(RulesetStore rulesets)
{
this.rulesets = rulesets;
}

private void newScores()
{
Expand Down Expand Up @@ -204,17 +234,44 @@ private void newScores()
leaderboard.Scores = scores;
}

public TestCaseLeaderboard()
private void realBeatmap()
{
Add(leaderboard = new Leaderboard
leaderboard.Beatmap = new BeatmapInfo
{
Origin = Anchor.Centre,
Anchor = Anchor.Centre,
Size = new Vector2(550f, 450f),
});
StarDifficulty = 1.36,
Version = @"BASIC",
OnlineBeatmapID = 1113057,
Ruleset = rulesets.GetRuleset(0),
BaseDifficulty = new BeatmapDifficulty
{
CircleSize = 4,
DrainRate = 6.5f,
OverallDifficulty = 6.5f,
ApproachRate = 5,
},
OnlineInfo = new BeatmapOnlineInfo
{
Length = 115000,
CircleCount = 265,
SliderCount = 71,
PlayCount = 47906,
PassCount = 19899,
},
Metrics = new BeatmapMetrics
{
Ratings = Enumerable.Range(0, 11),
Fails = Enumerable.Range(1, 100).Select(i => i % 12 - 6),
Retries = Enumerable.Range(-2, 100).Select(i => i % 12 - 6),
},
};
}

AddStep(@"New Scores", newScores);
newScores();
private class FailableLeaderboard : Leaderboard
{
public void SetRetrievalState(PlaceholderState state)
{
PlaceholderState = state;
}
}
}
}
22 changes: 21 additions & 1 deletion osu.Game/Online/API/Requests/GetScoresRequest.cs
Expand Up @@ -10,19 +10,28 @@
using osu.Game.Users;
using osu.Game.Rulesets.Replays;
using osu.Game.Rulesets.Scoring;
using osu.Game.Screens.Select.Leaderboards;
using osu.Framework.IO.Network;

namespace osu.Game.Online.API.Requests
{
public class GetScoresRequest : APIRequest<GetScoresResponse>
{
private readonly BeatmapInfo beatmap;
private readonly LeaderboardScope scope;
private readonly RulesetInfo ruleset;

public GetScoresRequest(BeatmapInfo beatmap)
public GetScoresRequest(BeatmapInfo beatmap, RulesetInfo ruleset, LeaderboardScope scope = LeaderboardScope.Global)
{
if (!beatmap.OnlineBeatmapID.HasValue)
throw new InvalidOperationException($"Cannot lookup a beatmap's scores without having a populated {nameof(BeatmapInfo.OnlineBeatmapID)}.");

if (scope == LeaderboardScope.Local)
throw new InvalidOperationException("Should not attempt to request online scores for a local scoped leaderboard");

this.beatmap = beatmap;
this.scope = scope;
this.ruleset = ruleset ?? throw new ArgumentNullException(nameof(ruleset));

Success += onSuccess;
}
Expand All @@ -33,6 +42,17 @@ private void onSuccess(GetScoresResponse r)
score.ApplyBeatmap(beatmap);
}

protected override WebRequest CreateWebRequest()
{
var req = base.CreateWebRequest();

req.Timeout = 30000;
req.AddParameter(@"type", scope.ToString().ToLowerInvariant());
req.AddParameter(@"mode", ruleset.ShortName);

return req;
}

protected override string Target => $@"beatmaps/{beatmap.OnlineBeatmapID}/scores";
}

Expand Down
2 changes: 1 addition & 1 deletion osu.Game/Overlays/BeatmapSetOverlay.cs
Expand Up @@ -104,7 +104,7 @@ private void updateScores(BeatmapInfo beatmap)

scores.IsLoading = true;

getScoresRequest = new GetScoresRequest(beatmap);
getScoresRequest = new GetScoresRequest(beatmap, beatmap.Ruleset);
getScoresRequest.Success += r =>
{
scores.Scores = r.Scores;
Expand Down
1 change: 1 addition & 0 deletions osu.Game/Screens/Select/BeatmapDetailArea.cs
Expand Up @@ -52,6 +52,7 @@ public BeatmapDetailArea()

default:
Details.Hide();
Leaderboard.Scope = (LeaderboardScope)tab - 1;
Leaderboard.Show();
break;
}
Expand Down