Skip to content

Commit 49e1165

Browse files
authored
Merge pull request #3597 from marticliment/better-filtering-and-package-updating
2 parents 93bf00d + afc5273 commit 49e1165

11 files changed

Lines changed: 231 additions & 148 deletions

File tree

src/UniGetUI.Core.Classes/SortableObservableCollection.cs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,21 @@ public class SortableObservableCollection<T> : ObservableCollection<T> where T :
1414

1515
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
1616
{
17-
if (!BlockSorting)
18-
{
19-
base.OnCollectionChanged(e);
20-
if (SortingSelector is null
21-
|| e.Action == NotifyCollectionChangedAction.Remove
22-
|| e.Action == NotifyCollectionChangedAction.Reset)
23-
{
24-
return;
25-
}
26-
27-
Sort();
28-
}
17+
if (BlockSorting)
18+
return;
19+
20+
base.OnCollectionChanged(e);
21+
if (SortingSelector is null || e.Action is NotifyCollectionChangedAction.Remove or NotifyCollectionChangedAction.Reset)
22+
return;
23+
24+
Sort();
2925
}
3026

3127
public void Sort()
3228
{
29+
if (BlockSorting)
30+
return;
31+
3332
BlockSorting = true;
3433

3534
if (SortingSelector is null)
@@ -45,7 +44,7 @@ public void Sort()
4544

4645
for (int i = 0; i < Count; i++)
4746
{
48-
this[i].Index = i;
47+
this.ElementAt(i).Index = i;
4948
}
5049

5150
BlockSorting = false;

src/UniGetUI.Core.LanguageEngine/Assets/Data/LanguagesReference.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"es": "Spanish - Castellano",
1515
"fa": "Persian - فارسی‎",
1616
"fi": "Finnish - Suomi",
17+
"fil": "Filipino - Filipino",
1718
"fr": "French - Français",
1819
"gu": "Gujarati - ગુજરાતી",
1920
"hi": "Hindi - हिंदी",

src/UniGetUI.Core.Tools/Tools.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ public static string RandomString(int length)
209209

210210
public static void ReportFatalException(Exception e)
211211
{
212+
Debugger.Break();
212213
string LangName = "Unknown";
213214
try
214215
{

src/UniGetUI.PackageEngine.PackageLoader/AbstractPackageLoader.cs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,20 @@
44

55
namespace UniGetUI.PackageEngine.PackageLoader
66
{
7+
public class PackagesChangedEvent
8+
{
9+
public PackagesChangedEvent(bool proceduralChange, IReadOnlyList<IPackage> addedPackages, IReadOnlyList<IPackage> removedPackages)
10+
{
11+
ProceduralChange = proceduralChange;
12+
AddedPackages = addedPackages;
13+
RemovedPackages = removedPackages;
14+
}
15+
16+
public readonly bool ProceduralChange;
17+
public readonly IReadOnlyList<IPackage> AddedPackages;
18+
public readonly IReadOnlyList<IPackage> RemovedPackages;
19+
}
20+
721
public abstract class AbstractPackageLoader
822
{
923
/// <summary>
@@ -34,7 +48,7 @@ public List<IPackage> Packages
3448
/// <summary>
3549
/// Fires when a block of packages (one package or more) is added or removed to the loader
3650
/// </summary>
37-
public event EventHandler<EventArgs>? PackagesChanged;
51+
public event EventHandler<PackagesChangedEvent>? PackagesChanged;
3852

3953
/// <summary>
4054
/// Fires when the loader finishes fetching packages
@@ -85,9 +99,9 @@ public void StopLoading(bool emitFinishSignal = true)
8599
if (emitFinishSignal) InvokeFinishedLoadingEvent();
86100
}
87101

88-
protected void InvokePackagesChangedEvent()
102+
protected void InvokePackagesChangedEvent(bool proceduralChange, IReadOnlyList<IPackage> toAdd, IReadOnlyList<IPackage> toRemove)
89103
{
90-
PackagesChanged?.Invoke(this, EventArgs.Empty);
104+
PackagesChanged?.Invoke(this, new(proceduralChange, toAdd, toRemove));
91105
}
92106

93107
protected void InvokeStartedLoadingEvent()
@@ -107,7 +121,7 @@ public virtual async Task ReloadPackages()
107121
{
108122
if (DISABLE_RELOAD)
109123
{
110-
InvokePackagesChangedEvent();
124+
InvokePackagesChangedEvent(false, [], []);
111125
return;
112126
}
113127

@@ -156,7 +170,7 @@ public virtual async Task ReloadPackages()
156170
AddPackage(package);
157171
await WhenAddingPackage(package);
158172
}
159-
InvokePackagesChangedEvent();
173+
InvokePackagesChangedEvent(true, task.Result.ToArray(), []);
160174
}
161175
tasks.Remove(task);
162176
}
@@ -180,7 +194,7 @@ public void ClearPackages(bool emitFinishSignal = true)
180194
PackageReference.Clear();
181195
IsLoaded = false;
182196
IsLoading = false;
183-
InvokePackagesChangedEvent();
197+
InvokePackagesChangedEvent(false, [], []);
184198
}
185199

186200
/// <summary>
@@ -245,7 +259,7 @@ public void AddForeign(IPackage? package)
245259
}
246260

247261
AddPackage(package);
248-
InvokePackagesChangedEvent();
262+
InvokePackagesChangedEvent(true, [package], []);
249263
}
250264

