[PowerToys Run] Windows Terminal plugin: Improve query speed (#15836)

* Change code to query aumid

* update comment

* update aumid on package update

* fix tetx position

* Write AUMID as static values in code

* code style
This commit is contained in:
Heiko
2022-02-04 17:57:37 +01:00
committed by GitHub
parent 314425e32e
commit 2a34cf740b

View File

@@ -4,25 +4,25 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Security.Principal; using System.Security.Principal;
using System.Threading;
using Windows.Foundation;
using Windows.Management.Deployment; using Windows.Management.Deployment;
namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Helpers namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Helpers
{ {
public class TerminalQuery : ITerminalQuery public class TerminalQuery : ITerminalQuery
{ {
private readonly PackageManager _packageManager; /// Static list of all Windows Terminal packages. As key we use the app name and in the value we save the AUMID of each package.
/// AUMID = ApplicationUserModelId: This is an identifier id for the app. The syntax is '<PackageFamilyName>!App'.
private static ReadOnlyCollection<string> Packages => new List<string> /// The AUMID of an AppX package will never change. (https://github.com/microsoft/PowerToys/pull/15836#issuecomment-1025204301)
private static readonly IReadOnlyDictionary<string, string> Packages = new Dictionary<string, string>()
{ {
"Microsoft.WindowsTerminal", { "Microsoft.WindowsTerminal", "Microsoft.WindowsTerminal_8wekyb3d8bbwe!App" },
"Microsoft.WindowsTerminalPreview", { "Microsoft.WindowsTerminalPreview", "Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe!App" },
}.AsReadOnly(); };
private readonly PackageManager _packageManager;
private IEnumerable<TerminalPackage> Terminals => GetTerminals(); private IEnumerable<TerminalPackage> Terminals => GetTerminals();
@@ -54,19 +54,13 @@ namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Helpers
var user = WindowsIdentity.GetCurrent().User; var user = WindowsIdentity.GetCurrent().User;
var localAppDataPath = Environment.GetEnvironmentVariable("LOCALAPPDATA"); var localAppDataPath = Environment.GetEnvironmentVariable("LOCALAPPDATA");
foreach (var p in _packageManager.FindPackagesForUser(user.Value).Where(p => Packages.Contains(p.Id.Name))) foreach (var p in _packageManager.FindPackagesForUser(user.Value).Where(p => Packages.Keys.Contains(p.Id.Name)))
{ {
var appListEntries = p.GetAppListEntriesAsync(); var aumid = Packages[p.Id.Name];
while (appListEntries.Status != AsyncStatus.Completed)
{
Thread.Sleep(100);
}
var aumid = appListEntries.GetResults().Single().AppUserModelId;
var version = new Version(p.Id.Version.Major, p.Id.Version.Minor, p.Id.Version.Build, p.Id.Version.Revision); var version = new Version(p.Id.Version.Major, p.Id.Version.Minor, p.Id.Version.Build, p.Id.Version.Revision);
var settingsPath = Path.Combine(localAppDataPath, "Packages", p.Id.FamilyName, "LocalState", "settings.json"); var settingsPath = Path.Combine(localAppDataPath, "Packages", p.Id.FamilyName, "LocalState", "settings.json");
yield return new TerminalPackage(aumid, version, p.DisplayName, settingsPath, p.Logo.LocalPath); yield return new TerminalPackage(aumid, version, p.DisplayName, settingsPath, p.Logo.LocalPath);
} }
} }
} }
} }