mirror of
https://github.com/JuniorDark/RustyHearts-Launcher.git
synced 2026-05-07 13:31:45 -04:00
104 lines
4.4 KiB
C#
104 lines
4.4 KiB
C#
using Newtonsoft.Json;
|
|
using RHLauncher.RHLauncher;
|
|
using RHLauncher.RHLauncher.Helper;
|
|
using System.Diagnostics;
|
|
using System.IO.Compression;
|
|
using System.Text;
|
|
|
|
namespace RHLauncher
|
|
{
|
|
public class LauncherUpdater
|
|
{
|
|
private readonly string LauncherVersionUrl = Configuration.Default.GetLauncherVersion;
|
|
private readonly string LauncherUpdateUrl = Configuration.Default.UpdateLauncherVersion;
|
|
|
|
public async Task CheckForLauncherUpdateAsync()
|
|
{
|
|
try
|
|
{
|
|
using HttpClient client = new();
|
|
using HttpResponseMessage response = await client.GetAsync(LauncherVersionUrl);
|
|
response.EnsureSuccessStatusCode();
|
|
string json = await response.Content.ReadAsStringAsync();
|
|
dynamic result = JsonConvert.DeserializeObject(json);
|
|
string version = result.version;
|
|
if (!string.IsNullOrEmpty(version))
|
|
{
|
|
string currentVersion = GetLauncherVersion();
|
|
if (!string.IsNullOrEmpty(currentVersion) && !currentVersion.Equals(version, StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
MsgBoxForm.Show(LocalizedStrings.LauncherUpdateText, LocalizedStrings.Info);
|
|
await DownloadLauncherUpdateAsync(json);
|
|
}
|
|
await Task.Delay(1000);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string errorMessage = LocalizedStrings.LauncherUpdateCheckFailed + ex.Message;
|
|
string errorLog = LocalizedStrings.LauncherUpdateCheckFailed + ex.Message + ex.StackTrace;
|
|
Exception newEx = new(errorMessage, ex);
|
|
Exception newLogEx = new(errorLog, ex);
|
|
ExceptionHandler.HandleException(newEx, newLogEx);
|
|
}
|
|
}
|
|
|
|
private async Task DownloadLauncherUpdateAsync(string version)
|
|
{
|
|
try
|
|
{
|
|
using HttpClient client = new();
|
|
using StringContent content = new(version, Encoding.UTF8, "application/json");
|
|
|
|
dynamic result = JsonConvert.DeserializeObject(version);
|
|
string v = result.version;
|
|
|
|
using HttpResponseMessage response = await client.PostAsync(LauncherUpdateUrl, content);
|
|
response.EnsureSuccessStatusCode();
|
|
byte[] updateBytes = await response.Content.ReadAsByteArrayAsync();
|
|
string tempFilePath = Path.Combine(Path.GetTempPath(), $"launcher_update.zip");
|
|
File.WriteAllBytes(tempFilePath, updateBytes);
|
|
|
|
string executablePath = AppDomain.CurrentDomain.BaseDirectory;
|
|
string backupFilePath = Path.Combine(executablePath, $"Launcher_old.exe");
|
|
string launcherExePath = Path.Combine(executablePath, "Launcher.exe");
|
|
|
|
if (File.Exists(backupFilePath))
|
|
{
|
|
File.Delete(backupFilePath);
|
|
}
|
|
|
|
// Move existing launcher.exe to temporary location
|
|
File.Move(launcherExePath, backupFilePath);
|
|
|
|
// Extract new update files
|
|
ZipFile.ExtractToDirectory(tempFilePath, executablePath, true);
|
|
|
|
// Delete temporary zip file
|
|
File.Delete(tempFilePath);
|
|
|
|
MsgBoxForm.Show(LocalizedStrings.LauncherUpdateSuccess + v, LocalizedStrings.Info);
|
|
Application.Restart();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string errorMessage = LocalizedStrings.LauncherUpdateFailed + ex.Message;
|
|
string errorLog = LocalizedStrings.LauncherUpdateFailed + ex.Message + ex.StackTrace;
|
|
Exception newEx = new(errorMessage, ex);
|
|
Exception newLogEx = new(errorLog, ex);
|
|
ExceptionHandler.HandleException(newEx, newLogEx);
|
|
}
|
|
}
|
|
|
|
public static string GetLauncherVersion()
|
|
{
|
|
// Get the version information of the application
|
|
FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(Application.ExecutablePath);
|
|
|
|
// Extract the version number
|
|
string version = $"{versionInfo.FileMajorPart}.{versionInfo.FileMinorPart}.{versionInfo.FileBuildPart}";
|
|
|
|
return version;
|
|
}
|
|
}
|
|
}
|