Skip to content
This repository was archived by the owner on Jun 27, 2024. It is now read-only.

Commit 7b7f58b

Browse files
authored
Merge pull request #8 from openmod/fixes_for_om_3.7.4
Fixes for om 3.7.4
2 parents a151dc0 + e4ca848 commit 7b7f58b

15 files changed

Lines changed: 240 additions & 27 deletions

src/Commands/CommandOpenMod.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ private void OnCommandWindowInputted(string text, ref bool shouldExecuteCommand)
8080

8181
try
8282
{
83+
Logger.Log($"Choice {text}");
8384
s_CurrentStep.OnChoice(text);
8485
s_CurrentStep = GetNextStep();
8586

@@ -200,7 +201,11 @@ private CommandStep GetNextStep()
200201
public string Name { get; } = "openmod";
201202
public string Help { get; } = "Installs OpenMod";
202203
public string Syntax { get; } = "install";
203-
public List<string> Aliases { get; } = new List<string>();
204+
205+
public List<string> Aliases { get; } = new()
206+
{
207+
"om"
208+
};
204209
public List<string> Permissions { get; } = new List<string>();
205210
}
206211
}

src/Helpers/NuGetHelper.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
using OpenMod.Installer.RocketMod.Jobs;
2-
using OpenMod.NuGet;
3-
using System;
1+
using System;
42
using System.IO;
3+
using System.Linq;
4+
using OpenMod.Installer.RocketMod.Helpers.Wrapper;
55

66
namespace OpenMod.Installer.RocketMod.Helpers
77
{
88
public static class NuGetHelper
99
{
10-
private static NuGetPackageManager s_NuGetPackageManager;
10+
private static NuGetPackageManagerWrapper s_NuGetPackageManagerWrapper;
1111

12-
public static NuGetPackageManager GetNuGetPackageManager()
12+
public static NuGetPackageManagerWrapper GetNuGetPackageManager()
1313
{
14-
if (s_NuGetPackageManager != null)
14+
if (s_NuGetPackageManagerWrapper != null)
1515
{
16-
return s_NuGetPackageManager;
16+
return s_NuGetPackageManagerWrapper;
1717
}
1818

1919
var workingDirectory = OpenModInstallerPlugin.Instance.OpenModManager.WorkingDirectory;
@@ -26,20 +26,22 @@ public static NuGetPackageManager GetNuGetPackageManager()
2626

2727
Environment.SetEnvironmentVariable("NUGET_COMMON_APPLICATION_DATA", packagesPath);
2828

29-
s_NuGetPackageManager = new NuGetPackageManager(packagesPath)
30-
{
31-
Logger = new NuGetConsoleLogger()
32-
};
29+
var nugetAssembly = AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name.Equals("OpenMod.Nuget", StringComparison.OrdinalIgnoreCase));
30+
31+
s_NuGetPackageManagerWrapper = new NuGetPackageManagerWrapper(nugetAssembly, packagesPath);
32+
33+
var logger = new NuGetConsoleLoggerWrapper(nugetAssembly);
34+
s_NuGetPackageManagerWrapper.SetLogger(logger);
3335

34-
s_NuGetPackageManager.IgnoreDependencies(
36+
s_NuGetPackageManagerWrapper.IgnoreDependencies(
3537
"Microsoft.NETCore.Platforms",
3638
"Microsoft.Packaging.Tools",
3739
"NETStandard.Library",
3840
/*"OpenMod.Unturned.Redist",
3941
"OpenMod.UnityEngine.Redist",*/ // todo
4042
"System.IO.FileSystem.Watcher");
4143

42-
return s_NuGetPackageManager;
44+
return s_NuGetPackageManagerWrapper;
4345
}
4446
}
4547
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Reflection;
2+
3+
namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
4+
{
5+
public class NuGetConsoleLoggerWrapper : TypeWrapper
6+
{
7+
public NuGetConsoleLoggerWrapper(Assembly nugetAssembly) : base(nugetAssembly, "NuGetConsoleLogger")
8+
{ }
9+
}
10+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System.Reflection;
2+
using System.Threading.Tasks;
3+
4+
namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
5+
{
6+
public class NuGetPackageManagerWrapper : TypeWrapper
7+
{
8+
protected static PropertyInfo m_Logger;
9+
protected static MethodInfo m_IgnoreDependencies;
10+
protected static MethodInfo m_GetLatestPackageIdentityAsync;
11+
protected static MethodInfo m_QueryPackageExactAsync;
12+
protected static MethodInfo m_InstallAsync;
13+
14+
public NuGetPackageManagerWrapper(Assembly nugetAssembly, params object[] args) : base(nugetAssembly, "NuGetPackageManager", args)
15+
{
16+
m_Logger ??= s_Type.GetProperty("Logger");
17+
m_IgnoreDependencies ??= s_Type.GetMethod("IgnoreDependencies");
18+
m_GetLatestPackageIdentityAsync ??= s_Type.GetMethod("GetLatestPackageIdentityAsync");
19+
m_QueryPackageExactAsync ??= s_Type.GetMethod("QueryPackageExactAsync");
20+
m_InstallAsync ??= s_Type.GetMethod("InstallAsync");
21+
}
22+
23+
public void SetLogger(NuGetConsoleLoggerWrapper logger)
24+
{
25+
m_Logger.SetValue(m_Instance, logger.Instance);
26+
}
27+
28+
public void IgnoreDependencies(params string[] packageIds)
29+
{
30+
m_IgnoreDependencies.Invoke(m_Instance, new object[] { packageIds });
31+
}
32+
33+
public async Task<PackageIdentityWrapper> GetLatestPackageIdentityAsync(string packageId)
34+
{
35+
var taskObj = m_GetLatestPackageIdentityAsync.Invoke(m_Instance, new object[] { packageId }) as Task;
36+
var taskWrapper = new TaskWrapper<PackageIdentityWrapper>(taskObj);
37+
return await taskWrapper.GetResult();
38+
}
39+
40+
public async Task<PackageSearchMetadataWrapper> QueryPackageExactAsync(string packageId, string version = null, bool includePreRelease = false)
41+
{
42+
var taskObj = m_QueryPackageExactAsync.Invoke(m_Instance, new object[] { packageId, version, includePreRelease }) as Task;
43+
var taskWrapper = new TaskWrapper<PackageSearchMetadataWrapper>(taskObj);
44+
return await taskWrapper.GetResult();
45+
}
46+
47+
public async Task<NuGetInstallResultWrapper> InstallAsync(PackageIdentityWrapper packageIdentity, bool allowPreReleaseVersions = false)
48+
{
49+
var taskObj = m_InstallAsync.Invoke(m_Instance, new[] { packageIdentity.Instance, allowPreReleaseVersions }) as Task;
50+
var taskWrapper = new TaskWrapper<NuGetInstallResultWrapper>(taskObj);
51+
return await taskWrapper.GetResult();
52+
}
53+
}
54+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
2+
{
3+
public class NuGetVersionWrapper : TypeWrapper
4+
{
5+
public NuGetVersionWrapper(object instance) : base(instance)
6+
{ }
7+
}
8+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Reflection;
2+
3+
namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
4+
{
5+
public class NuGetInstallResultWrapper : TypeWrapper
6+
{
7+
protected static PropertyInfo m_Code;
8+
9+
public int Code => (int)m_Code.GetValue(m_Instance);
10+
11+
public NuGetInstallResultWrapper(object instance) : base(instance)
12+
{
13+
m_Code = s_Type.GetProperty("Code");
14+
}
15+
}
16+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using System.Reflection;
2+
3+
namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
4+
{
5+
public class PackageIdentityWrapper : TypeWrapper
6+
{
7+
protected static FieldInfo m_Id;
8+
protected static FieldInfo m_Version;
9+
10+
public string Id => m_Id.GetValue(m_Instance) as string;
11+
12+
public bool HasVersion
13+
{
14+
get
15+
{
16+
var version = m_Version.GetValue(m_Instance);
17+
return version != null;
18+
}
19+
}
20+
21+
public NuGetVersionWrapper Version
22+
{
23+
get
24+
{
25+
var version = m_Version.GetValue(m_Instance);
26+
return version == null ? null : new NuGetVersionWrapper(version);
27+
}
28+
}
29+
30+
public PackageIdentityWrapper(object instance) : base(instance)
31+
{
32+
m_Id = s_Type.GetField("_id", BindingFlags.NonPublic | BindingFlags.Instance);
33+
m_Version = s_Type.GetField("_version", BindingFlags.NonPublic | BindingFlags.Instance);
34+
}
35+
}
36+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Reflection;
2+
3+
namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
4+
{
5+
public class PackageSearchMetadataWrapper : TypeWrapper
6+
{
7+
protected static PropertyInfo m_Identity;
8+
9+
public PackageIdentityWrapper Identity
10+
{
11+
get
12+
{
13+
var identity = m_Identity.GetValue(m_Instance);
14+
return new PackageIdentityWrapper(identity);
15+
}
16+
}
17+
18+
public PackageSearchMetadataWrapper(object instance) : base(instance)
19+
{
20+
m_Identity = s_Type.GetProperty("Identity");
21+
}
22+
}
23+
}

src/Helpers/Wrapper/TaskWrapper.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
using System.Reflection;
3+
using System.Threading.Tasks;
4+
5+
namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
6+
{
7+
public class TaskWrapper<TResult>
8+
{
9+
protected PropertyInfo m_Result;
10+
protected Task m_Instance;
11+
12+
public Task Instance => m_Instance;
13+
14+
public async Task<TResult> GetResult()
15+
{
16+
await m_Instance;
17+
18+
var resultObj = m_Result.GetValue(m_Instance);
19+
return resultObj switch
20+
{
21+
null => default,
22+
TResult result => result,
23+
_ => (TResult)Activator.CreateInstance(typeof(TResult), resultObj)
24+
};
25+
}
26+
27+
public TaskWrapper(Task instance)
28+
{
29+
m_Instance = instance;
30+
m_Result = instance.GetType().GetProperty("Result");
31+
}
32+
}
33+
}

src/Helpers/Wrapper/TypeWrapper.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
using System.Linq;
3+
using System.Reflection;
4+
5+
namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
6+
{
7+
public abstract class TypeWrapper
8+
{
9+
protected Type s_Type;
10+
11+
protected object m_Instance;
12+
13+
public object Instance => m_Instance;
14+
15+
protected TypeWrapper(object instance)
16+
{
17+
m_Instance = instance;
18+
s_Type = instance.GetType();
19+
}
20+
21+
protected TypeWrapper(Assembly nugetAssembly, string typeName, params object[] args)
22+
{
23+
s_Type = nugetAssembly.GetTypes().First(tp => tp.Name.Equals(typeName, StringComparison.OrdinalIgnoreCase));
24+
m_Instance = Activator.CreateInstance(s_Type, args);
25+
}
26+
}
27+
}

0 commit comments

Comments
 (0)