From 08e2b4c260d8c7360202b704d5df08f0f58a363d Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 21 Feb 2025 17:27:39 -0600 Subject: [PATCH 01/21] Add a 'remove all desktop shortcuts' option to the desktop shortcut management dialog --- .../Pages/DialogPages/DesktopShortcuts.xaml | 5 +++++ .../DialogPages/DesktopShortcuts.xaml.cs | 22 +++++++++++++++++++ .../Pages/DialogPages/DialogHelper_Generic.cs | 12 +++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml index 861f65e74f..9e63c5e929 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml @@ -135,6 +135,11 @@ + diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs index a079937fee..90d1a50eec 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs @@ -8,6 +8,8 @@ using UniGetUI.Core.Tools; using UniGetUI.PackageEngine.Classes.Packages.Classes; using UniGetUI.Pages.DialogPages; +using UniGetUI.Core.SettingsEngine; +using UniGetUI.Core.Logging; // To learn more about WinUI, the WinUI project structure, // and more about our project templates, see: http://aka.ms/winui-project-info. @@ -23,9 +25,13 @@ public sealed partial class DesktopShortcutsManager : Page private readonly ObservableCollection desktopShortcuts = []; private readonly bool NewOnly; + private bool DeleteAllShortcuts; + private bool IgnoreFirstCheck; public DesktopShortcutsManager(List? NewShortcuts) { + DeleteAllShortcuts = Settings.Get("RemoveAllDesktopShortcuts"); + IgnoreFirstCheck = DeleteAllShortcuts; // Otherwise the Checked handler is called when the dialog opens if (NewShortcuts is not null) { NewOnly = true; @@ -116,6 +122,22 @@ private void NoResetButton_Click(object sender, RoutedEventArgs e) ConfirmResetFlyout.Hide(); } + private async void HandleAllDesktop_Checked(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) + { + if (!IgnoreFirstCheck) + { + SaveChangesAndClose(); + await DialogHelper.ConfirmSetDeleteAllShortcutsSetting(); + await DialogHelper.ManageDesktopShortcuts(); + } + IgnoreFirstCheck = false; + } + + private void HandleAllDesktop_Unchecked(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) + { + Settings.Set("RemoveAllDesktopShortcuts", false); + } + public void SaveChangesAndClose() { Close?.Invoke(this, EventArgs.Empty); diff --git a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs index e4705ecf33..7b70397a7f 100644 --- a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs +++ b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs @@ -596,5 +596,15 @@ public static async Task NoDesktopShortcutsFound() dialog.CloseButtonText = CoreTools.Translate("Close"); await Window.ShowDialogAsync(dialog); } -} + public static async Task ConfirmSetDeleteAllShortcutsSetting() + { + var dialog = DialogFactory.Create(); + dialog.Title = CoreTools.Translate("Are you sure you want to delete all shortcuts?"); + dialog.Content = CoreTools.Translate("By enabling this, any time UniGetUI encounters a shortcut on your desktop after a check for updates, it will be deleted. Shortcuts unselected in the dialog will not be deleted. Only enable this if you are sure."); + dialog.PrimaryButtonText = CoreTools.Translate("Confirm"); + dialog.PrimaryButtonClick += (_, _) => Settings.Set("RemoveAllDesktopShortcuts", true); + dialog.CloseButtonText = CoreTools.Translate("Cancel"); + await Window.ShowDialogAsync(dialog); + } +} \ No newline at end of file From 02e0b76c5ce8067c031586ee55540658aae20ba3 Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 21 Feb 2025 17:37:41 -0600 Subject: [PATCH 02/21] Honor the 'remove all desktop shortcuts' setting --- .../Packages/Classes/DesktopShortcutsDatabase.cs | 15 +++++++++++---- .../Pages/DialogPages/DesktopShortcuts.xaml | 2 +- .../Pages/DialogPages/DesktopShortcuts.xaml.cs | 4 ++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs index ea04da8d0e..cf2bc951b1 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs @@ -155,20 +155,27 @@ public static List GetUnknownShortcuts() /// public static void TryRemoveNewShortcuts(IReadOnlyList PreviousShortCutList) { - HashSet ShortcutSet = PreviousShortCutList.ToHashSet(); - List CurrentShortcutList = DesktopShortcutsDatabase.GetShortcuts(); + HashSet ShortcutSet = [.. PreviousShortCutList]; + List CurrentShortcutList = GetShortcuts(); foreach (string shortcut in CurrentShortcutList) { if (ShortcutSet.Contains(shortcut)) continue; - switch (DesktopShortcutsDatabase.GetStatus(shortcut)) + switch (GetStatus(shortcut)) { case Status.Delete: - DesktopShortcutsDatabase.DeleteFromDisk(shortcut); + DeleteFromDisk(shortcut); break; case Status.Maintain: Logger.Debug("Refraining from deleting new shortcut " + shortcut + ": user disabled its deletion"); break; case Status.Unknown: + if (Settings.Get("RemoveAllDesktopShortcuts")) + { + AddToDatabase(shortcut, true); + DeleteFromDisk(shortcut); + RemoveFromUnknownShortcuts(shortcut); + break; + } if (UnknownShortcuts.Contains(shortcut)) continue; Logger.Info("Marking the shortcut " + shortcut + " to be asked to be deleted"); UnknownShortcuts.Add(shortcut); diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml index 9e63c5e929..50b98e2840 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml @@ -44,7 +44,7 @@ diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs index 90d1a50eec..6320dd8357 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs @@ -90,13 +90,13 @@ private void DeletableDesktopShortcutsList_DoubleTapped(object sender, DoubleTap private async void ManualScanButton_Click(object sender, RoutedEventArgs e) { DesktopShortcutsDatabase.TryRemoveNewShortcuts([]); - Close?.Invoke(this, EventArgs.Empty); + SaveChangesAndClose(); var shortcuts = DesktopShortcutsDatabase.GetUnknownShortcuts(); if (shortcuts.Any()) { await DialogHelper.ManageDesktopShortcuts(shortcuts); } - else + else if (!Settings.Get("RemoveAllDesktopShortcuts")) { await DialogHelper.NoDesktopShortcutsFound(); } From 111f40165349a925579fdb7d84029d8b92303d5b Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 21 Feb 2025 18:31:40 -0600 Subject: [PATCH 03/21] Remove all shortcuts will remove any shortcuts on the desktop after an operation, not just new ones --- src/UniGetUI.PackageEngine.Operations/PackageOperations.cs | 4 +++- src/UniGetUI/Controls/OperationWidgets/OperationControl.cs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs index 296d7cab0b..b18796a499 100644 --- a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs +++ b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs @@ -154,7 +154,9 @@ protected override Task HandleSuccess() if (Settings.Get("AskToDeleteNewDesktopShortcuts")) { - DesktopShortcutsDatabase.TryRemoveNewShortcuts(DesktopShortcutsBeforeStart); + // If RemoveAllDesktopShortcuts is enabled, we don't care if the shortcuts were there before the oepration or not; + // we just want them all removed. + DesktopShortcutsDatabase.TryRemoveNewShortcuts(Settings.Get("RemoveAllDesktopShortcuts") ? [] : DesktopShortcutsBeforeStart); } return Task.CompletedTask; } diff --git a/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs b/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs index 5cd1f5990f..2a19a2f913 100644 --- a/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs +++ b/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs @@ -156,7 +156,7 @@ private async void OnOperationFinished(object? sender, EventArgs e) } // Handle newly created shortcuts - if(Settings.Get("AskToDeleteNewDesktopShortcuts") + if (Settings.Get("AskToDeleteNewDesktopShortcuts") && !MainApp.Operations.AreThereRunningOperations() && DesktopShortcutsDatabase.GetUnknownShortcuts().Any()) { From 6c4af06544703027c72173c9f17921cd77e234e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Wed, 26 Feb 2025 19:50:40 +0100 Subject: [PATCH 04/21] Fix a bug where user wouldn't be prompted about new shortcuts --- .../AbstractOperation.cs | 9 +++++++-- .../Packages/Classes/DesktopShortcutsDatabase.cs | 11 ++++++----- .../Pages/DialogPages/DesktopShortcuts.xaml.cs | 4 ++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/UniGetUI.PackageEngine.Operations/AbstractOperation.cs b/src/UniGetUI.PackageEngine.Operations/AbstractOperation.cs index dbc29b0adf..79cd4db368 100644 --- a/src/UniGetUI.PackageEngine.Operations/AbstractOperation.cs +++ b/src/UniGetUI.PackageEngine.Operations/AbstractOperation.cs @@ -290,20 +290,20 @@ public async Task MainThread() } } while (result == OperationVeredict.AutoRetry); - OperationFinished?.Invoke(this, EventArgs.Empty); - while (OperationQueue.Remove(this)); // END OPERATION if (result == OperationVeredict.Success) { Status = OperationStatus.Succeeded; + OperationFinished?.Invoke(this, EventArgs.Empty); OperationSucceeded?.Invoke(this, EventArgs.Empty); Line(Metadata.SuccessMessage, LineType.Information); } else if (result == OperationVeredict.Failure) { Status = OperationStatus.Failed; + OperationFinished?.Invoke(this, EventArgs.Empty); OperationFailed?.Invoke(this, EventArgs.Empty); Line(Metadata.FailureMessage, LineType.Error); Line(Metadata.FailureMessage + " - " + CoreTools.Translate("Click here for more details"), @@ -312,8 +312,13 @@ public async Task MainThread() else if (result == OperationVeredict.Canceled) { Status = OperationStatus.Canceled; + OperationFinished?.Invoke(this, EventArgs.Empty); Line(CoreTools.Translate("Operation canceled by user"), LineType.Error); } + else + { + throw new Exception(); + } } catch (Exception ex) { diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs index cf2bc951b1..109ccf9bee 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs @@ -152,7 +152,7 @@ public static List GetUnknownShortcuts() /// /// Will attempt to remove new desktop shortcuts, if applicable. /// - /// + /// The shortcuts that already existed public static void TryRemoveNewShortcuts(IReadOnlyList PreviousShortCutList) { HashSet ShortcutSet = [.. PreviousShortCutList]; @@ -174,11 +174,12 @@ public static void TryRemoveNewShortcuts(IReadOnlyList PreviousShortCutL AddToDatabase(shortcut, true); DeleteFromDisk(shortcut); RemoveFromUnknownShortcuts(shortcut); - break; } - if (UnknownShortcuts.Contains(shortcut)) continue; - Logger.Info("Marking the shortcut " + shortcut + " to be asked to be deleted"); - UnknownShortcuts.Add(shortcut); + else if (!UnknownShortcuts.Contains(shortcut)) + { + Logger.Info("Marking the shortcut " + shortcut + " to be asked to be deleted"); + UnknownShortcuts.Add(shortcut); + } break; } } diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs index 6320dd8357..2cd3638634 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs @@ -122,7 +122,7 @@ private void NoResetButton_Click(object sender, RoutedEventArgs e) ConfirmResetFlyout.Hide(); } - private async void HandleAllDesktop_Checked(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) + private async void HandleAllDesktop_Checked(object sender, RoutedEventArgs e) { if (!IgnoreFirstCheck) { @@ -133,7 +133,7 @@ private async void HandleAllDesktop_Checked(object sender, Microsoft.UI.Xaml.Rou IgnoreFirstCheck = false; } - private void HandleAllDesktop_Unchecked(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) + private void HandleAllDesktop_Unchecked(object sender, RoutedEventArgs e) { Settings.Set("RemoveAllDesktopShortcuts", false); } From 35b8831b74c45094fc8c3de5990a3ede57a50f9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Wed, 26 Feb 2025 20:01:28 +0100 Subject: [PATCH 05/21] Dialog improvements --- .../Pages/DialogPages/DialogHelper_Generic.cs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs index 7b70397a7f..839d384fac 100644 --- a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs +++ b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs @@ -601,10 +601,13 @@ public static async Task ConfirmSetDeleteAllShortcutsSetting() { var dialog = DialogFactory.Create(); dialog.Title = CoreTools.Translate("Are you sure you want to delete all shortcuts?"); - dialog.Content = CoreTools.Translate("By enabling this, any time UniGetUI encounters a shortcut on your desktop after a check for updates, it will be deleted. Shortcuts unselected in the dialog will not be deleted. Only enable this if you are sure."); - dialog.PrimaryButtonText = CoreTools.Translate("Confirm"); - dialog.PrimaryButtonClick += (_, _) => Settings.Set("RemoveAllDesktopShortcuts", true); - dialog.CloseButtonText = CoreTools.Translate("Cancel"); - await Window.ShowDialogAsync(dialog); + dialog.Content = CoreTools.Translate("By enabling this, after a package is installed or updated, ANY existing desktop shortcut will be deleted. (Desktop shortcuts unchecked above will be kept back). Are you really sure you want to enable this feature?"); + dialog.PrimaryButtonText = CoreTools.Translate("Yes"); + dialog.CloseButtonText = CoreTools.Translate("No"); + dialog.DefaultButton = ContentDialogButton.Close; + if (await Window.ShowDialogAsync(dialog) is ContentDialogResult.Primary) + { + Settings.Set("RemoveAllDesktopShortcuts", true); + } } -} \ No newline at end of file +} From 461e9826044ea913dd9776cf5cc8f99742060d74 Mon Sep 17 00:00:00 2001 From: mrixner <100489307+mrixner@users.noreply.github.com> Date: Wed, 26 Feb 2025 13:04:23 -0600 Subject: [PATCH 06/21] Clarify dialog text --- src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs index 839d384fac..e3b984636e 100644 --- a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs +++ b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs @@ -601,7 +601,7 @@ public static async Task ConfirmSetDeleteAllShortcutsSetting() { var dialog = DialogFactory.Create(); dialog.Title = CoreTools.Translate("Are you sure you want to delete all shortcuts?"); - dialog.Content = CoreTools.Translate("By enabling this, after a package is installed or updated, ANY existing desktop shortcut will be deleted. (Desktop shortcuts unchecked above will be kept back). Are you really sure you want to enable this feature?"); + dialog.Content = CoreTools.Translate("By enabling this, after a package is installed or updated, ANY existing desktop shortcut will be deleted. (Desktop shortcuts unchecked above will be kept). Are you really sure you want to enable this feature?"); dialog.PrimaryButtonText = CoreTools.Translate("Yes"); dialog.CloseButtonText = CoreTools.Translate("No"); dialog.DefaultButton = ContentDialogButton.Close; From b456fc48da14032188678eb802c869bcb97fa248 Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 1 Mar 2025 20:43:45 -0600 Subject: [PATCH 07/21] Ask the user about all shortcuts on a manual scan, irrespective of the 'RemoveAllDesktopShortcuts' setting --- src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs index 2cd3638634..474b84f315 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs @@ -89,6 +89,10 @@ private void DeletableDesktopShortcutsList_DoubleTapped(object sender, DoubleTap private async void ManualScanButton_Click(object sender, RoutedEventArgs e) { + // Manual scan should ask the user about _all_ shortcuts + bool RemoveAllDesktopShortcuts = Settings.Get("RemoveAllDesktopShortcuts"); + Settings.Set("RemoveAllDesktopShortcuts", false); + DesktopShortcutsDatabase.TryRemoveNewShortcuts([]); SaveChangesAndClose(); var shortcuts = DesktopShortcutsDatabase.GetUnknownShortcuts(); @@ -100,6 +104,8 @@ private async void ManualScanButton_Click(object sender, RoutedEventArgs e) { await DialogHelper.NoDesktopShortcutsFound(); } + + Settings.Set("RemoveAllDesktopShortcuts", RemoveAllDesktopShortcuts); } private void CloseButton_Click(object sender, RoutedEventArgs e) From 5aeb78fd96482daf48ed8aaeaf95833885d3d969 Mon Sep 17 00:00:00 2001 From: mrixner <100489307+mrixner@users.noreply.github.com> Date: Sun, 2 Mar 2025 11:03:09 -0600 Subject: [PATCH 08/21] Update PackageOperations.cs --- src/UniGetUI.PackageEngine.Operations/PackageOperations.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs index 300396e5d5..278909a25c 100644 --- a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs +++ b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs @@ -154,7 +154,7 @@ protected override Task HandleSuccess() if (Settings.Get("AskToDeleteNewDesktopShortcuts")) { - // If RemoveAllDesktopShortcuts is enabled, we don't care if the shortcuts were there before the oepration or not; + // If RemoveAllDesktopShortcuts is enabled, we don't care if the shortcuts were there before the operation or not; // we just want them all removed. DesktopShortcutsDatabase.TryRemoveNewShortcuts(Settings.Get("RemoveAllDesktopShortcuts") ? [] : DesktopShortcutsBeforeStart); } From 415c58adb932fda7764eb6d51536c4ae17496238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Sat, 8 Mar 2025 22:29:09 +0100 Subject: [PATCH 09/21] Remove duplicated lines --- src/UniGetUI.PackageEngine.Operations/AbstractOperation.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/UniGetUI.PackageEngine.Operations/AbstractOperation.cs b/src/UniGetUI.PackageEngine.Operations/AbstractOperation.cs index 7ac5eac03a..6083498315 100644 --- a/src/UniGetUI.PackageEngine.Operations/AbstractOperation.cs +++ b/src/UniGetUI.PackageEngine.Operations/AbstractOperation.cs @@ -290,13 +290,13 @@ public async Task MainThread() } } while (result == OperationVeredict.AutoRetry); + while (OperationQueue.Remove(this)); // END OPERATION if (result == OperationVeredict.Success) { Status = OperationStatus.Succeeded; - OperationFinished?.Invoke(this, EventArgs.Empty); OperationSucceeded?.Invoke(this, EventArgs.Empty); OperationFinished?.Invoke(this, EventArgs.Empty); Line(Metadata.SuccessMessage, LineType.Information); @@ -304,7 +304,6 @@ public async Task MainThread() else if (result == OperationVeredict.Failure) { Status = OperationStatus.Failed; - OperationFinished?.Invoke(this, EventArgs.Empty); OperationFailed?.Invoke(this, EventArgs.Empty); OperationFinished?.Invoke(this, EventArgs.Empty); Line(Metadata.FailureMessage, LineType.Error); From 6dc1f655c91de8dc361401213cf1a5eba2197ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Sat, 8 Mar 2025 22:29:42 +0100 Subject: [PATCH 10/21] Discard changes to src/UniGetUI/Controls/OperationWidgets/OperationControl.cs --- src/UniGetUI/Controls/OperationWidgets/OperationControl.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs b/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs index f6cbd60d73..8e881d4d03 100644 --- a/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs +++ b/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs @@ -154,7 +154,7 @@ private async void OnOperationFinished(object? sender, EventArgs e) } // Handle newly created shortcuts - if (Settings.Get("AskToDeleteNewDesktopShortcuts") + if(Settings.Get("AskToDeleteNewDesktopShortcuts") && !MainApp.Operations.AreThereRunningOperations() && DesktopShortcutsDatabase.GetUnknownShortcuts().Any()) { From 8fcc428ec8a588a4ebaf02359c158b7e913f65f5 Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 8 Mar 2025 17:56:28 -0600 Subject: [PATCH 11/21] Improve the codebase's management of new shortcuts depending on the 'delete all' setting --- .../PackageOperations.cs | 4 +- .../Classes/DesktopShortcutsDatabase.cs | 45 +++++++++++++++++-- .../DialogPages/DesktopShortcuts.xaml.cs | 8 +--- 3 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs index 278909a25c..4b26b720ed 100644 --- a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs +++ b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs @@ -154,9 +154,7 @@ protected override Task HandleSuccess() if (Settings.Get("AskToDeleteNewDesktopShortcuts")) { - // If RemoveAllDesktopShortcuts is enabled, we don't care if the shortcuts were there before the operation or not; - // we just want them all removed. - DesktopShortcutsDatabase.TryRemoveNewShortcuts(Settings.Get("RemoveAllDesktopShortcuts") ? [] : DesktopShortcutsBeforeStart); + DesktopShortcutsDatabase.TryRemoveNewShortcuts(DesktopShortcutsBeforeStart); } return Task.CompletedTask; } diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs index 109ccf9bee..b7c2cca819 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs @@ -153,13 +153,14 @@ public static List GetUnknownShortcuts() /// Will attempt to remove new desktop shortcuts, if applicable. /// /// The shortcuts that already existed - public static void TryRemoveNewShortcuts(IReadOnlyList PreviousShortCutList) + public static void TryRemoveNewShortcuts(IReadOnlyList PreviousShortCutList, bool AllowAutoDelete = true) { HashSet ShortcutSet = [.. PreviousShortCutList]; List CurrentShortcutList = GetShortcuts(); foreach (string shortcut in CurrentShortcutList) { - if (ShortcutSet.Contains(shortcut)) continue; + Logger.Debug("Shortcut found: " + shortcut); + if (ShortcutSet.Contains(shortcut) && !(AllowAutoDelete && Settings.Get("RemoveAllDesktopShortcuts"))) continue; switch (GetStatus(shortcut)) { case Status.Delete: @@ -169,7 +170,7 @@ public static void TryRemoveNewShortcuts(IReadOnlyList PreviousShortCutL Logger.Debug("Refraining from deleting new shortcut " + shortcut + ": user disabled its deletion"); break; case Status.Unknown: - if (Settings.Get("RemoveAllDesktopShortcuts")) + if (AllowAutoDelete && Settings.Get("RemoveAllDesktopShortcuts")) { AddToDatabase(shortcut, true); DeleteFromDisk(shortcut); @@ -184,4 +185,42 @@ public static void TryRemoveNewShortcuts(IReadOnlyList PreviousShortCutL } } } + + /// + /// Will attempt to remove all desktop shortcuts, deleting them automatically if the user has that setting enabled, otherwise asking the user. + /// If the setting is not enabled and a previous shortcut list is passed, it will pass that on to TryRemoveNewShortcuts and ask about those shortcuts. + /// + /// The shortcuts that already existed. If null, the method will try to remove all shortcuts. + public static void TryRemoveAllShortcuts(bool AllowAutoDelete = true, IReadOnlyList? PreviousShortCutList = null) + { + if (AllowAutoDelete && Settings.Get("RemoveAllDesktopShortcuts")) + { + List CurrentShortcutList = GetShortcuts(); + foreach (string shortcut in CurrentShortcutList) + { + switch (GetStatus(shortcut)) + { + case Status.Delete: + DeleteFromDisk(shortcut); + break; + case Status.Maintain: + Logger.Debug("Refraining from deleting new shortcut " + shortcut + ": user disabled its deletion"); + break; + case Status.Unknown: + AddToDatabase(shortcut, true); + DeleteFromDisk(shortcut); + RemoveFromUnknownShortcuts(shortcut); + break; + } + } + } + else if (PreviousShortCutList == null) + { + TryRemoveNewShortcuts([], AllowAutoDelete); + } + else + { + TryRemoveNewShortcuts(PreviousShortCutList, AllowAutoDelete); + } + } } diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs index 474b84f315..1e91e72a7e 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs @@ -90,11 +90,9 @@ private void DeletableDesktopShortcutsList_DoubleTapped(object sender, DoubleTap private async void ManualScanButton_Click(object sender, RoutedEventArgs e) { // Manual scan should ask the user about _all_ shortcuts - bool RemoveAllDesktopShortcuts = Settings.Get("RemoveAllDesktopShortcuts"); - Settings.Set("RemoveAllDesktopShortcuts", false); - - DesktopShortcutsDatabase.TryRemoveNewShortcuts([]); SaveChangesAndClose(); + DesktopShortcutsDatabase.TryRemoveAllShortcuts(false); + var shortcuts = DesktopShortcutsDatabase.GetUnknownShortcuts(); if (shortcuts.Any()) { @@ -104,8 +102,6 @@ private async void ManualScanButton_Click(object sender, RoutedEventArgs e) { await DialogHelper.NoDesktopShortcutsFound(); } - - Settings.Set("RemoveAllDesktopShortcuts", RemoveAllDesktopShortcuts); } private void CloseButton_Click(object sender, RoutedEventArgs e) From a4c2e2b247048af78b1658a871616ae5b0991aea Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 8 Mar 2025 17:58:22 -0600 Subject: [PATCH 12/21] Check shortcuts to be deleted by default --- src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs index 1e91e72a7e..699dd418b6 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs @@ -51,7 +51,7 @@ private void UpdateData(List? NewShortcuts) { foreach (var path in NewShortcuts) { - desktopShortcuts.Add(new(path, false)); + desktopShortcuts.Add(new(path, true)); } } else From 5ef7e510f22fb177e656bb5d21520d812cf4ae28 Mon Sep 17 00:00:00 2001 From: mrixner <100489307+mrixner@users.noreply.github.com> Date: Sun, 9 Mar 2025 10:55:07 -0500 Subject: [PATCH 13/21] Update DesktopShortcuts.xaml Remove a warning against behavior that was rectified --- src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml index 50b98e2840..9e63c5e929 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml @@ -44,7 +44,7 @@ From 7a77de2e958488886f7caef62ee313d8288a69cb Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 10 Mar 2025 11:21:47 -0500 Subject: [PATCH 14/21] Remove desktop shortcuts dialog width value (fix marticliment#3369) --- src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml index cfca4f6573..037dc56170 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml @@ -7,8 +7,7 @@ xmlns:local="using:UniGetUI.Interface" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:widgets="using:UniGetUI.Interface.Widgets" - Width="900" - MaxWidth="1100" + MaxWidth="950" mc:Ignorable="d"> From 9ed979a5f94113a4a886eb1dc60e928ac6216fcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Tue, 11 Mar 2025 23:30:22 +0100 Subject: [PATCH 15/21] Change how shortcuts are handled (still needs to be thorougly tested) --- .../PackageOperations.cs | 4 +- .../Classes/DesktopShortcutsDatabase.cs | 123 +++++------------- .../DialogPages/DesktopShortcuts.xaml.cs | 28 ++-- .../Pages/DialogPages/DialogHelper_Generic.cs | 6 +- 4 files changed, 60 insertions(+), 101 deletions(-) diff --git a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs index 4777b2fd17..9904d44d54 100644 --- a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs +++ b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs @@ -157,7 +157,7 @@ protected override Task HandleSuccess() if (Settings.Get("AskToDeleteNewDesktopShortcuts")) { - DesktopShortcutsDatabase.TryRemoveNewShortcuts(DesktopShortcutsBeforeStart); + DesktopShortcutsDatabase.HandleNewShortcuts(DesktopShortcutsBeforeStart); } return Task.CompletedTask; } @@ -209,7 +209,7 @@ protected override async Task HandleSuccess() if (Settings.Get("AskToDeleteNewDesktopShortcuts")) { - DesktopShortcutsDatabase.TryRemoveNewShortcuts(DesktopShortcutsBeforeStart); + DesktopShortcutsDatabase.HandleNewShortcuts(DesktopShortcutsBeforeStart); } if (await Package.HasUpdatesIgnoredAsync() && await Package.GetIgnoredUpdatesVersionAsync() != "*") diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs index b7c2cca819..134dc6fe61 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs @@ -28,10 +28,13 @@ public static void ResetDatabase() /// Adds a desktop shortcut to the deletable desktop shortcuts database /// /// The path of the shortcut to delete - /// Whether or not to mark this entry as deletable in the database. Defaults to true - public static void AddToDatabase(string shortcutPath, bool deletable = true) + /// The status to set + public static void AddToDatabase(string shortcutPath, Status shortcutStatus) { - Settings.SetDictionaryItem("DeletableDesktopShortcuts", shortcutPath, deletable); + if (shortcutStatus is Status.Unknown) + Settings.RemoveDictionaryKey("DeletableDesktopShortcuts", shortcutPath); + else + Settings.SetDictionaryItem("DeletableDesktopShortcuts", shortcutPath, shortcutStatus is Status.Delete); } /// @@ -54,28 +57,6 @@ public static bool Remove(string shortcutPath) return false; } - /// - /// Attempts to reset the configuration of a given shortcut path from the database. - /// This will make it so the user is asked about it the next time it is discovered. - /// Different from `Remove` as Remove simply marks it as non-deletable, whereas this removes the configuration entirely. - /// - /// The path of the shortcut to delete - /// True if the shortcut was completely removed, false if it was not there from the beginning - public static bool ResetShortcut(string shortcutPath) - { - // Remove the entry if present - if (Settings.DictionaryContainsKey("DeletableDesktopShortcuts", shortcutPath)) - { - // Remove the entry and propagate changes to disk - Settings.RemoveDictionaryKey("DeletableDesktopShortcuts", shortcutPath); - return true; - } - - // Do nothing if the entry was not there - Logger.Warn($"Attempted to reset a deletable desktop shortcut {{shortcutPath={shortcutPath}}} that was not found there"); - return false; - } - /// /// Attempts to delete the given shortcut path off the disk /// @@ -103,7 +84,7 @@ public static bool DeleteFromDisk(string shortcutPath) /// until a choice is given to the user and they explicitly request that it be deleted. /// /// The path of the shortcut to be deleted - /// True if the package is ignored, false otherwhise + /// The status of a shortcut public static Status GetStatus(string shortcutPath) { // Check if the package is ignored @@ -149,78 +130,46 @@ public static List GetUnknownShortcuts() return UnknownShortcuts; } + /// - /// Will attempt to remove new desktop shortcuts, if applicable. + /// Will handle the removal, if applicable, of any shortcut that is not present on the given PreviousShortCutList. /// /// The shortcuts that already existed - public static void TryRemoveNewShortcuts(IReadOnlyList PreviousShortCutList, bool AllowAutoDelete = true) + public static void HandleNewShortcuts(IReadOnlyList PreviousShortCutList) { - HashSet ShortcutSet = [.. PreviousShortCutList]; - List CurrentShortcutList = GetShortcuts(); - foreach (string shortcut in CurrentShortcutList) + bool DeleteUnknownShortcuts = Settings.Get("DeleteAllNewShortcuts"); + + HashSet PreviousShortcuts = [.. PreviousShortCutList]; + List CurrentShortcuts = GetShortcuts(); + foreach (string shortcut in CurrentShortcuts) { - Logger.Debug("Shortcut found: " + shortcut); - if (ShortcutSet.Contains(shortcut) && !(AllowAutoDelete && Settings.Get("RemoveAllDesktopShortcuts"))) continue; - switch (GetStatus(shortcut)) + // If this shortcut already existed, skip it. + if (PreviousShortcuts.Contains(shortcut)) + continue; + + var status = GetStatus(shortcut); + if (status is Status.Maintain) { - case Status.Delete: - DeleteFromDisk(shortcut); - break; - case Status.Maintain: - Logger.Debug("Refraining from deleting new shortcut " + shortcut + ": user disabled its deletion"); - break; - case Status.Unknown: - if (AllowAutoDelete && Settings.Get("RemoveAllDesktopShortcuts")) - { - AddToDatabase(shortcut, true); - DeleteFromDisk(shortcut); - RemoveFromUnknownShortcuts(shortcut); - } - else if (!UnknownShortcuts.Contains(shortcut)) - { - Logger.Info("Marking the shortcut " + shortcut + " to be asked to be deleted"); - UnknownShortcuts.Add(shortcut); - } - break; + // Don't delete this shortcut, it has been set to be kept } - } - } - - /// - /// Will attempt to remove all desktop shortcuts, deleting them automatically if the user has that setting enabled, otherwise asking the user. - /// If the setting is not enabled and a previous shortcut list is passed, it will pass that on to TryRemoveNewShortcuts and ask about those shortcuts. - /// - /// The shortcuts that already existed. If null, the method will try to remove all shortcuts. - public static void TryRemoveAllShortcuts(bool AllowAutoDelete = true, IReadOnlyList? PreviousShortCutList = null) - { - if (AllowAutoDelete && Settings.Get("RemoveAllDesktopShortcuts")) - { - List CurrentShortcutList = GetShortcuts(); - foreach (string shortcut in CurrentShortcutList) + else if (status is Status.Delete) { - switch (GetStatus(shortcut)) + DeleteFromDisk(shortcut); + } + else if (status is Status.Unknown && DeleteUnknownShortcuts) + { + Logger.Warn($"New shortcut {shortcut} will be set for deletion (This shortcut was never seen before)"); + AddToDatabase(shortcut, Status.Delete); + DeleteFromDisk(shortcut); + } + else /* status is Status.Unknown && !DeleteUnknownShortcuts */ + { + if (!UnknownShortcuts.Contains(shortcut)) { - case Status.Delete: - DeleteFromDisk(shortcut); - break; - case Status.Maintain: - Logger.Debug("Refraining from deleting new shortcut " + shortcut + ": user disabled its deletion"); - break; - case Status.Unknown: - AddToDatabase(shortcut, true); - DeleteFromDisk(shortcut); - RemoveFromUnknownShortcuts(shortcut); - break; + Logger.Info($"Marking the shortcut {shortcut} to be asked to be deleted"); + UnknownShortcuts.Add(shortcut); } } } - else if (PreviousShortCutList == null) - { - TryRemoveNewShortcuts([], AllowAutoDelete); - } - else - { - TryRemoveNewShortcuts(PreviousShortCutList, AllowAutoDelete); - } } } diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs index 6edb998ec4..9ad239a5d7 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs @@ -71,7 +71,7 @@ private void UpdateData(List? NewShortcuts) throw new InvalidOperationException(); } - DesktopShortcutsDatabase.ResetShortcut(sh.ShortcutPath); + DesktopShortcutsDatabase.AddToDatabase(sh.ShortcutPath, DesktopShortcutsDatabase.Status.Unknown); desktopShortcuts.Remove(sh); }; } @@ -88,18 +88,24 @@ private void DeletableDesktopShortcutsList_DoubleTapped(object sender, DoubleTap private async void ManualScanButton_Click(object sender, RoutedEventArgs e) { - // Manual scan should ask the user about _all_ shortcuts SaveChangesAndClose(); - DesktopShortcutsDatabase.TryRemoveAllShortcuts(false); - - var shortcuts = DesktopShortcutsDatabase.GetUnknownShortcuts(); - if (shortcuts.Any()) + var shortcutsOnDesktop = DesktopShortcutsDatabase.GetShortcuts(); + List UnknownShortcuts = new(); + foreach (var shortcut in shortcutsOnDesktop) { - await DialogHelper.ManageDesktopShortcuts(shortcuts); + if(DesktopShortcutsDatabase.GetStatus(shortcut) is DesktopShortcutsDatabase.Status.Unknown) + { + UnknownShortcuts.Add(shortcut); + } } - else if (!Settings.Get("RemoveAllDesktopShortcuts")) + if (UnknownShortcuts.Any()) { - await DialogHelper.NoDesktopShortcutsFound(); + await DialogHelper.ManageDesktopShortcuts(UnknownShortcuts); + } + else + { + await DialogHelper.ManualScanDidNotFoundNewShortcuts(); + await DialogHelper.ManageDesktopShortcuts(); } } @@ -144,11 +150,13 @@ public void SaveChangesAndClose() Close?.Invoke(this, EventArgs.Empty); foreach (var shortcut in desktopShortcuts) { - DesktopShortcutsDatabase.AddToDatabase(shortcut.ShortcutPath, shortcut.IsChecked); + DesktopShortcutsDatabase.AddToDatabase(shortcut.ShortcutPath, shortcut.IsChecked? DesktopShortcutsDatabase.Status.Maintain: DesktopShortcutsDatabase.Status.Delete); + if (shortcut.IsChecked && File.Exists(shortcut.ShortcutPath)) { DesktopShortcutsDatabase.DeleteFromDisk(shortcut.ShortcutPath); } + DesktopShortcutsDatabase.RemoveFromUnknownShortcuts(shortcut.ShortcutPath); } } diff --git a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs index 15bbdd7690..b7e28f41aa 100644 --- a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs +++ b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs @@ -588,7 +588,7 @@ public static void ShowTelemetryBanner() } - public static async Task NoDesktopShortcutsFound() + public static async Task ManualScanDidNotFoundNewShortcuts() { var dialog = DialogFactory.Create(); dialog.Title = CoreTools.Translate("Manual scan"); @@ -601,7 +601,9 @@ public static async Task ConfirmSetDeleteAllShortcutsSetting() { var dialog = DialogFactory.Create(); dialog.Title = CoreTools.Translate("Are you sure you want to delete all shortcuts?"); - dialog.Content = CoreTools.Translate("By enabling this, after a package is installed or updated, ANY existing desktop shortcut will be deleted. (Desktop shortcuts unchecked above will be kept). Are you really sure you want to enable this feature?"); + dialog.Content = CoreTools.Translate("Any new shorcuts created during an install or an update operation will be deleted automatically, instead of showing a confirmation prompt the first time they are detected.") + + " " + CoreTools.Translate("Any shorcuts created or modified outside of UniGetUI will be ignored. You will be able to add them via the {0} button", $"{CoreTools.Translate("Manual scan")}") + + " " + CoreTools.Translate("Are you really sure you want to enable this feature?"); dialog.PrimaryButtonText = CoreTools.Translate("Yes"); dialog.CloseButtonText = CoreTools.Translate("No"); dialog.DefaultButton = ContentDialogButton.Close; From 67e20dad453545afb710f4f8e4068f006c220fea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Wed, 12 Mar 2025 15:36:24 +0100 Subject: [PATCH 16/21] Different behaviour to when pre-existing shortcuts are handled or not. --- .../Classes/DesktopShortcutsDatabase.cs | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs index 134dc6fe61..8e28684a0a 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs @@ -8,8 +8,8 @@ public static class DesktopShortcutsDatabase public enum Status { Maintain, // The user has explicitly requested this shortcut not be deleted - Delete, // The user has allowed the shortcut to be deleted Unknown, // The user has not said whether they want this shortcut to be deleted + Delete, // The user has allowed the shortcut to be deleted } private static readonly List UnknownShortcuts = []; @@ -130,7 +130,6 @@ public static List GetUnknownShortcuts() return UnknownShortcuts; } - /// /// Will handle the removal, if applicable, of any shortcut that is not present on the given PreviousShortCutList. /// @@ -138,15 +137,11 @@ public static List GetUnknownShortcuts() public static void HandleNewShortcuts(IReadOnlyList PreviousShortCutList) { bool DeleteUnknownShortcuts = Settings.Get("DeleteAllNewShortcuts"); - HashSet PreviousShortcuts = [.. PreviousShortCutList]; List CurrentShortcuts = GetShortcuts(); + foreach (string shortcut in CurrentShortcuts) { - // If this shortcut already existed, skip it. - if (PreviousShortcuts.Contains(shortcut)) - continue; - var status = GetStatus(shortcut); if (status is Status.Maintain) { @@ -154,20 +149,32 @@ public static void HandleNewShortcuts(IReadOnlyList PreviousShortCutList } else if (status is Status.Delete) { + // If a shortcut is set to be deleted, delete it, + // even when it was not created during an UniGetUI operation DeleteFromDisk(shortcut); } - else if (status is Status.Unknown && DeleteUnknownShortcuts) + else if (status is Status.Unknown) { - Logger.Warn($"New shortcut {shortcut} will be set for deletion (This shortcut was never seen before)"); - AddToDatabase(shortcut, Status.Delete); - DeleteFromDisk(shortcut); - } - else /* status is Status.Unknown && !DeleteUnknownShortcuts */ - { - if (!UnknownShortcuts.Contains(shortcut)) + // If a shortcut has not been detected yet, and it + // existed before an operation started, then do nothing. + if(PreviousShortcuts.Contains(shortcut)) + continue; + + if (DeleteUnknownShortcuts) + { // If the shortcut was created during an operation + // and autodelete is enabled, delete that icon + Logger.Warn($"New shortcut {shortcut} will be set for deletion (This shortcut was never seen before)"); + AddToDatabase(shortcut, Status.Delete); + DeleteFromDisk(shortcut); + } + else { - Logger.Info($"Marking the shortcut {shortcut} to be asked to be deleted"); - UnknownShortcuts.Add(shortcut); + // Mark the shortcut as unknown and prompt the user. + if (!UnknownShortcuts.Contains(shortcut)) + { + Logger.Info($"Marking the shortcut {shortcut} to be asked to be deleted"); + UnknownShortcuts.Add(shortcut); + } } } } From ef38789700b0933bd75bf2734b4ed51a0764eeab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Wed, 12 Mar 2025 15:47:20 +0100 Subject: [PATCH 17/21] Upgrade NuGet packages to the latest version --- .../UniGetUI.Core.IconEngine.csproj | 2 +- .../UniGetUI.Core.LanguageEngine.csproj | 2 +- src/UniGetUI/UniGetUI.csproj | 4 ++-- ...ExternalLibraries.WindowsPackageManager.Interop.csproj | 8 ++++---- .../WindowsPackageManagerElevatedFactory.cs | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/UniGetUI.Core.IconStore/UniGetUI.Core.IconEngine.csproj b/src/UniGetUI.Core.IconStore/UniGetUI.Core.IconEngine.csproj index 60da03e101..29fd21b362 100644 --- a/src/UniGetUI.Core.IconStore/UniGetUI.Core.IconEngine.csproj +++ b/src/UniGetUI.Core.IconStore/UniGetUI.Core.IconEngine.csproj @@ -24,6 +24,6 @@ - + diff --git a/src/UniGetUI.Core.LanguageEngine/UniGetUI.Core.LanguageEngine.csproj b/src/UniGetUI.Core.LanguageEngine/UniGetUI.Core.LanguageEngine.csproj index a191fa73eb..625d9d0186 100644 --- a/src/UniGetUI.Core.LanguageEngine/UniGetUI.Core.LanguageEngine.csproj +++ b/src/UniGetUI.Core.LanguageEngine/UniGetUI.Core.LanguageEngine.csproj @@ -12,7 +12,7 @@ - + diff --git a/src/UniGetUI/UniGetUI.csproj b/src/UniGetUI/UniGetUI.csproj index 11c4ecba14..0f7e301dd0 100644 --- a/src/UniGetUI/UniGetUI.csproj +++ b/src/UniGetUI/UniGetUI.csproj @@ -81,9 +81,9 @@ - + - + diff --git a/src/WindowsPackageManager.Interop/ExternalLibraries.WindowsPackageManager.Interop.csproj b/src/WindowsPackageManager.Interop/ExternalLibraries.WindowsPackageManager.Interop.csproj index c991ff74bd..73fb151b3b 100644 --- a/src/WindowsPackageManager.Interop/ExternalLibraries.WindowsPackageManager.Interop.csproj +++ b/src/WindowsPackageManager.Interop/ExternalLibraries.WindowsPackageManager.Interop.csproj @@ -22,7 +22,7 @@ - + @@ -43,14 +43,14 @@ - Feed the $(TargetDir)\WINMD path to CsWinRT in order to generate the projected classes NOTE: Suppressing the warning only is not enough as this will cause CoreClrInitFailure (0x80008089) error. --> - + NU1701 true none false - + NU1701 true none @@ -59,6 +59,6 @@ - + diff --git a/src/WindowsPackageManager.Interop/WindowsPackageManager/WindowsPackageManagerElevatedFactory.cs b/src/WindowsPackageManager.Interop/WindowsPackageManager/WindowsPackageManagerElevatedFactory.cs index b3eb0c19ec..51f983a022 100644 --- a/src/WindowsPackageManager.Interop/WindowsPackageManager/WindowsPackageManagerElevatedFactory.cs +++ b/src/WindowsPackageManager.Interop/WindowsPackageManager/WindowsPackageManagerElevatedFactory.cs @@ -20,7 +20,7 @@ namespace WindowsPackageManager.Interop; /// This class is based on what the winget cmdlets do. See /// https://github.com/microsoft/winget-cli/blob/master/src/PowerShell/Microsoft.WinGet.Client/Helpers/ComObjectFactory.cs /// -public class WindowsPackageManagerElevatedFactory : WindowsPackageManagerFactory +/*public class WindowsPackageManagerElevatedFactory : WindowsPackageManagerFactory { // The only CLSID context supported by the DLL we call is Prod. // If we want to use Dev classes we have to use a Dev version of the DLL. @@ -56,4 +56,4 @@ private static extern unsafe int WinGetServerManualActivation_CreateInstance( in Guid iid, uint flags, out void* instance); -} +}*/ From a52052c6153584b3785dc9f738ec89abe232ba27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Wed, 12 Mar 2025 20:56:06 +0100 Subject: [PATCH 18/21] Improvements to how shortcuts are shown on the ManageDesktopShortcuts Dialog --- .../PackageOperations.cs | 4 +- .../Classes/DesktopShortcutsDatabase.cs | 23 ++- .../Pages/DialogPages/DesktopShortcuts.xaml | 39 +++-- .../DialogPages/DesktopShortcuts.xaml.cs | 155 +++++++----------- .../Pages/DialogPages/DialogHelper_Generic.cs | 28 ++-- 5 files changed, 117 insertions(+), 132 deletions(-) diff --git a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs index 9904d44d54..120e48f054 100644 --- a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs +++ b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs @@ -177,7 +177,7 @@ protected override void Initialize() if (Settings.Get("AskToDeleteNewDesktopShortcuts")) { - DesktopShortcutsBeforeStart = DesktopShortcutsDatabase.GetShortcuts(); + DesktopShortcutsBeforeStart = DesktopShortcutsDatabase.GetShortcutsOnDisk(); } } } @@ -231,7 +231,7 @@ protected override void Initialize() if (Settings.Get("AskToDeleteNewDesktopShortcuts")) { - DesktopShortcutsBeforeStart = DesktopShortcutsDatabase.GetShortcuts(); + DesktopShortcutsBeforeStart = DesktopShortcutsDatabase.GetShortcutsOnDisk(); } } } diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs index 8e28684a0a..ff1266300a 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs @@ -101,7 +101,7 @@ public static Status GetStatus(string shortcutPath) /// Get a list of shortcuts (.lnk files only) currently on the user's desktop /// /// A list of desktop shortcut paths - public static List GetShortcuts() + public static List GetShortcutsOnDisk() { List shortcuts = []; string UserDesktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); @@ -111,6 +111,23 @@ public static List GetShortcuts() return shortcuts; } + /// + /// Gets all the shortcuts exist on disk or/and on the database + /// + /// + public static List GetAllShortcuts() + { + var shortcuts = GetShortcutsOnDisk(); + + foreach (var item in Settings.GetDictionary("DeletableDesktopShortcuts")) + { + if (!shortcuts.Contains(item.Key)) + shortcuts.Add(item.Key); + } + + return shortcuts; + } + /// /// Remove a shortcut from the list of shortcuts whose deletion verdicts are unknown (as in, the user needs to be asked about deleting them when their operations finish) /// @@ -138,7 +155,7 @@ public static void HandleNewShortcuts(IReadOnlyList PreviousShortCutList { bool DeleteUnknownShortcuts = Settings.Get("DeleteAllNewShortcuts"); HashSet PreviousShortcuts = [.. PreviousShortCutList]; - List CurrentShortcuts = GetShortcuts(); + List CurrentShortcuts = GetShortcutsOnDisk(); foreach (string shortcut in CurrentShortcuts) { @@ -163,7 +180,7 @@ public static void HandleNewShortcuts(IReadOnlyList PreviousShortCutList if (DeleteUnknownShortcuts) { // If the shortcut was created during an operation // and autodelete is enabled, delete that icon - Logger.Warn($"New shortcut {shortcut} will be set for deletion (This shortcut was never seen before)"); + Logger.Warn($"New shortcut {shortcut} will be set for deletion (this shortcut was never seen before)"); AddToDatabase(shortcut, Status.Delete); DeleteFromDisk(shortcut); } diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml index 037dc56170..57c2253184 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml @@ -48,11 +48,11 @@ - + WrappingMode="WrapWholeWords" /> @@ -165,10 +176,8 @@ + Content="Automatically delete newly detected shortcuts instead of showing this dialog." + Name="AutoDeleteShortcutsCheckbox"/> diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs index 9ad239a5d7..3d14bd14e2 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs @@ -21,76 +21,42 @@ namespace UniGetUI.Interface public sealed partial class DesktopShortcutsManager : Page { public event EventHandler? Close; - private readonly ObservableCollection desktopShortcuts = []; + private readonly ObservableCollection Shortcuts = []; - private readonly bool NewOnly; - private bool DeleteAllShortcuts; - private bool IgnoreFirstCheck; - - public DesktopShortcutsManager(List? NewShortcuts) + public DesktopShortcutsManager() { - DeleteAllShortcuts = Settings.Get("RemoveAllDesktopShortcuts"); - IgnoreFirstCheck = DeleteAllShortcuts; // Otherwise the Checked handler is called when the dialog opens - if (NewShortcuts is not null) - { - NewOnly = true; - } - InitializeComponent(); - DeletableDesktopShortcutsList.ItemsSource = desktopShortcuts; - DeletableDesktopShortcutsList.DoubleTapped += DeletableDesktopShortcutsList_DoubleTapped; - UpdateData(NewShortcuts); + DeletableDesktopShortcutsList.ItemsSource = Shortcuts; + + AutoDeleteShortcutsCheckbox.IsChecked = Settings.Get("RemoveAllDesktopShortcuts"); + AutoDeleteShortcutsCheckbox.Checked += HandleAllDesktop_Checked; + AutoDeleteShortcutsCheckbox.Unchecked += HandleAllDesktop_Unchecked; } - private void UpdateData(List? NewShortcuts) + public void LoadShortcuts(IReadOnlyList NewShortcuts) { - desktopShortcuts.Clear(); - - if (NewShortcuts is not null) - { - foreach (var path in NewShortcuts) - { - desktopShortcuts.Add(new(path, true)); - } - } - else - { - foreach (var (shortcutPath, shortcutEnabled) in DesktopShortcutsDatabase.GetDatabase()) - { - var shortcutEntry = new ShortcutEntry(shortcutPath, shortcutEnabled); - desktopShortcuts.Add(shortcutEntry); - } - } - - foreach (var shortcut in desktopShortcuts) + Shortcuts.Clear(); + List items = new(); + foreach (var shortcut in NewShortcuts) { - shortcut.OnReset += (sender, path) => - { - if (sender is not ShortcutEntry sh) - { - throw new InvalidOperationException(); - } - - DesktopShortcutsDatabase.AddToDatabase(sh.ShortcutPath, DesktopShortcutsDatabase.Status.Unknown); - desktopShortcuts.Remove(sh); - }; + var status = DesktopShortcutsDatabase.GetStatus(shortcut); + var entry = new ShortcutEntry(shortcut, status is DesktopShortcutsDatabase.Status.Delete); + entry.OnReset += (_, _) => Shortcuts.Remove(entry); + items.Add(entry); } - } - private void DeletableDesktopShortcutsList_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e) - { - if (DeletableDesktopShortcutsList.SelectedItem is ShortcutEntry shortcut) + foreach (var item in items.OrderBy(s => s.Name)) { - shortcut.ResetConfiguration(); - desktopShortcuts.Remove(shortcut); + Shortcuts.Add(item); } } private async void ManualScanButton_Click(object sender, RoutedEventArgs e) { - SaveChangesAndClose(); - var shortcutsOnDesktop = DesktopShortcutsDatabase.GetShortcuts(); + SaveChanges(); + var shortcutsOnDesktop = DesktopShortcutsDatabase.GetShortcutsOnDisk(); List UnknownShortcuts = new(); + foreach (var shortcut in shortcutsOnDesktop) { if(DesktopShortcutsDatabase.GetStatus(shortcut) is DesktopShortcutsDatabase.Status.Unknown) @@ -100,12 +66,16 @@ private async void ManualScanButton_Click(object sender, RoutedEventArgs e) } if (UnknownShortcuts.Any()) { - await DialogHelper.ManageDesktopShortcuts(UnknownShortcuts); + LoadShortcuts(UnknownShortcuts); + ManualScanFlyout.Hide(); } else { + ManualScanFlyout.Hide(); + Close?.Invoke(this, EventArgs.Empty); + // TODO: Needs no new shorcuts found message await DialogHelper.ManualScanDidNotFoundNewShortcuts(); - await DialogHelper.ManageDesktopShortcuts(); + _ = DialogHelper.ManageDesktopShortcuts(); } } @@ -116,11 +86,10 @@ private void CloseButton_Click(object sender, RoutedEventArgs e) private void YesResetButton_Click(object sender, RoutedEventArgs e) { - foreach (ShortcutEntry shortcut in desktopShortcuts.ToArray()) + foreach (ShortcutEntry shortcut in Shortcuts.ToArray()) { - shortcut.ResetConfiguration(); + shortcut.ResetShortcut(); } - desktopShortcuts.Clear(); ConfirmResetFlyout.Hide(); } @@ -131,13 +100,10 @@ private void NoResetButton_Click(object sender, RoutedEventArgs e) private async void HandleAllDesktop_Checked(object sender, RoutedEventArgs e) { - if (!IgnoreFirstCheck) - { - SaveChangesAndClose(); - await DialogHelper.ConfirmSetDeleteAllShortcutsSetting(); - await DialogHelper.ManageDesktopShortcuts(); - } - IgnoreFirstCheck = false; + SaveChanges(); + Close?.Invoke(this, new()); + await DialogHelper.ConfirmSetDeleteAllShortcutsSetting(); + await DialogHelper.ManageDesktopShortcuts(); } private void HandleAllDesktop_Unchecked(object sender, RoutedEventArgs e) @@ -145,56 +111,59 @@ private void HandleAllDesktop_Unchecked(object sender, RoutedEventArgs e) Settings.Set("RemoveAllDesktopShortcuts", false); } - public void SaveChangesAndClose() + public void SaveChanges() { - Close?.Invoke(this, EventArgs.Empty); - foreach (var shortcut in desktopShortcuts) + foreach (var shortcut in Shortcuts) { - DesktopShortcutsDatabase.AddToDatabase(shortcut.ShortcutPath, shortcut.IsChecked? DesktopShortcutsDatabase.Status.Maintain: DesktopShortcutsDatabase.Status.Delete); + DesktopShortcutsDatabase.AddToDatabase(shortcut.Path, shortcut.IsDeletable? DesktopShortcutsDatabase.Status.Delete: DesktopShortcutsDatabase.Status.Maintain); + DesktopShortcutsDatabase.RemoveFromUnknownShortcuts(shortcut.Path); - if (shortcut.IsChecked && File.Exists(shortcut.ShortcutPath)) + if (shortcut.IsDeletable && File.Exists(shortcut.Path)) { - DesktopShortcutsDatabase.DeleteFromDisk(shortcut.ShortcutPath); + DesktopShortcutsDatabase.DeleteFromDisk(shortcut.Path); } - - DesktopShortcutsDatabase.RemoveFromUnknownShortcuts(shortcut.ShortcutPath); } } } public class ShortcutEntry : INotifyPropertyChanged { - public event EventHandler? OnReset; + public event EventHandler? OnReset; - public string ShortcutPath { get; } - private bool _enabled; - public bool IsChecked + public string Path { get; } + public string Name { get; } + private bool _deletable; + + public bool IsDeletable { - get => _enabled; + get => _deletable; set { - _enabled = value; + _deletable = value; OnPropertyChanged(); } } - public bool ShortcutExists + + public bool ExistsOnDisk { - get => File.Exists(ShortcutPath); + get => File.Exists(Path); } - public ShortcutEntry(string shortcutPath, bool enabled) + public ShortcutEntry(string path, bool isDeletable) { - ShortcutPath = shortcutPath; - IsChecked = enabled; + Path = path; + Name = string.Join('.', path.Split("\\")[^1].Split('.')[..^1]); + IsDeletable = isDeletable; } public void OpenShortcutPath() { - Process.Start("explorer.exe", "/select," + $"\"{ShortcutPath}\""); + Process.Start("explorer.exe", "/select," + $"\"{Path}\""); } - public void ResetConfiguration() + public void ResetShortcut() { + DesktopShortcutsDatabase.AddToDatabase(this.Path, DesktopShortcutsDatabase.Status.Unknown); OnReset?.Invoke(this, EventArgs.Empty); } @@ -204,17 +173,5 @@ protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } - - protected bool SetField(ref T field, T value, [CallerMemberName] string? propertyName = null) - { - if (EqualityComparer.Default.Equals(field, value)) - { - return false; - } - - field = value; - OnPropertyChanged(propertyName); - return true; - } } } diff --git a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs index b7e28f41aa..744d466f52 100644 --- a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs +++ b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs @@ -283,18 +283,19 @@ public static async Task ManageIgnoredUpdates() await Window.ShowDialogAsync(dialog); } - public static async Task ManageDesktopShortcuts(List? NewShortucts = null) + public static async Task ManageDesktopShortcuts(IReadOnlyList? NewShortucts = null) { ContentDialog dialog = DialogFactory.Create(1400, 1000); - DesktopShortcutsManager DesktopShortcutsPage = new(NewShortucts); + DesktopShortcutsManager DesktopShortcutsPage = new(); + DesktopShortcutsPage.LoadShortcuts(NewShortucts ?? DesktopShortcutsDatabase.GetAllShortcuts()); DesktopShortcutsPage.Close += (_, _) => dialog.Hide(); dialog.Title = CoreTools.Translate("Automatic desktop shortcut remover"); dialog.Content = DesktopShortcutsPage; dialog.SecondaryButtonText = CoreTools.Translate("Save and close"); dialog.DefaultButton = ContentDialogButton.None; - dialog.SecondaryButtonClick += (_, _) => DesktopShortcutsPage.SaveChangesAndClose(); + dialog.SecondaryButtonClick += (_, _) => DesktopShortcutsPage.SaveChanges(); await Window.ShowDialogAsync(dialog); } @@ -588,21 +589,12 @@ public static void ShowTelemetryBanner() } - public static async Task ManualScanDidNotFoundNewShortcuts() - { - var dialog = DialogFactory.Create(); - dialog.Title = CoreTools.Translate("Manual scan"); - dialog.Content = CoreTools.Translate("No new shortcuts were found during the scan."); - dialog.CloseButtonText = CoreTools.Translate("Close"); - await Window.ShowDialogAsync(dialog); - } - public static async Task ConfirmSetDeleteAllShortcutsSetting() { var dialog = DialogFactory.Create(); dialog.Title = CoreTools.Translate("Are you sure you want to delete all shortcuts?"); dialog.Content = CoreTools.Translate("Any new shorcuts created during an install or an update operation will be deleted automatically, instead of showing a confirmation prompt the first time they are detected.") - + " " + CoreTools.Translate("Any shorcuts created or modified outside of UniGetUI will be ignored. You will be able to add them via the {0} button", $"{CoreTools.Translate("Manual scan")}") + + " " + CoreTools.Translate("Any shorcuts created or modified outside of UniGetUI will be ignored. You will be able to add them via the {0} button.", $"{CoreTools.Translate("Manual scan")}") + " " + CoreTools.Translate("Are you really sure you want to enable this feature?"); dialog.PrimaryButtonText = CoreTools.Translate("Yes"); dialog.CloseButtonText = CoreTools.Translate("No"); @@ -612,4 +604,14 @@ public static async Task ConfirmSetDeleteAllShortcutsSetting() Settings.Set("RemoveAllDesktopShortcuts", true); } } + + public static async Task ManualScanDidNotFoundNewShortcuts() + { + var dialog = DialogFactory.Create(); + dialog.Title = CoreTools.Translate("Manual scan"); + dialog.Content = CoreTools.Translate("No new shortcuts were found during the scan."); + dialog.PrimaryButtonText = CoreTools.Translate("Ok"); + dialog.DefaultButton = ContentDialogButton.Primary; + await Window.ShowDialogAsync(dialog); + } } From f200b07e45d48f98dd846cd320de4ab94f4ef02b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Wed, 12 Mar 2025 21:58:47 +0100 Subject: [PATCH 19/21] Manual scan is not needed anymore (the dialog loads always all undetected shortcuts) --- .../Packages/Classes/DesktopShortcutsDatabase.cs | 15 ++++++++------- .../Pages/DialogPages/DesktopShortcuts.xaml | 4 ++-- .../Pages/DialogPages/DesktopShortcuts.xaml.cs | 5 ++--- .../Pages/DialogPages/DialogHelper_Generic.cs | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs index ff1266300a..42fbc90e03 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs @@ -153,7 +153,7 @@ public static List GetUnknownShortcuts() /// The shortcuts that already existed public static void HandleNewShortcuts(IReadOnlyList PreviousShortCutList) { - bool DeleteUnknownShortcuts = Settings.Get("DeleteAllNewShortcuts"); + bool DeleteUnknownShortcuts = Settings.Get("RemoveAllDesktopShortcuts"); HashSet PreviousShortcuts = [.. PreviousShortCutList]; List CurrentShortcuts = GetShortcutsOnDisk(); @@ -172,13 +172,14 @@ public static void HandleNewShortcuts(IReadOnlyList PreviousShortCutList } else if (status is Status.Unknown) { - // If a shortcut has not been detected yet, and it - // existed before an operation started, then do nothing. - if(PreviousShortcuts.Contains(shortcut)) - continue; - if (DeleteUnknownShortcuts) - { // If the shortcut was created during an operation + { + // If a shortcut has not been detected yet, and it + // existed before an operation started, then do nothing. + if(PreviousShortcuts.Contains(shortcut)) + continue; + + // If the shortcut was created during an operation // and autodelete is enabled, delete that icon Logger.Warn($"New shortcut {shortcut} will be set for deletion (this shortcut was never seen before)"); AddToDatabase(shortcut, Status.Delete); diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml index 57c2253184..3cc99651ad 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml @@ -29,7 +29,7 @@ VerticalAlignment="Bottom" Orientation="Vertical" Spacing="4"> -