1
0
mirror of https://github.com/ppy/osu.git synced 2026-05-18 09:49:53 +08:00

Merge pull request #617 from peppy/leaderboard-api

Move API lookup from BeatmapDetailArea to Leaderboard.
This commit is contained in:
Dan Balasescu
2017-04-12 00:28:07 +09:00
committed by GitHub
Unverified
5 changed files with 65 additions and 41 deletions
+1
View File
@@ -43,6 +43,7 @@ namespace osu.Game.Database
public string Path { get; set; }
[JsonProperty("file_md5")]
public string Hash { get; set; }
// General
+20 -3
View File
@@ -27,7 +27,24 @@ namespace osu.Game.Modes.Scoring
public int Combo { get; set; }
public Mod[] Mods { get; set; }
public User User { get; set; }
private User user;
public User User
{
get
{
return user ?? new User
{
Username = LegacyUsername,
Id = LegacyUserID
};
}
set
{
user = value;
}
}
[JsonProperty(@"replay_data")]
public Replay Replay;
@@ -38,10 +55,10 @@ namespace osu.Game.Modes.Scoring
public long OnlineScoreID;
[JsonProperty(@"username")]
public string Username;
public string LegacyUsername;
[JsonProperty(@"user_id")]
public long UserID;
public long LegacyUserID;
[JsonProperty(@"date")]
public DateTime Date;
+2 -36
View File
@@ -1,13 +1,10 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives;
using osu.Game.Beatmaps;
using osu.Game.Online.API;
using osu.Game.Online.API.Requests;
using osu.Game.Screens.Select.Leaderboards;
namespace osu.Game.Screens.Select
@@ -20,8 +17,6 @@ namespace osu.Game.Screens.Select
public readonly Container Details; //todo: replace with a real details view when added
public readonly Leaderboard Leaderboard;
private APIAccess api;
private WorkingBeatmap beatmap;
public WorkingBeatmap Beatmap
{
@@ -32,7 +27,7 @@ namespace osu.Game.Screens.Select
set
{
beatmap = value;
if (IsLoaded) Schedule(updateScores);
Leaderboard.Beatmap = beatmap?.BeatmapInfo;
}
}
@@ -56,9 +51,6 @@ namespace osu.Game.Screens.Select
Leaderboard.Show();
break;
}
//for now let's always update scores.
updateScores();
},
},
content = new Container
@@ -77,35 +69,9 @@ namespace osu.Game.Screens.Select
Leaderboard = new Leaderboard
{
RelativeSizeAxes = Axes.Both,
}
});
}
protected override void LoadComplete()
{
base.LoadComplete();
updateScores();
}
[BackgroundDependencyLoader(permitNulls: true)]
private void load(APIAccess api)
{
this.api = api;
}
private GetScoresRequest getScoresRequest;
private void updateScores()
{
if (!IsLoaded) return;
Leaderboard.Scores = null;
getScoresRequest?.Cancel();
if (api == null || beatmap?.BeatmapInfo == null || !Leaderboard.IsPresent) return;
getScoresRequest = new GetScoresRequest(beatmap.BeatmapInfo);
getScoresRequest.Success += r => Leaderboard.Scores = r.Scores;
api.Queue(getScoresRequest);
}
}
}
@@ -10,7 +10,11 @@ using osu.Framework.Graphics.Colour;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives;
using System;
using osu.Framework.Allocation;
using osu.Game.Database;
using osu.Game.Modes.Scoring;
using osu.Game.Online.API;
using osu.Game.Online.API.Requests;
namespace osu.Game.Screens.Select.Leaderboards
{
@@ -26,6 +30,7 @@ namespace osu.Game.Screens.Select.Leaderboards
set
{
scores = value;
getScoresRequest?.Cancel();
int i = 150;
if (scores == null)
@@ -81,6 +86,41 @@ namespace osu.Game.Screens.Select.Leaderboards
};
}
private APIAccess api;
private BeatmapInfo beatmap;
public BeatmapInfo Beatmap
{
get { return beatmap; }
set
{
beatmap = value;
Schedule(updateScores);
}
}
[BackgroundDependencyLoader(permitNulls: true)]
private void load(APIAccess api)
{
this.api = api;
}
private GetScoresRequest getScoresRequest;
private void updateScores()
{
if (!IsLoaded) return;
Scores = null;
getScoresRequest?.Cancel();
if (api == null || Beatmap == null) return;
getScoresRequest = new GetScoresRequest(Beatmap);
getScoresRequest.Success += r => Scores = r.Scores;
api.Queue(getScoresRequest);
}
protected override void Update()
{
base.Update();
@@ -142,7 +142,7 @@ namespace osu.Game.Screens.Select.Leaderboards
Children = new Drawable[]
{
avatar = new DelayedLoadWrapper(
new Avatar(Score.User ?? new User { Id = Score.UserID })
new Avatar(Score.User)
{
RelativeSizeAxes = Axes.Both,
CornerRadius = corner_radius,
@@ -169,7 +169,7 @@ namespace osu.Game.Screens.Select.Leaderboards
{
nameLabel = new OsuSpriteText
{
Text = Score.User?.Username ?? Score.Username,
Text = Score.User.Username,
Font = @"Exo2.0-BoldItalic",
TextSize = 23,
},