-
Notifications
You must be signed in to change notification settings - Fork 815
Expand file tree
/
Copy pathScoopPkgOperationHelper.cs
More file actions
89 lines (77 loc) · 3.33 KB
/
ScoopPkgOperationHelper.cs
File metadata and controls
89 lines (77 loc) · 3.33 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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using System.Runtime.InteropServices;
using UniGetUI.PackageEngine.Classes.Manager.BaseProviders;
using UniGetUI.PackageEngine.Enums;
using UniGetUI.PackageEngine.Interfaces;
namespace UniGetUI.PackageEngine.Managers.ScoopManager;
internal sealed class ScoopPkgOperationHelper : BasePkgOperationHelper
{
public ScoopPkgOperationHelper(Scoop 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")
}];
if (package.Source.Name.Contains("..."))
parameters.Add($"{package.Id}");
else
parameters.Add($"{package.Source.Name}/{package.Id}");
if (package.OverridenOptions.Scope == PackageScope.Global ||
(package.OverridenOptions.Scope is null && options.InstallationScope == PackageScope.Global))
{
// Scoop requires admin rights to install global packages
package.OverridenOptions.RunAsAdministrator = true;
parameters.Add("--global");
}
if (options.CustomParameters?.Any() is true)
parameters.AddRange(options.CustomParameters);
if (operation is OperationType.Uninstall)
{
if (options.RemoveDataOnUninstall)
parameters.Add("--purge");
}
else
{
if (options.SkipHashCheck)
parameters.Add("--skip-hash-check");
}
if(operation is OperationType.Install)
{
parameters.AddRange(options.Architecture switch
{
Architecture.X64 => ["--arch", "64bit"],
Architecture.X86 => ["--arch", "32bit"],
Architecture.Arm64 => ["--arch", "arm64"],
_ => []
});
}
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.Scope != PackageScope.Global && output_string.Contains("Try again with the --global (or -g) flag instead"))
{
package.OverridenOptions.Scope = PackageScope.Global;
package.OverridenOptions.RunAsAdministrator = true;
return OperationVeredict.AutoRetry;
}
if (package.OverridenOptions.RunAsAdministrator != true
&& (output_string.Contains("requires admin rights")
|| output_string.Contains("requires administrator rights")
|| output_string.Contains("you need admin rights to install global apps")))
{
package.OverridenOptions.RunAsAdministrator = true;
return OperationVeredict.AutoRetry;
}
if (output_string.Contains("ERROR") || returnCode is not 0)
return OperationVeredict.Failure;
return OperationVeredict.Success;
}
}