refactor: launch roblox using protocol string

studio stuff is gone temporarily as i'm currently planning to roll back the work done for studio support
This commit is contained in:
pizzaboxer 2024-02-23 03:26:20 +00:00
parent 581cb50551
commit 2000febf7e
No known key found for this signature in database
GPG Key ID: 59D4A1DBAD0F2BA8
2 changed files with 12 additions and 39 deletions

View File

@ -313,7 +313,11 @@ namespace Bloxstrap
{ {
_launchCommandLine = _launchCommandLine.Replace("LAUNCHTIMEPLACEHOLDER", DateTimeOffset.Now.ToUnixTimeMilliseconds().ToString()); _launchCommandLine = _launchCommandLine.Replace("LAUNCHTIMEPLACEHOLDER", DateTimeOffset.Now.ToUnixTimeMilliseconds().ToString());
_launchCommandLine += " -channel ";
if (_launchCommandLine.StartsWith("roblox-player:1"))
_launchCommandLine += "+channel:";
else
_launchCommandLine += " -channel ";
if (App.Settings.Prop.Channel.ToLowerInvariant() == RobloxDeployment.DefaultChannel.ToLowerInvariant()) if (App.Settings.Prop.Channel.ToLowerInvariant() == RobloxDeployment.DefaultChannel.ToLowerInvariant())
_launchCommandLine += "production"; _launchCommandLine += "production";

View File

@ -9,51 +9,19 @@ namespace Bloxstrap
{ {
private const string RobloxPlaceKey = "Roblox.Place"; private const string RobloxPlaceKey = "Roblox.Place";
// map uri keys to command line args
private static readonly IReadOnlyDictionary<string, string> UriKeyArgMap = new Dictionary<string, string>()
{
// excluding roblox-player and launchtime
{ "launchmode", "--" },
{ "gameinfo", "-t " },
{ "placelauncherurl", "-j "},
{ "launchtime", "--launchtime=" },
{ "browsertrackerid", "-b " },
{ "robloxLocale", "--rloc " },
{ "gameLocale", "--gloc " },
{ "channel", "-channel " },
// studio
{ "task", "-task " },
{ "placeId", "-placeId " },
{ "universeId", "-universeId " },
{ "userId", "-userId " }
};
public static string ParseUri(string protocol) public static string ParseUri(string protocol)
{ {
string[] keyvalPair; var args = new Dictionary<string, string>();
string key;
string val;
bool channelArgPresent = false; bool channelArgPresent = false;
StringBuilder commandLine = new();
foreach (var parameter in protocol.Split('+')) foreach (var parameter in protocol.Split('+'))
{ {
if (!parameter.Contains(':')) if (!parameter.Contains(':'))
continue; continue;
keyvalPair = parameter.Split(':'); var kv = parameter.Split(':');
key = keyvalPair[0]; string key = kv[0];
val = keyvalPair[1]; string val = kv[1];
if (!UriKeyArgMap.ContainsKey(key) || string.IsNullOrEmpty(val))
continue;
if (key == "launchmode" && val == "play")
val = "app";
if (key == "placelauncherurl")
val = HttpUtility.UrlDecode(val);
// we'll set this before launching because for some reason roblox just refuses to launch if its like a few minutes old so ??? // we'll set this before launching because for some reason roblox just refuses to launch if its like a few minutes old so ???
if (key == "launchtime") if (key == "launchtime")
@ -68,13 +36,14 @@ namespace Bloxstrap
continue; continue;
} }
commandLine.Append(UriKeyArgMap[key] + val + " "); args.Add(key, val);
} }
if (!channelArgPresent) if (!channelArgPresent)
EnrollChannel(RobloxDeployment.DefaultChannel); EnrollChannel(RobloxDeployment.DefaultChannel);
return commandLine.ToString(); var pairs = args.Select(x => x.Key + ":" + x.Value).ToArray();
return String.Join("+", pairs);
} }
public static void ChangeChannel(string channel) public static void ChangeChannel(string channel)