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
{
string Name { get; }
string ExecutableName { get; }
string PackageName { get; }
Dictionary<string, string> PackageFiles { get; }
}

View File

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

View File

@ -2,4 +2,5 @@
using RobloxLegacy.AppData;
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>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

View File

@ -1,4 +1,5 @@
using Newtonsoft.Json;
using System.Diagnostics;
using Newtonsoft.Json;
using RobloxLegacy.AppData;
using RobloxLegacy.Utilities;
using ICSharpCode.SharpZipLib.Zip;
@ -18,12 +19,15 @@ public class VersionManager : IDisposable
{
private static readonly HttpClient Client = new();
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 IAppData _appData;
public VersionManager(IAppData appData)
{
Directory.CreateDirectory(_tempPath);
_currentVersion = Registry.GetVersion(appData.PackageName);
_appData = appData;
}
@ -35,9 +39,9 @@ public class VersionManager : IDisposable
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);
if(!response.IsSuccessStatusCode) // just to be safe
if (!response.IsSuccessStatusCode) // just to be safe
return null;
var version = await response.Content.ReadAsAsync<VersionData>();
return version;
@ -53,10 +57,13 @@ public class VersionManager : IDisposable
public async Task InstallPackage()
{
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)
{
try
@ -74,6 +81,25 @@ public class VersionManager : IDisposable
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()