mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 11:48:06 +01:00
[Run][Program]Update icons for MSIX packages on package update (#32428)
* ptrun: update msix package icons on update * extract duplicate code to functions
This commit is contained in:
@@ -29,34 +29,14 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
|
|
||||||
_packageCatalog.PackageInstalling += OnPackageInstalling;
|
_packageCatalog.PackageInstalling += OnPackageInstalling;
|
||||||
_packageCatalog.PackageUninstalling += OnPackageUninstalling;
|
_packageCatalog.PackageUninstalling += OnPackageUninstalling;
|
||||||
|
_packageCatalog.PackageUpdating += OnPackageUpdating;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPackageInstalling(PackageCatalog p, PackageInstallingEventArgs args)
|
public void OnPackageInstalling(PackageCatalog p, PackageInstallingEventArgs args)
|
||||||
{
|
{
|
||||||
if (args.IsComplete)
|
if (args.IsComplete)
|
||||||
{
|
{
|
||||||
try
|
AddPackage(args.Package);
|
||||||
{
|
|
||||||
var packageWrapper = PackageWrapper.GetWrapperFromPackage(args.Package);
|
|
||||||
if (!string.IsNullOrEmpty(packageWrapper.InstalledLocation))
|
|
||||||
{
|
|
||||||
var uwp = new UWP(packageWrapper);
|
|
||||||
uwp.InitializeAppInfo(packageWrapper.InstalledLocation);
|
|
||||||
foreach (var app in uwp.Apps)
|
|
||||||
{
|
|
||||||
app.UpdateLogoPath(_context.API.GetCurrentTheme());
|
|
||||||
Add(app);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// InitializeAppInfo will throw if there is no AppxManifest.xml for the package.
|
|
||||||
// Note there are sometimes multiple packages per product and this doesn't necessarily mean that we haven't found the app.
|
|
||||||
// eg. "Could not find file 'C:\\Program Files\\WindowsApps\\Microsoft.WindowsTerminalPreview_2020.616.45.0_neutral_~_8wekyb3d8bbwe\\AppxManifest.xml'."
|
|
||||||
catch (System.IO.FileNotFoundException e)
|
|
||||||
{
|
|
||||||
ProgramLogger.Exception(e.Message, e, GetType(), args.Package.InstalledLocation.ToString());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,16 +44,62 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
{
|
{
|
||||||
if (args.Progress == 0)
|
if (args.Progress == 0)
|
||||||
{
|
{
|
||||||
// find apps associated with this package.
|
RemovePackage(args.Package);
|
||||||
var packageWrapper = PackageWrapper.GetWrapperFromPackage(args.Package);
|
}
|
||||||
var uwp = new UWP(packageWrapper);
|
}
|
||||||
var apps = Items.Where(a => a.Package.Equals(uwp)).ToArray();
|
|
||||||
|
|
||||||
foreach (var app in apps)
|
public void OnPackageUpdating(PackageCatalog p, PackageUpdatingEventArgs args)
|
||||||
|
{
|
||||||
|
if (args.Progress == 0)
|
||||||
|
{
|
||||||
|
RemovePackage(args.SourcePackage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.IsComplete)
|
||||||
|
{
|
||||||
|
AddPackage(args.TargetPackage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddPackage(Package package)
|
||||||
|
{
|
||||||
|
var packageWrapper = PackageWrapper.GetWrapperFromPackage(package);
|
||||||
|
if (string.IsNullOrEmpty(packageWrapper.InstalledLocation))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var uwp = new UWP(packageWrapper);
|
||||||
|
uwp.InitializeAppInfo(packageWrapper.InstalledLocation);
|
||||||
|
foreach (var app in uwp.Apps)
|
||||||
{
|
{
|
||||||
Remove(app);
|
app.UpdateLogoPath(_context.API.GetCurrentTheme());
|
||||||
|
Add(app);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// InitializeAppInfo will throw if there is no AppxManifest.xml for the package.
|
||||||
|
// Note there are sometimes multiple packages per product and this doesn't necessarily mean that we haven't found the app.
|
||||||
|
// eg. "Could not find file 'C:\\Program Files\\WindowsApps\\Microsoft.WindowsTerminalPreview_2020.616.45.0_neutral_~_8wekyb3d8bbwe\\AppxManifest.xml'."
|
||||||
|
catch (System.IO.FileNotFoundException e)
|
||||||
|
{
|
||||||
|
ProgramLogger.Exception(e.Message, e, GetType(), package.InstalledLocation.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RemovePackage(Package package)
|
||||||
|
{
|
||||||
|
// find apps associated with this package.
|
||||||
|
var packageWrapper = PackageWrapper.GetWrapperFromPackage(package);
|
||||||
|
var uwp = new UWP(packageWrapper);
|
||||||
|
var apps = Items.Where(a => a.Package.Equals(uwp)).ToArray();
|
||||||
|
|
||||||
|
foreach (var app in apps)
|
||||||
|
{
|
||||||
|
Remove(app);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void IndexPrograms()
|
public void IndexPrograms()
|
||||||
|
|||||||
Reference in New Issue
Block a user