251265
/// <summary>
@@ -264,7 +278,7 @@ public void Remove(IPackage? package)
264278
}
265279

266280
PackageReference.Remove(HashPackage(package), out IPackage? _);
267-
InvokePackagesChangedEvent();
281+
InvokePackagesChangedEvent(true, [], [package]);
268282
}
269283

270284
/// <summary>

src/UniGetUI.PackageEngine.PackageLoader/InstalledPackagesLoader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public async Task ReloadPackagesSilently()
8282
await WhenAddingPackage(package);
8383
}
8484
}
85-
InvokePackagesChangedEvent();
85+
InvokePackagesChangedEvent(true, task.Result.ToArray(), []);
8686
}
8787
tasks.Remove(task);
8888
}

src/UniGetUI.PackageEngine.PackageLoader/PackageBundlesLoader.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public async Task AddPackagesAsync(IReadOnlyList<IPackage> foreign_packages)
7373
}
7474
if (package is not null && !Contains(package)) AddPackage(package);
7575
}
76-
InvokePackagesChangedEvent();
76+
InvokePackagesChangedEvent(true, foreign_packages, []);
7777
}
7878

7979
public void RemoveRange(IReadOnlyList<IPackage> packages)
@@ -83,7 +83,7 @@ public void RemoveRange(IReadOnlyList<IPackage> packages)
8383
if (!Contains(package)) continue;
8484
PackageReference.Remove(HashPackage(package), out IPackage? _);
8585
}
86-
InvokePackagesChangedEvent();
86+
InvokePackagesChangedEvent(true, [], packages);
8787
}
8888
}
8989
}

src/UniGetUI/CLIHandler.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public static class CLIHandler
88
public const string HELP = "--help";
99
public const string DAEMON = "--daemon";
1010
public const string MIGRATE_WINGETUI_TO_UNIGETUI = "--migrate-wingetui-to-unigetui";
11+
public const string UNINSTALL_WINGETUI = "--uninstall-wingetui";
12+
public const string UNINSTALL_UNIGETUI = "--uninstall-unigetui";
1113

1214
public const string IMPORT_SETTINGS = "--import-settings";
1315
public const string EXPORT_SETTINGS = "--export-settings";
@@ -221,4 +223,10 @@ public static int WingetUIToUniGetUIMigrator()
221223
return ex.HResult;
222224
}
223225
}
226+
227+
public static int UninstallUniGetUI()
228+
{
229+
// There is currently no uninstall logic. However, this needs to be maintained, or otherwhise UniGetUI will launch on uninstall
230+
return 0;
231+
}
224232
}

src/UniGetUI/Controls/ObservablePackageCollection.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using UniGetUI.Core.Classes;
2-
using UniGetUI.Interface;
32
using UniGetUI.PackageEngine.Interfaces;
43

54
namespace UniGetUI.PackageEngine.PackageClasses
@@ -26,14 +25,22 @@ public ObservablePackageCollection()
2625
SortingSelector = x => x.Package.Name;
2726
}
2827

29-
/// <summary>
30-
/// Add a package to the collection
31-
/// </summary>
32-
public void Add(IPackage p, AbstractPackagesPage page)
28+
public void FromRange(IReadOnlyList<PackageWrapper> packages)
3329
{
34-
base.Add(new PackageWrapper(p, page));
30+
BlockSorting = true;
31+
32+
// Clear the list
33+
Clear();
34+
35+
// Add all packages
36+
foreach (var w in packages)
37+
Add(w);
38+
39+
BlockSorting = false;
40+
Sort();
3541
}
3642

43+
3744
/// <summary>
3845
/// Sets the property with which to filter the package and sorts the collection
3946
/// </summary>
@@ -120,7 +127,7 @@ public void SelectAll()
120127
{
121128
foreach (PackageWrapper wrapper in this)
122129
{
123-
wrapper.Package.IsChecked = true;
130+
wrapper.IsChecked = true;
124131
}
125132
}
126133

@@ -131,7 +138,7 @@ public void ClearSelection()
131138
{
132139
foreach (PackageWrapper wrapper in this)
133140
{
134-
wrapper.Package.IsChecked = false;
141+
wrapper.IsChecked = false;
135142
}
136143
}
137144
}

src/UniGetUI/Controls/PackageWrapper.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@ public static void ResetIconCache()
2727
public bool IsChecked
2828
{
2929
get => Package.IsChecked;
30-
set => Package.IsChecked = value;
30+
set
31+
{
32+
Package.IsChecked = value;
33+
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsChecked)));
34+
}
3135
}
3236

3337
public bool IconWasLoaded;

src/UniGetUI/EntryPoint.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ private static void Main(string[] args)
2424
int ret = CLIHandler.WingetUIToUniGetUIMigrator();
2525
Environment.Exit(ret);
2626
}
27+
else if (args.Contains(CLIHandler.UNINSTALL_UNIGETUI) || args.Contains(CLIHandler.UNINSTALL_WINGETUI))
28+
{
29+
int ret = CLIHandler.UninstallUniGetUI();
30+
Environment.Exit(ret);
31+
}
2732
else if (args.Contains(CLIHandler.IMPORT_SETTINGS))
2833
{
2934
int ret = CLIHandler.ImportSettings();

0 commit comments

Comments
 (0)