|
19 | 19 | using Flow.Launcher.Plugin.SharedModels;
|
20 | 20 | using Flow.Launcher.Infrastructure.Logger;
|
21 | 21 | using System.Runtime.Versioning;
|
| 22 | +using System.Threading.Channels; |
22 | 23 |
|
23 | 24 | namespace Flow.Launcher.Plugin.Program.Programs
|
24 | 25 | {
|
@@ -163,8 +164,10 @@ public static Application[] All()
|
163 | 164 | catch (Exception e)
|
164 | 165 | {
|
165 | 166 | ProgramLogger.LogException($"|UWP|All|{p.InstalledLocation}|An unexpected error occured and "
|
166 |
| - + $"unable to convert Package to UWP for {p.Id.FullName}", e); |
167 |
| - return new Application[] { }; |
| 167 | + + $"unable to convert Package to UWP for {p.Id.FullName}", e); |
| 168 | + return new Application[] |
| 169 | + { |
| 170 | + }; |
168 | 171 | }
|
169 | 172 | #endif
|
170 | 173 | #if DEBUG //make developer aware and implement handling
|
@@ -239,15 +242,37 @@ private static IEnumerable<Package> CurrentUserPackages()
|
239 | 242 | }
|
240 | 243 | }
|
241 | 244 |
|
242 |
| - private static List<FileSystemWatcher> _watchers = new(); |
| 245 | + private static Channel<byte> PackageChangeChannel = Channel.CreateBounded<byte>(1); |
243 | 246 |
|
244 |
| - public static void WatchPackageChange() |
| 247 | + public static async Task WatchPackageChange() |
245 | 248 | {
|
246 |
| - if (Environment.OSVersion.Version.Build >= 19041) |
247 |
| - PackageCatalog.OpenForCurrentUser().PackageStatusChanged += (_, _) => |
| 249 | + if (Environment.OSVersion.Version.Major >= 10) |
| 250 | + { |
| 251 | + var catalog = PackageCatalog.OpenForCurrentUser(); |
| 252 | + catalog.PackageInstalling += (_, args) => |
| 253 | + { |
| 254 | + if (args.IsComplete) |
| 255 | + PackageChangeChannel.Writer.TryWrite(default); |
| 256 | + }; |
| 257 | + catalog.PackageUninstalling += (_, args) => |
248 | 258 | {
|
249 |
| - Task.Delay(10000).ContinueWith(t => Main.IndexUwpPrograms()); |
| 259 | + if (args.IsComplete) |
| 260 | + PackageChangeChannel.Writer.TryWrite(default); |
250 | 261 | };
|
| 262 | + catalog.PackageUpdating += (_, args) => |
| 263 | + { |
| 264 | + if (args.IsComplete) |
| 265 | + PackageChangeChannel.Writer.TryWrite(default); |
| 266 | + }; |
| 267 | + |
| 268 | + while (await PackageChangeChannel.Reader.WaitToReadAsync().ConfigureAwait(false)) |
| 269 | + { |
| 270 | + await Task.Delay(3000).ConfigureAwait(false); |
| 271 | + PackageChangeChannel.Reader.TryRead(out _); |
| 272 | + await Task.Run(Main.IndexUwpPrograms); |
| 273 | + } |
| 274 | + |
| 275 | + } |
251 | 276 | }
|
252 | 277 |
|
253 | 278 | public override string ToString()
|
@@ -750,14 +775,6 @@ public override string ToString()
|
750 | 775 | }
|
751 | 776 | }
|
752 | 777 |
|
753 |
| - public static void Dispose() |
754 |
| - { |
755 |
| - foreach (var fileSystemWatcher in _watchers) |
756 |
| - { |
757 |
| - fileSystemWatcher.Dispose(); |
758 |
| - } |
759 |
| - } |
760 |
| - |
761 | 778 | public enum PackageVersion
|
762 | 779 | {
|
763 | 780 | Windows10,
|
|
0 commit comments