-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
158 additions
and
29 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
using System; | ||
using System.Diagnostics; | ||
using System.IO; | ||
using System.IO.Compression; | ||
using System.Net.Http; | ||
using System.Reflection; | ||
using System.Threading.Tasks; | ||
using Newtonsoft.Json; | ||
|
||
namespace CRD.Utils.Updater; | ||
|
||
public class Updater{ | ||
#region Singelton | ||
|
||
private static Updater? _instance; | ||
private static readonly object Padlock = new(); | ||
|
||
public static Updater Instance{ | ||
get{ | ||
if (_instance == null){ | ||
lock (Padlock){ | ||
if (_instance == null){ | ||
_instance = new Updater(); | ||
} | ||
} | ||
} | ||
|
||
return _instance; | ||
} | ||
} | ||
|
||
#endregion | ||
|
||
private string downloadUrl = ""; | ||
private readonly string tempPath = Path.Combine(Path.GetTempPath(), "Update.zip"); | ||
private readonly string extractPath = Path.Combine(Path.GetTempPath(), "ExtractedUpdate"); | ||
|
||
private readonly string apiEndpoint = "https://api.github.com/repos/Crunchy-DL/Crunchy-Downloader/releases/latest"; | ||
|
||
public async Task<bool> CheckForUpdatesAsync(){ | ||
try{ | ||
using (var client = new HttpClient()){ | ||
client.DefaultRequestHeaders.Add("User-Agent", "C# App"); // GitHub API requires a user agent | ||
var response = await client.GetStringAsync(apiEndpoint); | ||
var releaseInfo = JsonConvert.DeserializeObject<dynamic>(response); | ||
|
||
var latestVersion = releaseInfo.tag_name; | ||
downloadUrl = releaseInfo.assets[0].browser_download_url; | ||
|
||
var version = Assembly.GetExecutingAssembly().GetName().Version; | ||
var currentVersion = $"v{version?.Major}.{version?.Minor}.{version?.Build}"; | ||
|
||
|
||
if (latestVersion != currentVersion){ | ||
Console.WriteLine("Update available: " + latestVersion + " - Current Version: " + currentVersion); | ||
return true; | ||
} else{ | ||
Console.WriteLine("No updates available."); | ||
return false; | ||
} | ||
} | ||
} catch (Exception e){ | ||
Console.WriteLine("Failed to get Update information"); | ||
return false; | ||
} | ||
} | ||
|
||
public async Task DownloadAndUpdateAsync(){ | ||
try{ | ||
using (var client = new HttpClient()){ | ||
// Download the zip file | ||
var response = await client.GetAsync(downloadUrl, HttpCompletionOption.ResponseHeadersRead); | ||
using (var stream = await response.Content.ReadAsStreamAsync()) | ||
using (var fileStream = new FileStream(tempPath, FileMode.Create, FileAccess.Write, FileShare.None)){ | ||
await stream.CopyToAsync(fileStream); | ||
} | ||
|
||
ZipFile.ExtractToDirectory(tempPath, extractPath, true); | ||
|
||
ApplyUpdate(extractPath); | ||
} | ||
} catch (Exception e){ | ||
Console.WriteLine("Failed to get Update"); | ||
} | ||
} | ||
|
||
private void ApplyUpdate(string updateFolder){ | ||
var currentPath = AppDomain.CurrentDomain.BaseDirectory; | ||
var updaterPath = Path.Combine(currentPath, "Updater.exe"); | ||
var arguments = $"\"{currentPath.Substring(0, currentPath.Length - 1)}\" \"{updateFolder}\""; | ||
|
||
System.Diagnostics.Process.Start(updaterPath, arguments); | ||
Environment.Exit(0); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters