Fix LinkFlowContainer not creating user links supporting full IUser specification

This commit is contained in:
Dean Herbert
2021-11-08 14:17:47 +09:00
parent dede0e56ce
commit 6b6dd93e9e
5 changed files with 29 additions and 22 deletions

View File

@ -289,25 +289,27 @@ namespace osu.Game
/// <param name="link">The link to load.</param>
public void HandleLink(LinkDetails link) => Schedule(() =>
{
string argString = link.Argument.ToString();
switch (link.Action)
{
case LinkAction.OpenBeatmap:
// TODO: proper query params handling
if (int.TryParse(link.Argument.Contains('?') ? link.Argument.Split('?')[0] : link.Argument, out int beatmapId))
if (int.TryParse(argString.Contains('?') ? argString.Split('?')[0] : argString, out int beatmapId))
ShowBeatmap(beatmapId);
break;
case LinkAction.OpenBeatmapSet:
if (int.TryParse(link.Argument, out int setId))
if (int.TryParse(argString, out int setId))
ShowBeatmapSet(setId);
break;
case LinkAction.OpenChannel:
ShowChannel(link.Argument);
ShowChannel(argString);
break;
case LinkAction.SearchBeatmapSet:
SearchBeatmapSet(link.Argument);
SearchBeatmapSet(argString);
break;
case LinkAction.OpenEditorTimestamp:
@ -321,26 +323,31 @@ namespace osu.Game
break;
case LinkAction.External:
OpenUrlExternally(link.Argument);
OpenUrlExternally(argString);
break;
case LinkAction.OpenUserProfile:
ShowUser(int.TryParse(link.Argument, out int userId)
? new APIUser { Id = userId }
: new APIUser { Username = link.Argument });
if (!(link.Argument is IUser user))
{
user = int.TryParse(argString, out int userId)
? new APIUser { Id = userId }
: new APIUser { Username = argString };
}
ShowUser(user);
break;
case LinkAction.OpenWiki:
ShowWiki(link.Argument);
ShowWiki(argString);
break;
case LinkAction.OpenChangelog:
if (string.IsNullOrEmpty(link.Argument))
if (string.IsNullOrEmpty(argString))
ShowChangelogListing();
else
{
string[] changelogArgs = link.Argument.Split("/");
string[] changelogArgs = argString.Split("/");
ShowChangelogBuild(changelogArgs[0], changelogArgs[1]);
}