Skip to content

Commit 65cb379

Browse files
authored
Merge pull request #4073 from marticliment/fix-import-tree,-and-delete-redundant-PackageCacher
2 parents e4634c0 + 5a0bf01 commit 65cb379

File tree

16 files changed

+137
-229
lines changed

16 files changed

+137
-229
lines changed

src/Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<TargetPlatformMinVersion>10.0.19041.0</TargetPlatformMinVersion>
66
<!-- IF BUILD FAILS DUE TO MISSING Microsoft.Management.Deployment NAMESPACE,
77
TOGGLE THE LAST NUMBER OF THE LINE BELOW 1 UNIT UP OR DOWN, AND REBUILD-->
8-
<WindowsSdkPackageVersion>10.0.26100.57</WindowsSdkPackageVersion>
8+
<WindowsSdkPackageVersion>10.0.26100.56</WindowsSdkPackageVersion>
99

1010
<SdkVersion>8.0.407</SdkVersion>
1111
<Authors>Martí Climent and the contributors</Authors>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"si": "Sinhala - සිංහල",
4949
"sl": "Slovene - Slovenščina",
5050
"sv": "Swedish - Svenska",
51+
"ta": "Tamil - தமிழ்",
5152
"tg": "Tagalog - Tagalog",
5253
"th": "Thai - ภาษาไทย",
5354
"tr": "Turkish - Türkçe",

src/UniGetUI.PAckageEngine.Interfaces/IPackage.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using UniGetUI.Core.Tools;
33
using UniGetUI.Interface.Enums;
44
using UniGetUI.PackageEngine.Classes.Serializable;
5+
using UniGetUI.PackageEngine.Serializable;
56
using UniGetUI.PackageEngine.Structs;
67

78
namespace UniGetUI.PackageEngine.Interfaces
@@ -118,7 +119,7 @@ public interface IPackage : INotifyPropertyChanged, IEquatable<IPackage>
118119
/// Returns the corresponding installed Package object. Will return null if not applicable
119120
/// </summary>
120121
/// <returns>a Package object if found, null if not</returns>
121-
public IPackage? GetInstalledPackage();
122+
public IReadOnlyList<IPackage> GetInstalledPackages();
122123

123124
/// <summary>
124125
/// Returns the corresponding available Package object. Will return null if not applicable
@@ -155,6 +156,12 @@ public interface IPackage : INotifyPropertyChanged, IEquatable<IPackage>
155156
/// <returns>False if the update is a major update or the update doesn't exist, true if it's a minor update</returns>
156157
public bool IsUpdateMinor();
157158

159+
/// <summary>
160+
/// Gets the applicable install options for this package
161+
/// </summary>
162+
/// <returns>The package install options, or, if not overriden, the manager install options</returns>
163+
public Task<InstallOptions> GetInstallOptions();
164+
158165
public Task<SerializablePackage> AsSerializableAsync();
159166

160167
public SerializableIncompatiblePackage AsSerializable_Incompatible();

src/UniGetUI.PackageEngine.Operations/PackageOperations.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,11 @@ protected override Task HandleFailure()
263263
protected override async Task HandleSuccess()
264264
{
265265
Package.SetTag(PackageTag.Default);
266-
Package.GetInstalledPackage()?.SetTag(PackageTag.Default);
267266
Package.GetAvailablePackage()?.SetTag(PackageTag.AlreadyInstalled);
268267

268+
foreach (var p in Package.GetInstalledPackages())
269+
p.SetTag(PackageTag.Default);
270+
269271
UpgradablePackagesLoader.Instance.Remove(Package);
270272

271273
if (Settings.Get(Settings.K.AskToDeleteNewDesktopShortcuts))

src/UniGetUI.PackageEngine.PackageEngine/PEInterface.cs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using UniGetUI.PackageEngine.Managers.ScoopManager;
1111
using UniGetUI.PackageEngine.Managers.WingetManager;
1212
using UniGetUI.PackageEngine.Managers.VcpkgManager;
13+
using UniGetUI.PackageEngine.PackageClasses;
1314
using UniGetUI.PackageEngine.PackageLoader;
1415

1516
namespace UniGetUI.PackageEngine
@@ -74,4 +75,58 @@ public static void Initialize()
7475
}
7576
}
7677
}
78+
79+
80+
81+
82+
public class PackageBundlesLoader : PackageBundlesLoader_A
83+
{
84+
public PackageBundlesLoader(IReadOnlyList<IPackageManager> managers): base(managers)
85+
{
86+
}
87+
88+
public override async Task AddPackagesAsync(IReadOnlyList<IPackage> foreign_packages)
89+
{
90+
List<IPackage> added = new();
91+
foreach (IPackage foreign in foreign_packages)
92+
{
93+
IPackage? package = null;
94+
95+
if (foreign is not ImportedPackage && foreign is Package native)
96+
{
97+
if (native.Source.IsVirtualManager)
98+
{
99+
Logger.Debug($"Adding native package with id={native.Id} to bundle as an INVALID package...");
100+
package = new InvalidImportedPackage(native.AsSerializable_Incompatible(), NullSource.Instance);
101+
}
102+
else
103+
{
104+
Logger.Debug($"Adding native package with id={native.Id} to bundle as a VALID package...");
105+
package = new ImportedPackage(await native.AsSerializableAsync(), native.Manager, native.Source);
106+
}
107+
}
108+
else if (foreign is ImportedPackage imported)
109+
{
110+
Logger.Debug($"Adding loaded imported package with id={imported.Id} to bundle...");
111+
package = imported;
112+
}
113+
else if (foreign is InvalidImportedPackage invalid)
114+
{
115+
Logger.Debug($"Adding loaded incompatible package with id={invalid.Id} to bundle...");
116+
package = invalid;
117+
}
118+
else
119+
{
120+
Logger.Error($"An IPackage instance id={foreign.Id} did not match the types Package, ImportedPackage or InvalidImportedPackage. This should never be the case");
121+
}
122+
123+
if (package is not null)
124+
{ // Here, AddForeign is not used so a single PackagesChangedEvent can be invoked.
125+
await AddPackage(package);
126+
added.Add(package);
127+
}
128+
}
129+
InvokePackagesChangedEvent(true, added, []);
130+
}
131+
}
77132
}

src/UniGetUI.PackageEngine.PackageLoader/DiscoverablePackagesLoader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ protected override Task WhenAddingPackage(IPackage package)
6060
{
6161
package.SetTag(PackageTag.IsUpgradable);
6262
}
63-
else if (package.GetInstalledPackage() is not null)
63+
else if (package.GetInstalledPackages().Any())
6464
{
6565
package.SetTag(PackageTag.AlreadyInstalled);
6666
}

src/UniGetUI.PackageEngine.PackageLoader/PackageBundlesLoader.cs

Lines changed: 8 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
using UniGetUI.Core.Logging;
21
using UniGetUI.Interface.Enums;
32
using UniGetUI.PackageEngine.Interfaces;
4-
using UniGetUI.PackageEngine.PackageClasses;
53

64
namespace UniGetUI.PackageEngine.PackageLoader
75
{
8-
public class PackageBundlesLoader : AbstractPackageLoader
6+
public abstract class PackageBundlesLoader_A : AbstractPackageLoader
97
{
10-
public static PackageBundlesLoader Instance = null!;
8+
public static PackageBundlesLoader_A Instance = null!;
119

12-
public PackageBundlesLoader(IReadOnlyList<IPackageManager> managers)
10+
public PackageBundlesLoader_A(IReadOnlyList<IPackageManager> managers)
1311
: base(managers,
1412
identifier: "PACKAGE_BUNDLES",
1513
AllowMultiplePackageVersions: true,
@@ -44,49 +42,11 @@ protected override Task WhenAddingPackage(IPackage package)
4442
return Task.CompletedTask;
4543
}
4644

47-
public async Task AddPackagesAsync(IReadOnlyList<IPackage> foreign_packages)
48-
{
49-
List<IPackage> added = new();
50-
foreach (IPackage foreign in foreign_packages)
51-
{
52-
IPackage? package = null;
53-
54-
if (foreign is not ImportedPackage && foreign is Package native)
55-
{
56-
if (native.Source.IsVirtualManager)
57-
{
58-
Logger.Debug($"Adding native package with id={native.Id} to bundle as an INVALID package...");
59-
package = new InvalidImportedPackage(native.AsSerializable_Incompatible(), NullSource.Instance);
60-
}
61-
else
62-
{
63-
Logger.Debug($"Adding native package with id={native.Id} to bundle as a VALID package...");
64-
package = new ImportedPackage(await native.AsSerializableAsync(), native.Manager, native.Source);
65-
}
66-
}
67-
else if (foreign is ImportedPackage imported)
68-
{
69-
Logger.Debug($"Adding loaded imported package with id={imported.Id} to bundle...");
70-
package = imported;
71-
}
72-
else if (foreign is InvalidImportedPackage invalid)
73-
{
74-
Logger.Debug($"Adding loaded incompatible package with id={invalid.Id} to bundle...");
75-
package = invalid;
76-
}
77-
else
78-
{
79-
Logger.Error($"An IPackage instance id={foreign.Id} did not match the types Package, ImportedPackage or InvalidImportedPackage. This should never be the case");
80-
}
81-
82-
if (package is not null)
83-
{ // Here, AddForeign is not used so a single PackagesChangedEvent can be invoked.
84-
await AddPackage(package);
85-
added.Add(package);
86-
}
87-
}
88-
InvokePackagesChangedEvent(true, added, []);
89-
}
45+
/*
46+
* This method required access to the Package, ImportedPackage and InvalidPackage classes,
47+
* but they are not defined here yet. This class will be inherited on PEInterface, with the missing member
48+
*/
49+
public abstract Task AddPackagesAsync(IReadOnlyList<IPackage> foreign_packages);
9050

9151
public void RemoveRange(IReadOnlyList<IPackage> packages)
9252
{
Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,16 @@
11
<Project Sdk="Microsoft.NET.Sdk">
2-
3-
2+
43
<ItemGroup>
54
<ProjectReference Include="..\UniGetUI.Core.Classes\UniGetUI.Core.Classes.csproj" />
65
<ProjectReference Include="..\UniGetUI.Core.Data\UniGetUI.Core.Data.csproj" />
76
<ProjectReference Include="..\UniGetUI.Core.Logger\UniGetUI.Core.Logging.csproj" />
87
<ProjectReference Include="..\UniGetUI.Core.Settings\UniGetUI.Core.Settings.csproj" />
98
<ProjectReference Include="..\UniGetUI.Core.Tools\UniGetUI.Core.Tools.csproj" />
109
<ProjectReference Include="..\UniGetUI.PackageEngine.Enums\UniGetUI.PackageEngine.Structs.csproj" />
11-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Cargo\UniGetUI.PackageEngine.Managers.Cargo.csproj" />
12-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Chocolatey\UniGetUI.PackageEngine.Managers.Chocolatey.csproj" />
13-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Dotnet\UniGetUI.PackageEngine.Managers.Dotnet.csproj" />
14-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Generic.NuGet\UniGetUI.PackageEngine.Managers.Generic.NuGet.csproj" />
15-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Npm\UniGetUI.PackageEngine.Managers.Npm.csproj" />
16-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Pip\UniGetUI.PackageEngine.Managers.Pip.csproj" />
17-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.PowerShell\UniGetUI.PackageEngine.Managers.PowerShell.csproj" />
18-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Scoop\UniGetUI.PackageEngine.Managers.Scoop.csproj" />
19-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.WinGet\UniGetUI.PackageEngine.Managers.WinGet.csproj" />
20-
<ProjectReference Include="..\UniGetUI.PackageEngine.PackageManagerClasses\UniGetUI.PackageEngine.Classes.csproj" />
10+
<ProjectReference Include="..\UniGetUI.PAckageEngine.Interfaces\UniGetUI.PackageEngine.Interfaces.csproj" />
2111
</ItemGroup>
2212

2313
<ItemGroup>
2414
<Compile Include="..\SharedAssemblyInfo.cs" Link="SharedAssemblyInfo.cs" />
2515
</ItemGroup>
26-
27-
<ItemGroup>
28-
<PackageReference Include="PhotoSauce.MagicScaler" Version="0.15.0" />
29-
</ItemGroup>
3016
</Project>

src/UniGetUI.PackageEngine.PackageLoader/UpgradablePackagesLoader.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using UniGetUI.Core.SettingsEngine;
44
using UniGetUI.Interface.Enums;
55
using UniGetUI.PackageEngine.Interfaces;
6-
using UniGetUI.PackageEngine.PackageClasses;
76

87
namespace UniGetUI.PackageEngine.PackageLoader
98
{
@@ -31,18 +30,24 @@ public UpgradablePackagesLoader(IReadOnlyList<IPackageManager> managers)
3130

3231
protected override async Task<bool> IsPackageValid(IPackage package)
3332
{
34-
if (package.VersionString == package.NewVersionString) return false;
35-
if (await package.HasUpdatesIgnoredAsync(package.NewVersionString))
33+
if (package.VersionString == package.NewVersionString)
34+
return false;
35+
36+
if (package.NewerVersionIsInstalled())
37+
return false;
38+
39+
if (package.IsUpdateMinor() && (await package.GetInstallOptions()).SkipMinorUpdates)
3640
{
37-
IgnoredPackages[package.Id] = package;
41+
Logger.Info($"Ignoring package {package.Id} because it is a minor update ({package.VersionString} -> {package.NewVersionString}) and SkipMinorUpdates is set to true.");
3842
return false;
3943
}
40-
if ((await InstallOptionsFactory.LoadApplicableAsync(package)).SkipMinorUpdates && package.IsUpdateMinor())
44+
45+
if (await package.HasUpdatesIgnoredAsync(package.NewVersionString))
4146
{
42-
Logger.Info($"Ignoring package {package.Id} because it is a minor update ({package.VersionString} -> {package.NewVersionString}) and SkipMinorUpdates is set to true.");
47+
IgnoredPackages[package.Id] = package;
4348
return false;
4449
}
45-
if (package.NewerVersionIsInstalled()) return false;
50+
4651
return true;
4752
}
4853

@@ -53,7 +58,9 @@ protected override IReadOnlyList<IPackage> LoadPackagesFromManager(IPackageManag
5358
protected override Task WhenAddingPackage(IPackage package)
5459
{
5560
package.GetAvailablePackage()?.SetTag(PackageTag.IsUpgradable);
56-
package.GetInstalledPackage()?.SetTag(PackageTag.IsUpgradable);
61+
62+
foreach(var p in package.GetInstalledPackages())
63+
p.SetTag(PackageTag.IsUpgradable);
5764

5865
return Task.CompletedTask;
5966
}

src/UniGetUI.PackageEngine.PackageManagerClasses/Manager/PackageManager.cs

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -213,13 +213,8 @@ private IReadOnlyList<IPackage> _findPackages(string query, bool SecondAttempt)
213213
task.Wait();
214214
}
215215

216-
Package[] packages = task.GetAwaiter().GetResult().ToArray();
217-
218-
for (int i = 0; i < packages.Length; i++)
219-
{
220-
packages[i] = PackageCacher.GetAvailablePackage(packages[i]);
221-
}
222-
Logger.Info($"Found {packages.Length} available packages from {Name} with the query {query}");
216+
var packages = task.GetAwaiter().GetResult();
217+
Logger.Info($"Found {packages.Count} available packages from {Name} with the query {query}");
223218
return packages;
224219
}
225220
catch (Exception e)
@@ -263,14 +258,8 @@ private IReadOnlyList<IPackage> _getAvailableUpdates(bool SecondAttempt)
263258
task.Wait();
264259
}
265260

266-
Package[] packages = task.GetAwaiter().GetResult().ToArray();
267-
268-
for (int i = 0; i < packages.Length; i++)
269-
{
270-
packages[i] = PackageCacher.GetUpgradablePackage(packages[i]);
271-
}
272-
273-
Logger.Info($"Found {packages.Length} available updates from {Name}");
261+
var packages = task.GetAwaiter().GetResult();
262+
Logger.Info($"Found {packages.Count} available updates from {Name}");
274263
return packages;
275264
}
276265
catch (Exception e)
@@ -312,14 +301,8 @@ private IReadOnlyList<IPackage> _getInstalledPackages(bool SecondAttempt)
312301
task.Wait();
313302
}
314303

315-
Package[] packages = task.GetAwaiter().GetResult().ToArray();
316-
317-
for (int i = 0; i < packages.Length; i++)
318-
{
319-
packages[i] = PackageCacher.GetInstalledPackage(packages[i]);
320-
}
321-
322-
Logger.Info($"Found {packages.Length} installed packages from {Name}");
304+
var packages = task.GetAwaiter().GetResult();
305+
Logger.Info($"Found {packages.Count} installed packages from {Name}");
323306
return packages;
324307
}
325308
catch (Exception e)
@@ -370,9 +353,12 @@ public virtual void RefreshPackageIndexes()
370353
Logger.Debug($"Manager {Name} has not implemented RefreshPackageIndexes");
371354
}
372355

356+
/// <summary>
357+
/// Attempt a live, fast, repair method when an exception occurs (for example, reconnect to COM Server)
358+
/// </summary>
373359
public virtual void AttemptFastRepair()
374360
{
375-
// Implementing this method is optional
361+
Logger.Debug($"Manager {Name} has not implemented AttemptFastRepair");
376362
}
377363
}
378364
}

0 commit comments

Comments
 (0)