mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Cleanup
This commit is contained in:
130
app/AutoUpdate/AutoUpdateControl.cs
Normal file
130
app/AutoUpdate/AutoUpdateControl.cs
Normal file
@@ -0,0 +1,130 @@
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace GHelper.AutoUpdate
|
||||
{
|
||||
public class AutoUpdateControl
|
||||
{
|
||||
|
||||
SettingsForm settings;
|
||||
|
||||
public string versionUrl = "http://github.com/seerge/g-helper/releases";
|
||||
static long lastUpdate;
|
||||
|
||||
public AutoUpdateControl(SettingsForm settingsForm)
|
||||
{
|
||||
settings = settingsForm;
|
||||
settings.SetVersionLabel(Properties.Strings.VersionLabel + ": " + Assembly.GetExecutingAssembly().GetName().Version);
|
||||
}
|
||||
|
||||
public void CheckForUpdates()
|
||||
{
|
||||
// Run update once per 12 hours
|
||||
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeSeconds() - lastUpdate) < 43200) return;
|
||||
lastUpdate = DateTimeOffset.Now.ToUnixTimeSeconds();
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
await Task.Delay(TimeSpan.FromSeconds(1));
|
||||
CheckForUpdatesAsync();
|
||||
});
|
||||
}
|
||||
|
||||
public void LoadReleases()
|
||||
{
|
||||
Process.Start(new ProcessStartInfo(versionUrl) { UseShellExecute = true });
|
||||
}
|
||||
|
||||
async void CheckForUpdatesAsync()
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
using (var httpClient = new HttpClient())
|
||||
{
|
||||
httpClient.DefaultRequestHeaders.Add("User-Agent", "C# App");
|
||||
var json = await httpClient.GetStringAsync("https://api.github.com/repos/seerge/g-helper/releases/latest");
|
||||
var config = JsonSerializer.Deserialize<JsonElement>(json);
|
||||
var tag = config.GetProperty("tag_name").ToString().Replace("v", "");
|
||||
var assets = config.GetProperty("assets");
|
||||
|
||||
string url = null;
|
||||
|
||||
for (int i = 0; i < assets.GetArrayLength(); i++)
|
||||
{
|
||||
if (assets[i].GetProperty("browser_download_url").ToString().Contains(".zip"))
|
||||
url = assets[i].GetProperty("browser_download_url").ToString();
|
||||
}
|
||||
|
||||
if (url is null)
|
||||
url = assets[0].GetProperty("browser_download_url").ToString();
|
||||
|
||||
var gitVersion = new Version(tag);
|
||||
var appVersion = new Version(Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
||||
//appVersion = new Version("0.50.0.0");
|
||||
|
||||
if (gitVersion.CompareTo(appVersion) > 0)
|
||||
{
|
||||
versionUrl = url;
|
||||
settings.SetVersionLabel(Properties.Strings.DownloadUpdate + ": " + tag, true);
|
||||
|
||||
if (AppConfig.GetString("skip_version") != tag)
|
||||
{
|
||||
DialogResult dialogResult = MessageBox.Show(Properties.Strings.DownloadUpdate + ": G-Helper " + tag + "?", "Update", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
AutoUpdate(url);
|
||||
else
|
||||
AppConfig.Set("skip_version", tag);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.WriteLine($"Latest version {appVersion}");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine("Failed to check for updates:" + ex.Message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
async void AutoUpdate(string requestUri)
|
||||
{
|
||||
|
||||
Uri uri = new Uri(requestUri);
|
||||
string zipName = Path.GetFileName(uri.LocalPath);
|
||||
|
||||
string exeLocation = Application.ExecutablePath;
|
||||
string exeDir = Path.GetDirectoryName(exeLocation);
|
||||
string zipLocation = exeDir + "\\" + zipName;
|
||||
|
||||
using (WebClient client = new WebClient())
|
||||
{
|
||||
client.DownloadFile(uri, zipLocation);
|
||||
|
||||
Logger.WriteLine(requestUri);
|
||||
Logger.WriteLine(zipLocation);
|
||||
Logger.WriteLine(exeLocation);
|
||||
|
||||
var cmd = new Process();
|
||||
cmd.StartInfo.UseShellExecute = false;
|
||||
cmd.StartInfo.CreateNoWindow = true;
|
||||
cmd.StartInfo.FileName = "powershell";
|
||||
cmd.StartInfo.Arguments = $"Start-Sleep -Seconds 1; Expand-Archive {zipLocation} -DestinationPath {exeDir} -Force; Remove-Item {zipLocation} -Force; {exeLocation}";
|
||||
cmd.Start();
|
||||
|
||||
Application.Exit();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user