1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-19 05:57:19 +08:00

get user id when importing scores

This commit is contained in:
Davran Dilshat 2021-08-31 13:56:44 +01:00
parent 8104b15874
commit 79f71e5181

View File

@ -23,6 +23,7 @@ using osu.Game.Rulesets;
using osu.Game.Rulesets.Judgements;
using osu.Game.Rulesets.Scoring;
using osu.Game.Scoring.Legacy;
using osu.Game.Users;
namespace osu.Game.Scoring
{
@ -43,6 +44,8 @@ namespace osu.Game.Scoring
[CanBeNull]
private readonly OsuConfigManager configManager;
private IAPIProvider api { get; set; }
public ScoreManager(RulesetStore rulesets, Func<BeatmapManager> beatmaps, Storage storage, IAPIProvider api, IDatabaseContextFactory contextFactory, IIpcHost importHost = null,
Func<BeatmapDifficultyCache> difficulties = null, OsuConfigManager configManager = null)
: base(storage, contextFactory, api, new ScoreStore(contextFactory, storage), importHost)
@ -51,6 +54,7 @@ namespace osu.Game.Scoring
this.beatmaps = beatmaps;
this.difficulties = difficulties;
this.configManager = configManager;
this.api = api;
}
protected override ScoreInfo CreateModel(ArchiveReader archive)
@ -72,8 +76,31 @@ namespace osu.Game.Scoring
}
}
private Dictionary<string, User> previouslyLookedUpUsernames = new Dictionary<string, User>();
protected override Task Populate(ScoreInfo model, ArchiveReader archive, CancellationToken cancellationToken = default)
=> Task.CompletedTask;
{
// These scores only provide the user's username but we need the user's ID too.
if (model.UserID <= 1 && model.UserString != null)
{
if (previouslyLookedUpUsernames.TryGetValue(model.UserString, out User user))
{
model.UserID = user.Id;
return Task.CompletedTask;
}
var request = new GetUserRequest(model.UserString);
request.Success += user =>
{
model.UserID = user.Id;
previouslyLookedUpUsernames.TryAdd(model.UserString, user);
};
api.Queue(request);
}
return Task.CompletedTask;
}
protected override void ExportModelTo(ScoreInfo model, Stream outputStream)
{