-
Notifications
You must be signed in to change notification settings - Fork 808
Expand file tree
/
Copy pathPowerShellPkgOperationHelper.cs
More file actions
73 lines (61 loc) · 2.9 KB
/
PowerShellPkgOperationHelper.cs
File metadata and controls
73 lines (61 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using UniGetUI.PackageEngine.Classes.Manager.BaseProviders;
using UniGetUI.PackageEngine.Enums;
using UniGetUI.PackageEngine.Interfaces;
namespace UniGetUI.PackageEngine.Managers.PowerShellManager;
internal sealed class PowerShellPkgOperationHelper : BasePkgOperationHelper
{
public PowerShellPkgOperationHelper(PowerShell manager) : base(manager) { }
protected override IReadOnlyList<string> _getOperationParameters(IPackage package, IInstallationOptions options, OperationType operation)
{
List<string> parameters = [operation switch {
OperationType.Install => Manager.Properties.InstallVerb,
OperationType.Update => Manager.Properties.UpdateVerb,
OperationType.Uninstall => Manager.Properties.UninstallVerb,
_ => throw new InvalidDataException("Invalid package operation")
}];
parameters.AddRange(["-Name", package.Id, "-Confirm:$false", "-Force"]);
if (options.CustomParameters is not null)
parameters.AddRange(options.CustomParameters);
if (operation is not OperationType.Uninstall)
{
if (options.PreRelease)
parameters.Add("-AllowPrerelease");
if (!package.OverridenOptions.PowerShell_DoNotSetScopeParameter)
{
if (package.OverridenOptions.Scope == PackageScope.Global ||
(package.OverridenOptions.Scope is null && options.InstallationScope == PackageScope.Global))
parameters.AddRange(["-Scope", "AllUsers"]);
else
parameters.AddRange(["-Scope", "CurrentUser"]);
}
}
if (operation is OperationType.Install)
{
if (options.SkipHashCheck)
parameters.Add("-SkipPublisherCheck");
if (options.Version != "")
parameters.AddRange(["-RequiredVersion", options.Version]);
}
return parameters;
}
protected override OperationVeredict _getOperationResult(
IPackage package,
OperationType operation,
IReadOnlyList<string> processOutput,
int returnCode)
{
string output_string = string.Join("\n", processOutput);
if (package.OverridenOptions.RunAsAdministrator is not true &&
(output_string.Contains("AdminPrivilegesAreRequired") || output_string.Contains("AdminPrivilegeRequired")))
{
package.OverridenOptions.RunAsAdministrator = true;
return OperationVeredict.AutoRetry;
}
if (output_string.Contains("-Scope") && output_string.Contains("NamedParameterNotFound") && !package.OverridenOptions.PowerShell_DoNotSetScopeParameter)
{
package.OverridenOptions.PowerShell_DoNotSetScopeParameter = true;
return OperationVeredict.AutoRetry;
}
return returnCode == 0 ? OperationVeredict.Success : OperationVeredict.Failure;
}
}