From 18daf8b8bf83bb7d4ed5d92e12ac101732f967c3 Mon Sep 17 00:00:00 2001 From: Salvador Cipolla Date: Tue, 28 Jan 2025 19:42:41 -0300 Subject: [PATCH] Feature: Skip launcher updates --- Knossos.NET/Classes/Knossos.cs | 12 +++++++++++- Knossos.NET/Models/GlobalSettings.cs | 5 +++++ Knossos.NET/Views/Windows/MessageBox.axaml.cs | 15 +++++++++++---- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/Knossos.NET/Classes/Knossos.cs b/Knossos.NET/Classes/Knossos.cs index d0a2f268..695b3ee3 100644 --- a/Knossos.NET/Classes/Knossos.cs +++ b/Knossos.NET/Classes/Knossos.cs @@ -423,12 +423,22 @@ private static async Task CheckKnetUpdates() if (releaseAsset != null && releaseAsset.browser_download_url != null) { + if(globalSettings.ignoredLauncherUpdates.Contains(latest.tag_name)) + { + Log.Add(Log.LogSeverity.Information, "Knossos.CheckKnetUpdates()", "Launcher update: " + latest.tag_name + " is available, but it was skipped because it is on the ignore list."); + return; + } if (!forceUpdateDownload && !globalSettings.autoUpdate) { MessageBox.MessageBoxResult result = MessageBox.MessageBoxResult.Cancel; await Dispatcher.UIThread.Invoke(async () => { - result = await MessageBox.Show(null, "Knossos.NET " + latest.tag_name + ":\n" + latest.body + "\n\n\nIf you continue Knossos.NET will be re-started after download.", "An update is available", MessageBox.MessageBoxButtons.ContinueCancel); + result = await MessageBox.Show(null, "Knossos.NET " + latest.tag_name + ":\n" + latest.body + "\n\n\nIf you continue Knossos.NET will be re-started after download.", "An update is available", MessageBox.MessageBoxButtons.ContinueCancelSkipVersion); }).ConfigureAwait(false); + if(result == MessageBox.MessageBoxResult.SkipVersion) + { + globalSettings.ignoredLauncherUpdates.Add(latest.tag_name); + globalSettings.Save(); + } if (result != MessageBox.MessageBoxResult.Continue) { return; diff --git a/Knossos.NET/Models/GlobalSettings.cs b/Knossos.NET/Models/GlobalSettings.cs index 29dc644c..8c534671 100644 --- a/Knossos.NET/Models/GlobalSettings.cs +++ b/Knossos.NET/Models/GlobalSettings.cs @@ -10,6 +10,7 @@ using Avalonia.Threading; using Knossos.NET.ViewModels; using System.Threading.Tasks; +using System.Collections.Generic; namespace Knossos.NET.Models { @@ -120,6 +121,9 @@ public AutoUpdateFsoBuilds(bool stable = false, bool rc = false, bool nightly = public AutoUpdateFsoBuilds autoUpdateBuilds { get; set; } = new AutoUpdateFsoBuilds(); [JsonPropertyName("warn_new_settings_system")] public bool warnNewSettingsSystem { get; set; } = true; + [JsonPropertyName("ignored_launcher_updates")] + public List ignoredLauncherUpdates { get; set; } = new List(); + /* * Settings that can wait to be saved at app close so we dont have to call save() all the time @@ -670,6 +674,7 @@ public void Load() mainMenuOpen = tempSettings.mainMenuOpen; sortType = tempSettings.sortType; portableFsoPreferences = tempSettings.portableFsoPreferences; + ignoredLauncherUpdates = tempSettings.ignoredLauncherUpdates; ReadFS2IniValues(); Log.Add(Log.LogSeverity.Information, "GlobalSettings.Load()", "Global settings have been loaded"); diff --git a/Knossos.NET/Views/Windows/MessageBox.axaml.cs b/Knossos.NET/Views/Windows/MessageBox.axaml.cs index ffd488bc..9e6c7c4a 100644 --- a/Knossos.NET/Views/Windows/MessageBox.axaml.cs +++ b/Knossos.NET/Views/Windows/MessageBox.axaml.cs @@ -18,7 +18,8 @@ public enum MessageBoxButtons Details, DetailsOKCancel, DetailsContinueCancel, - DontWarnAgainOK + DontWarnAgainOK, + ContinueCancelSkipVersion, } public enum MessageBoxResult @@ -29,7 +30,8 @@ public enum MessageBoxResult No, Continue, Details, - DontWarnAgain + DontWarnAgain, + SkipVersion } public MessageBox() @@ -84,12 +86,12 @@ void AddButton(string caption, MessageBoxResult r, bool def = false, string clas AddButton("No", MessageBoxResult.No, true, "Cancel"); } - if (buttons == MessageBoxButtons.Continue || buttons == MessageBoxButtons.ContinueCancel || buttons == MessageBoxButtons.DetailsContinueCancel) + if (buttons == MessageBoxButtons.Continue || buttons == MessageBoxButtons.ContinueCancel || buttons == MessageBoxButtons.DetailsContinueCancel || buttons == MessageBoxButtons.ContinueCancelSkipVersion) { AddButton("Continue", MessageBoxResult.Continue, false, "Accept"); } - if (buttons == MessageBoxButtons.OKCancel || buttons == MessageBoxButtons.YesNoCancel || buttons == MessageBoxButtons.ContinueCancel || buttons == MessageBoxButtons.DetailsOKCancel || buttons == MessageBoxButtons.DetailsContinueCancel) + if (buttons == MessageBoxButtons.OKCancel || buttons == MessageBoxButtons.YesNoCancel || buttons == MessageBoxButtons.ContinueCancel || buttons == MessageBoxButtons.DetailsOKCancel || buttons == MessageBoxButtons.DetailsContinueCancel || buttons == MessageBoxButtons.ContinueCancelSkipVersion) { AddButton("Cancel", MessageBoxResult.Cancel, true, "Cancel"); } @@ -105,6 +107,11 @@ void AddButton(string caption, MessageBoxResult r, bool def = false, string clas AddButton("Don't warn again", MessageBoxResult.DontWarnAgain, false, "Option", 150); } + if (buttons == MessageBoxButtons.ContinueCancelSkipVersion) + { + AddButton("Skip this version", MessageBoxResult.SkipVersion, false, "Option", 150); + } + var tcs = new TaskCompletionSource(); msgbox.Closed += delegate { tcs.TrySetResult(result); };