register rbxl and rbxlx extensions

This commit is contained in:
bluepilledgreat 2023-10-04 14:47:26 +01:00
parent c5c5ff96f3
commit dc65f628d8
2 changed files with 45 additions and 0 deletions

View File

@ -510,6 +510,10 @@ namespace Bloxstrap
ProtocolHandler.Register("roblox-studio", "Roblox", Paths.Application); ProtocolHandler.Register("roblox-studio", "Roblox", Paths.Application);
ProtocolHandler.Register("roblox-studio-auth", "Roblox", Paths.Application); ProtocolHandler.Register("roblox-studio-auth", "Roblox", Paths.Application);
ProtocolHandler.RegisterRobloxPlace(Paths.Application);
ProtocolHandler.RegisterExtension(".rbxl");
ProtocolHandler.RegisterExtension(".rbxlx");
if (Environment.ProcessPath is not null && Environment.ProcessPath != Paths.Application) if (Environment.ProcessPath is not null && Environment.ProcessPath != Paths.Application)
{ {
// in case the user is reinstalling // in case the user is reinstalling
@ -711,12 +715,18 @@ namespace Bloxstrap
ProtocolHandler.Unregister("roblox-studio"); ProtocolHandler.Unregister("roblox-studio");
ProtocolHandler.Unregister("roblox-studio-auth"); ProtocolHandler.Unregister("roblox-studio-auth");
ProtocolHandler.Unregister("Roblox.Place");
ProtocolHandler.Unregister(".rbxl");
ProtocolHandler.Unregister(".rbxlx");
} }
else else
{ {
string studioLocation = (string?)studioBootstrapperKey.GetValue("InstallLocation") + "RobloxStudioBeta.exe"; // points to studio exe instead of bootstrapper string studioLocation = (string?)studioBootstrapperKey.GetValue("InstallLocation") + "RobloxStudioBeta.exe"; // points to studio exe instead of bootstrapper
ProtocolHandler.Register("roblox-studio", "Roblox", studioLocation); ProtocolHandler.Register("roblox-studio", "Roblox", studioLocation);
ProtocolHandler.Register("roblox-studio-auth", "Roblox", studioLocation); ProtocolHandler.Register("roblox-studio-auth", "Roblox", studioLocation);
ProtocolHandler.RegisterRobloxPlace(studioLocation);
} }
// if the folder we're installed to does not end with "Bloxstrap", we're installed to a user-selected folder // if the folder we're installed to does not end with "Bloxstrap", we're installed to a user-selected folder

View File

@ -7,6 +7,8 @@ namespace Bloxstrap
{ {
static class ProtocolHandler static class ProtocolHandler
{ {
private const string RobloxPlaceKey = "Roblox.Place";
// map uri keys to command line args // map uri keys to command line args
private static readonly IReadOnlyDictionary<string, string> UriKeyArgMap = new Dictionary<string, string>() private static readonly IReadOnlyDictionary<string, string> UriKeyArgMap = new Dictionary<string, string>()
{ {
@ -135,6 +137,39 @@ namespace Bloxstrap
uriCommandKey.Close(); uriCommandKey.Close();
} }
public static void RegisterRobloxPlace(string handler)
{
const string keyValue = "Roblox Place";
string handlerArgs = $"\"{handler}\" -ide \"%1\"";
string iconValue = $"{handler},0";
using RegistryKey uriKey = Registry.CurrentUser.CreateSubKey(@"Software\Classes\" + RobloxPlaceKey);
using RegistryKey uriIconKey = uriKey.CreateSubKey("DefaultIcon");
using RegistryKey uriOpenKey = uriKey.CreateSubKey(@"shell\Open");
using RegistryKey uriCommandKey = uriOpenKey.CreateSubKey(@"command");
if (uriKey.GetValue("") as string != keyValue)
uriKey.SetValue("", keyValue);
if (uriCommandKey.GetValue("") as string != handlerArgs)
uriCommandKey.SetValue("", handlerArgs);
if (uriOpenKey.GetValue("") as string != "Open")
uriOpenKey.SetValue("", "Open");
if (uriIconKey.GetValue("") as string != iconValue)
uriIconKey.SetValue("", iconValue);
}
public static void RegisterExtension(string key)
{
using RegistryKey uriKey = Registry.CurrentUser.CreateSubKey($@"Software\Classes\{key}");
uriKey.CreateSubKey(RobloxPlaceKey + @"\ShellNew");
if (uriKey.GetValue("") as string != RobloxPlaceKey)
uriKey.SetValue("", RobloxPlaceKey);
}
public static void Unregister(string key) public static void Unregister(string key)
{ {
try try