Skip to content

Commit 80eb0e4

Browse files
committed
Reset Cache and rewrite uwp detection logic
1 parent 87e7ff5 commit 80eb0e4

File tree

2 files changed

+34
-17
lines changed

2 files changed

+34
-17
lines changed

Plugins/Flow.Launcher.Plugin.Program/Main.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ public static void IndexWin32Programs()
116116
{
117117
var win32S = Win32.All(_settings);
118118
_win32s = win32S;
119+
ResetCache();
119120
}
120121

121122
public static void IndexUwpPrograms()
@@ -126,14 +127,14 @@ public static void IndexUwpPrograms()
126127
{
127128
};
128129
_uwps = applications;
130+
ResetCache();
129131
}
130132

131133
public static async Task IndexPrograms()
132134
{
133135
var t1 = Task.Run(IndexWin32Programs);
134136
var t2 = Task.Run(IndexUwpPrograms);
135137
await Task.WhenAll(t1, t2).ConfigureAwait(false);
136-
ResetCache();
137138
_settings.LastIndexTime = DateTime.Today;
138139
}
139140

@@ -235,7 +236,6 @@ public async Task ReloadDataAsync()
235236
public void Dispose()
236237
{
237238
Win32.Dispose();
238-
UWP.Dispose();
239239
}
240240
}
241241
}

Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using Flow.Launcher.Plugin.SharedModels;
2020
using Flow.Launcher.Infrastructure.Logger;
2121
using System.Runtime.Versioning;
22+
using System.Threading.Channels;
2223

2324
namespace Flow.Launcher.Plugin.Program.Programs
2425
{
@@ -163,8 +164,10 @@ public static Application[] All()
163164
catch (Exception e)
164165
{
165166
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+
};
168171
}
169172
#endif
170173
#if DEBUG //make developer aware and implement handling
@@ -239,15 +242,37 @@ private static IEnumerable<Package> CurrentUserPackages()
239242
}
240243
}
241244

242-
private static List<FileSystemWatcher> _watchers = new();
245+
private static Channel<byte> PackageChangeChannel = Channel.CreateBounded<byte>(1);
243246

244-
public static void WatchPackageChange()
247+
public static async Task WatchPackageChange()
245248
{
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) =>
248258
{
249-
Task.Delay(10000).ContinueWith(t => Main.IndexUwpPrograms());
259+
if (args.IsComplete)
260+
PackageChangeChannel.Writer.TryWrite(default);
250261
};
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+
}
251276
}
252277

253278
public override string ToString()
@@ -750,14 +775,6 @@ public override string ToString()
750775
}
751776
}
752777

753-
public static void Dispose()
754-
{
755-
foreach (var fileSystemWatcher in _watchers)
756-
{
757-
fileSystemWatcher.Dispose();
758-
}
759-
}
760-
761778
public enum PackageVersion
762779
{
763780
Windows10,

0 commit comments

Comments
 (0)