From 8f81aa526e144c934478c2e0904eedcd3e460679 Mon Sep 17 00:00:00 2001 From: BlossomiShymae <87099578+BlossomiShymae@users.noreply.github.com> Date: Tue, 13 Aug 2024 02:37:46 -0500 Subject: [PATCH] Add update checker --- Needlework.Net.Desktop/GithubRelease.cs | 12 +++++ .../Needlework.Net.Desktop.csproj | 4 +- .../ViewModels/MainWindowViewModel.cs | 46 ++++++++++++++++--- 3 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 Needlework.Net.Desktop/GithubRelease.cs diff --git a/Needlework.Net.Desktop/GithubRelease.cs b/Needlework.Net.Desktop/GithubRelease.cs new file mode 100644 index 0000000..4060c94 --- /dev/null +++ b/Needlework.Net.Desktop/GithubRelease.cs @@ -0,0 +1,12 @@ +using System.Text.Json.Serialization; + +namespace Needlework.Net.Desktop +{ + public class GithubRelease + { + [JsonPropertyName("tag_name")] + public string TagName { get; set; } = string.Empty; + + public bool IsLatest(int version) => int.Parse(TagName.Replace(".", "")) > version; + } +} diff --git a/Needlework.Net.Desktop/Needlework.Net.Desktop.csproj b/Needlework.Net.Desktop/Needlework.Net.Desktop.csproj index 75338ff..0fb3169 100644 --- a/Needlework.Net.Desktop/Needlework.Net.Desktop.csproj +++ b/Needlework.Net.Desktop/Needlework.Net.Desktop.csproj @@ -11,8 +11,8 @@ False app.ico NeedleworkDotNet - 0.2.2.0 - 0.2.2.0 + 0.3.0.0 + 0.3.0.0 False diff --git a/Needlework.Net.Desktop/ViewModels/MainWindowViewModel.cs b/Needlework.Net.Desktop/ViewModels/MainWindowViewModel.cs index 91cd820..504fce2 100644 --- a/Needlework.Net.Desktop/ViewModels/MainWindowViewModel.cs +++ b/Needlework.Net.Desktop/ViewModels/MainWindowViewModel.cs @@ -12,7 +12,9 @@ using System.Diagnostics; using System.Linq; using System.Net.Http; +using System.Net.Http.Json; using System.Reflection; +using System.Threading; using System.Threading.Tasks; namespace Needlework.Net.Desktop.ViewModels @@ -28,6 +30,7 @@ public partial class MainWindowViewModel : ObservableObject, IRecipient pages, HttpClient httpClient, WindowService windowService) { @@ -36,7 +39,44 @@ public MainWindowViewModel(IEnumerable pages, HttpClient httpClient, W WindowService = windowService; WeakReferenceMessenger.Default.RegisterAll(this); + Task.Run(FetchDataAsync); + new Thread(ProcessEvents) { IsBackground = true }.Start(); + } + + private void ProcessEvents(object? obj) + { + while (true) + { + Task.Run(CheckLatestVersionAsync); + + Thread.Sleep(TimeSpan.FromSeconds(2)); + } + } + + private async Task CheckLatestVersionAsync() + { + try + { + var request = new HttpRequestMessage(HttpMethod.Get, "https://api.github.com/repos/BlossomiShymae/Needlework.Net/releases/latest"); + request.Headers.UserAgent.Add(new System.Net.Http.Headers.ProductInfoHeaderValue("Needlework.Net", Version)); + + var response = await HttpClient.SendAsync(request); + var release = await response.Content.ReadFromJsonAsync(); + if (release == null) return; + + var currentVersion = int.Parse(Version.Replace(".", "")); + + if (release.IsLatest(currentVersion) && !IsUpdateShown) + { + await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(async () => + { + await SukiHost.ShowToast("Needlework.Net Update", $"There is a new version available: {release.TagName}.", SukiUI.Enums.NotificationType.Info, TimeSpan.FromSeconds(10), () => OpenUrl("https://github.com/BlossomiShymae/Needlework.Net/releases")); + IsUpdateShown = true; + }); + } + } + catch (Exception) { } } private async Task FetchDataAsync() @@ -74,12 +114,6 @@ private void OpenUrl(string url) process.Start(); } - [RelayCommand] - private void OpenConsole() - { - - } - public void Receive(OopsiesWindowRequestedMessage message) { WindowService.ShowOopsiesWindow(message.Value);