add registry saving and launching

This commit is contained in:
murdle 2025-05-01 16:57:15 -07:00
parent b8c915a37d
commit e9924bded2
5 changed files with 41 additions and 12 deletions

View File

@ -2,6 +2,7 @@
public interface IAppData public interface IAppData
{ {
string Name { get; } string ExecutableName { get; }
string PackageName { get; }
Dictionary<string, string> PackageFiles { get; } Dictionary<string, string> PackageFiles { get; }
} }

View File

@ -2,7 +2,8 @@
public class StudioData : IAppData public class StudioData : IAppData
{ {
public string Name => "WindowsStudio64"; public string ExecutableName => "RobloxStudioBeta.exe";
public string PackageName => "WindowsStudio64";
public Dictionary<string, string> PackageFiles { get; } = new() public Dictionary<string, string> PackageFiles { get; } = new()
{ {
["RobloxStudio.zip"] = "", ["RobloxStudio.zip"] = "",

View File

@ -2,4 +2,5 @@
using RobloxLegacy.AppData; using RobloxLegacy.AppData;
using var manager = new VersionManager(new StudioData()); using var manager = new VersionManager(new StudioData());
await manager.InstallPackage(); await manager.InstallPackage(); // update studio if needed
manager.LaunchApp();

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>

View File

@ -1,4 +1,5 @@
using Newtonsoft.Json; using System.Diagnostics;
using Newtonsoft.Json;
using RobloxLegacy.AppData; using RobloxLegacy.AppData;
using RobloxLegacy.Utilities; using RobloxLegacy.Utilities;
using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.Zip;
@ -18,12 +19,15 @@ public class VersionManager : IDisposable
{ {
private static readonly HttpClient Client = new(); private static readonly HttpClient Client = new();
private const string CdnUrl = "https://setup.rbxcdn.com"; private const string CdnUrl = "https://setup.rbxcdn.com";
private string? _currentVersion;
private readonly string _tempPath = Path.Combine(Path.GetTempPath(), $"RobloxLegacy.{Guid.NewGuid().ToString()}"); private readonly string _tempPath = Path.Combine(Path.GetTempPath(), $"RobloxLegacy.{Guid.NewGuid().ToString()}");
private readonly IAppData _appData; private readonly IAppData _appData;
public VersionManager(IAppData appData) public VersionManager(IAppData appData)
{ {
Directory.CreateDirectory(_tempPath); Directory.CreateDirectory(_tempPath);
_currentVersion = Registry.GetVersion(appData.PackageName);
_appData = appData; _appData = appData;
} }
@ -35,9 +39,9 @@ public class VersionManager : IDisposable
private async Task<VersionData?> GetLatestVersion() private async Task<VersionData?> GetLatestVersion()
{ {
var url = $"https://clientsettings.roblox.com/v2/client-version/{_appData.Name}/channel/LIVE"; var url = $"https://clientsettings.roblox.com/v2/client-version/{_appData.PackageName}/channel/LIVE";
var response = await Client.GetAsync(url); var response = await Client.GetAsync(url);
if(!response.IsSuccessStatusCode) // just to be safe if (!response.IsSuccessStatusCode) // just to be safe
return null; return null;
var version = await response.Content.ReadAsAsync<VersionData>(); var version = await response.Content.ReadAsAsync<VersionData>();
return version; return version;
@ -53,10 +57,13 @@ public class VersionManager : IDisposable
public async Task InstallPackage() public async Task InstallPackage()
{ {
var version = await GetLatestVersion(); var version = await GetLatestVersion();
if(version == null)
throw new Exception("No version data found");
Logger.Info($"Installing {_appData.Name} version {version.Version}"); if (version == null)
throw new Exception("No version data found");
if (version.UploadHash == _currentVersion)
return;
Logger.Info($"Installing {_appData.PackageName} version {version.Version}");
foreach (var file in _appData.PackageFiles) foreach (var file in _appData.PackageFiles)
{ {
try try
@ -74,6 +81,25 @@ public class VersionManager : IDisposable
Logger.Error($"Failed to download {file.Key}"); Logger.Error($"Failed to download {file.Key}");
} }
} }
_currentVersion = version.UploadHash;
Registry.SaveVersion(_appData.PackageName, version.UploadHash);
}
public void LaunchApp()
{
Logger.Info($"Launching {_appData.PackageName}...");
if(string.IsNullOrEmpty(_currentVersion))
throw new Exception("No version data found");
var startInfo = new ProcessStartInfo()
{
FileName = _appData.ExecutableName,
WorkingDirectory = GetVersionPath(_currentVersion),
UseShellExecute = true
};
Process.Start(startInfo);
} }
public void Dispose() public void Dispose()