mirror of
https://github.com/ppy/osu.git
synced 2025-01-26 17:02:57 +08:00
Merge pull request #28082 from bdach/do-not-lookup-usernames-for-offline-scores
Do not lookup usernames for scores without an online ID
This commit is contained in:
commit
002efca422
@ -15,6 +15,7 @@ using osu.Game.Beatmaps;
|
|||||||
using osu.Game.Database;
|
using osu.Game.Database;
|
||||||
using osu.Game.IO.Archives;
|
using osu.Game.IO.Archives;
|
||||||
using osu.Game.Online.API;
|
using osu.Game.Online.API;
|
||||||
|
using osu.Game.Online.API.Requests;
|
||||||
using osu.Game.Online.API.Requests.Responses;
|
using osu.Game.Online.API.Requests.Responses;
|
||||||
using osu.Game.Rulesets.Mods;
|
using osu.Game.Rulesets.Mods;
|
||||||
using osu.Game.Rulesets.Osu;
|
using osu.Game.Rulesets.Osu;
|
||||||
@ -23,6 +24,7 @@ using osu.Game.Rulesets.Scoring;
|
|||||||
using osu.Game.Scoring;
|
using osu.Game.Scoring;
|
||||||
using osu.Game.Tests.Beatmaps.IO;
|
using osu.Game.Tests.Beatmaps.IO;
|
||||||
using osu.Game.Tests.Resources;
|
using osu.Game.Tests.Resources;
|
||||||
|
using osu.Game.Users;
|
||||||
|
|
||||||
namespace osu.Game.Tests.Scores.IO
|
namespace osu.Game.Tests.Scores.IO
|
||||||
{
|
{
|
||||||
@ -284,6 +286,196 @@ namespace osu.Game.Tests.Scores.IO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestUserLookedUpForOnlineScore()
|
||||||
|
{
|
||||||
|
using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var osu = LoadOsuIntoHost(host, true);
|
||||||
|
|
||||||
|
var api = (DummyAPIAccess)osu.API;
|
||||||
|
api.HandleRequest = req =>
|
||||||
|
{
|
||||||
|
switch (req)
|
||||||
|
{
|
||||||
|
case GetUserRequest userRequest:
|
||||||
|
userRequest.TriggerSuccess(new APIUser
|
||||||
|
{
|
||||||
|
Username = "Test user",
|
||||||
|
CountryCode = CountryCode.JP,
|
||||||
|
Id = 1234
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var beatmap = BeatmapImportHelper.LoadOszIntoOsu(osu, TestResources.GetQuickTestBeatmapForImport()).GetResultSafely();
|
||||||
|
|
||||||
|
var toImport = new ScoreInfo
|
||||||
|
{
|
||||||
|
Rank = ScoreRank.B,
|
||||||
|
TotalScore = 987654,
|
||||||
|
Accuracy = 0.8,
|
||||||
|
MaxCombo = 500,
|
||||||
|
Combo = 250,
|
||||||
|
User = new APIUser { Username = "Test user" },
|
||||||
|
Date = DateTimeOffset.Now,
|
||||||
|
OnlineID = 12345,
|
||||||
|
Ruleset = new OsuRuleset().RulesetInfo,
|
||||||
|
BeatmapInfo = beatmap.Beatmaps.First()
|
||||||
|
};
|
||||||
|
|
||||||
|
var imported = LoadScoreIntoOsu(osu, toImport);
|
||||||
|
|
||||||
|
Assert.AreEqual(toImport.Rank, imported.Rank);
|
||||||
|
Assert.AreEqual(toImport.TotalScore, imported.TotalScore);
|
||||||
|
Assert.AreEqual(toImport.Accuracy, imported.Accuracy);
|
||||||
|
Assert.AreEqual(toImport.MaxCombo, imported.MaxCombo);
|
||||||
|
Assert.AreEqual(toImport.User.Username, imported.User.Username);
|
||||||
|
Assert.AreEqual(toImport.Date, imported.Date);
|
||||||
|
Assert.AreEqual(toImport.OnlineID, imported.OnlineID);
|
||||||
|
Assert.AreEqual(toImport.User.Username, imported.RealmUser.Username);
|
||||||
|
Assert.AreEqual(1234, imported.RealmUser.OnlineID);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
host.Exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestUserLookedUpForLegacyOnlineScore()
|
||||||
|
{
|
||||||
|
using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var osu = LoadOsuIntoHost(host, true);
|
||||||
|
|
||||||
|
var api = (DummyAPIAccess)osu.API;
|
||||||
|
api.HandleRequest = req =>
|
||||||
|
{
|
||||||
|
switch (req)
|
||||||
|
{
|
||||||
|
case GetUserRequest userRequest:
|
||||||
|
userRequest.TriggerSuccess(new APIUser
|
||||||
|
{
|
||||||
|
Username = "Test user",
|
||||||
|
CountryCode = CountryCode.JP,
|
||||||
|
Id = 1234
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var beatmap = BeatmapImportHelper.LoadOszIntoOsu(osu, TestResources.GetQuickTestBeatmapForImport()).GetResultSafely();
|
||||||
|
|
||||||
|
var toImport = new ScoreInfo
|
||||||
|
{
|
||||||
|
Rank = ScoreRank.B,
|
||||||
|
TotalScore = 987654,
|
||||||
|
Accuracy = 0.8,
|
||||||
|
MaxCombo = 500,
|
||||||
|
Combo = 250,
|
||||||
|
User = new APIUser { Username = "Test user" },
|
||||||
|
Date = DateTimeOffset.Now,
|
||||||
|
LegacyOnlineID = 12345,
|
||||||
|
Ruleset = new OsuRuleset().RulesetInfo,
|
||||||
|
BeatmapInfo = beatmap.Beatmaps.First()
|
||||||
|
};
|
||||||
|
|
||||||
|
var imported = LoadScoreIntoOsu(osu, toImport);
|
||||||
|
|
||||||
|
Assert.AreEqual(toImport.Rank, imported.Rank);
|
||||||
|
Assert.AreEqual(toImport.TotalScore, imported.TotalScore);
|
||||||
|
Assert.AreEqual(toImport.Accuracy, imported.Accuracy);
|
||||||
|
Assert.AreEqual(toImport.MaxCombo, imported.MaxCombo);
|
||||||
|
Assert.AreEqual(toImport.User.Username, imported.User.Username);
|
||||||
|
Assert.AreEqual(toImport.Date, imported.Date);
|
||||||
|
Assert.AreEqual(toImport.OnlineID, imported.OnlineID);
|
||||||
|
Assert.AreEqual(toImport.User.Username, imported.RealmUser.Username);
|
||||||
|
Assert.AreEqual(1234, imported.RealmUser.OnlineID);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
host.Exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestUserNotLookedUpForOfflineScore()
|
||||||
|
{
|
||||||
|
using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var osu = LoadOsuIntoHost(host, true);
|
||||||
|
|
||||||
|
var api = (DummyAPIAccess)osu.API;
|
||||||
|
api.HandleRequest = req =>
|
||||||
|
{
|
||||||
|
switch (req)
|
||||||
|
{
|
||||||
|
case GetUserRequest userRequest:
|
||||||
|
userRequest.TriggerSuccess(new APIUser
|
||||||
|
{
|
||||||
|
Username = "Test user",
|
||||||
|
CountryCode = CountryCode.JP,
|
||||||
|
Id = 1234
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var beatmap = BeatmapImportHelper.LoadOszIntoOsu(osu, TestResources.GetQuickTestBeatmapForImport()).GetResultSafely();
|
||||||
|
|
||||||
|
var toImport = new ScoreInfo
|
||||||
|
{
|
||||||
|
Rank = ScoreRank.B,
|
||||||
|
TotalScore = 987654,
|
||||||
|
Accuracy = 0.8,
|
||||||
|
MaxCombo = 500,
|
||||||
|
Combo = 250,
|
||||||
|
User = new APIUser { Username = "Test user" },
|
||||||
|
Date = DateTimeOffset.Now,
|
||||||
|
OnlineID = -1,
|
||||||
|
LegacyOnlineID = -1,
|
||||||
|
Ruleset = new OsuRuleset().RulesetInfo,
|
||||||
|
BeatmapInfo = beatmap.Beatmaps.First()
|
||||||
|
};
|
||||||
|
|
||||||
|
var imported = LoadScoreIntoOsu(osu, toImport);
|
||||||
|
|
||||||
|
Assert.AreEqual(toImport.Rank, imported.Rank);
|
||||||
|
Assert.AreEqual(toImport.TotalScore, imported.TotalScore);
|
||||||
|
Assert.AreEqual(toImport.Accuracy, imported.Accuracy);
|
||||||
|
Assert.AreEqual(toImport.MaxCombo, imported.MaxCombo);
|
||||||
|
Assert.AreEqual(toImport.User.Username, imported.User.Username);
|
||||||
|
Assert.AreEqual(toImport.Date, imported.Date);
|
||||||
|
Assert.AreEqual(toImport.OnlineID, imported.OnlineID);
|
||||||
|
Assert.AreEqual(toImport.User.Username, imported.RealmUser.Username);
|
||||||
|
Assert.That(imported.RealmUser.OnlineID, Is.LessThanOrEqualTo(1));
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
host.Exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static ScoreInfo LoadScoreIntoOsu(OsuGameBase osu, ScoreInfo score, ArchiveReader archive = null)
|
public static ScoreInfo LoadScoreIntoOsu(OsuGameBase osu, ScoreInfo score, ArchiveReader archive = null)
|
||||||
{
|
{
|
||||||
// clone to avoid attaching the input score to realm.
|
// clone to avoid attaching the input score to realm.
|
||||||
|
@ -127,6 +127,9 @@ namespace osu.Game.Scoring
|
|||||||
if (model.RealmUser.OnlineID == APIUser.SYSTEM_USER_ID)
|
if (model.RealmUser.OnlineID == APIUser.SYSTEM_USER_ID)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (model.OnlineID < 0 && model.LegacyOnlineID <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
string username = model.RealmUser.Username;
|
string username = model.RealmUser.Username;
|
||||||
|
|
||||||
if (usernameLookupCache.TryGetValue(username, out var existing))
|
if (usernameLookupCache.TryGetValue(username, out var existing))
|
||||||
|
Loading…
Reference in New Issue
Block a user