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

Commit

Permalink
Merge pull request #8 from openmod/fixes_for_om_3.7.4
Browse files Browse the repository at this point in the history
Fixes for om 3.7.4
  • Loading branch information
Trojaner authored Nov 28, 2023
2 parents a151dc0 + e4ca848 commit 7b7f58b
Show file tree
Hide file tree
Showing 15 changed files with 240 additions and 27 deletions.
7 changes: 6 additions & 1 deletion src/Commands/CommandOpenMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ private void OnCommandWindowInputted(string text, ref bool shouldExecuteCommand)

try
{
Logger.Log($"Choice {text}");
s_CurrentStep.OnChoice(text);
s_CurrentStep = GetNextStep();

Expand Down Expand Up @@ -200,7 +201,11 @@ private CommandStep GetNextStep()
public string Name { get; } = "openmod";
public string Help { get; } = "Installs OpenMod";
public string Syntax { get; } = "install";
public List<string> Aliases { get; } = new List<string>();

public List<string> Aliases { get; } = new()
{
"om"
};
public List<string> Permissions { get; } = new List<string>();
}
}
28 changes: 15 additions & 13 deletions src/Helpers/NuGetHelper.cs
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
using OpenMod.Installer.RocketMod.Jobs;
using OpenMod.NuGet;
using System;
using System;
using System.IO;
using System.Linq;
using OpenMod.Installer.RocketMod.Helpers.Wrapper;

namespace OpenMod.Installer.RocketMod.Helpers
{
public static class NuGetHelper
{
private static NuGetPackageManager s_NuGetPackageManager;
private static NuGetPackageManagerWrapper s_NuGetPackageManagerWrapper;

public static NuGetPackageManager GetNuGetPackageManager()
public static NuGetPackageManagerWrapper GetNuGetPackageManager()
{
if (s_NuGetPackageManager != null)
if (s_NuGetPackageManagerWrapper != null)
{
return s_NuGetPackageManager;
return s_NuGetPackageManagerWrapper;
}

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

Environment.SetEnvironmentVariable("NUGET_COMMON_APPLICATION_DATA", packagesPath);

s_NuGetPackageManager = new NuGetPackageManager(packagesPath)
{
Logger = new NuGetConsoleLogger()
};
var nugetAssembly = AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name.Equals("OpenMod.Nuget", StringComparison.OrdinalIgnoreCase));

s_NuGetPackageManagerWrapper = new NuGetPackageManagerWrapper(nugetAssembly, packagesPath);

var logger = new NuGetConsoleLoggerWrapper(nugetAssembly);
s_NuGetPackageManagerWrapper.SetLogger(logger);

s_NuGetPackageManager.IgnoreDependencies(
s_NuGetPackageManagerWrapper.IgnoreDependencies(
"Microsoft.NETCore.Platforms",
"Microsoft.Packaging.Tools",
"NETStandard.Library",
/*"OpenMod.Unturned.Redist",
"OpenMod.UnityEngine.Redist",*/ // todo
"System.IO.FileSystem.Watcher");

return s_NuGetPackageManager;
return s_NuGetPackageManagerWrapper;
}
}
}
10 changes: 10 additions & 0 deletions src/Helpers/Wrapper/NuGetConsoleLoggerWrapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using System.Reflection;

namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
{
public class NuGetConsoleLoggerWrapper : TypeWrapper
{
public NuGetConsoleLoggerWrapper(Assembly nugetAssembly) : base(nugetAssembly, "NuGetConsoleLogger")
{ }
}
}
54 changes: 54 additions & 0 deletions src/Helpers/Wrapper/NuGetPackageManagerWrapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using System.Reflection;
using System.Threading.Tasks;

namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
{
public class NuGetPackageManagerWrapper : TypeWrapper
{
protected static PropertyInfo m_Logger;
protected static MethodInfo m_IgnoreDependencies;
protected static MethodInfo m_GetLatestPackageIdentityAsync;
protected static MethodInfo m_QueryPackageExactAsync;
protected static MethodInfo m_InstallAsync;

public NuGetPackageManagerWrapper(Assembly nugetAssembly, params object[] args) : base(nugetAssembly, "NuGetPackageManager", args)
{
m_Logger ??= s_Type.GetProperty("Logger");
m_IgnoreDependencies ??= s_Type.GetMethod("IgnoreDependencies");
m_GetLatestPackageIdentityAsync ??= s_Type.GetMethod("GetLatestPackageIdentityAsync");
m_QueryPackageExactAsync ??= s_Type.GetMethod("QueryPackageExactAsync");
m_InstallAsync ??= s_Type.GetMethod("InstallAsync");
}

public void SetLogger(NuGetConsoleLoggerWrapper logger)
{
m_Logger.SetValue(m_Instance, logger.Instance);
}

public void IgnoreDependencies(params string[] packageIds)
{
m_IgnoreDependencies.Invoke(m_Instance, new object[] { packageIds });
}

public async Task<PackageIdentityWrapper> GetLatestPackageIdentityAsync(string packageId)
{
var taskObj = m_GetLatestPackageIdentityAsync.Invoke(m_Instance, new object[] { packageId }) as Task;
var taskWrapper = new TaskWrapper<PackageIdentityWrapper>(taskObj);
return await taskWrapper.GetResult();
}

public async Task<PackageSearchMetadataWrapper> QueryPackageExactAsync(string packageId, string version = null, bool includePreRelease = false)
{
var taskObj = m_QueryPackageExactAsync.Invoke(m_Instance, new object[] { packageId, version, includePreRelease }) as Task;
var taskWrapper = new TaskWrapper<PackageSearchMetadataWrapper>(taskObj);
return await taskWrapper.GetResult();
}

public async Task<NuGetInstallResultWrapper> InstallAsync(PackageIdentityWrapper packageIdentity, bool allowPreReleaseVersions = false)
{
var taskObj = m_InstallAsync.Invoke(m_Instance, new[] { packageIdentity.Instance, allowPreReleaseVersions }) as Task;
var taskWrapper = new TaskWrapper<NuGetInstallResultWrapper>(taskObj);
return await taskWrapper.GetResult();
}
}
}
8 changes: 8 additions & 0 deletions src/Helpers/Wrapper/NuGetVersionWrapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
{
public class NuGetVersionWrapper : TypeWrapper
{
public NuGetVersionWrapper(object instance) : base(instance)
{ }
}
}
16 changes: 16 additions & 0 deletions src/Helpers/Wrapper/NugetWrapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System.Reflection;

namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
{
public class NuGetInstallResultWrapper : TypeWrapper
{
protected static PropertyInfo m_Code;

public int Code => (int)m_Code.GetValue(m_Instance);

public NuGetInstallResultWrapper(object instance) : base(instance)
{
m_Code = s_Type.GetProperty("Code");
}
}
}
36 changes: 36 additions & 0 deletions src/Helpers/Wrapper/PackageIdentityWrapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System.Reflection;

namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
{
public class PackageIdentityWrapper : TypeWrapper
{
protected static FieldInfo m_Id;
protected static FieldInfo m_Version;

public string Id => m_Id.GetValue(m_Instance) as string;

public bool HasVersion
{
get
{
var version = m_Version.GetValue(m_Instance);
return version != null;
}
}

public NuGetVersionWrapper Version
{
get
{
var version = m_Version.GetValue(m_Instance);
return version == null ? null : new NuGetVersionWrapper(version);
}
}

public PackageIdentityWrapper(object instance) : base(instance)
{
m_Id = s_Type.GetField("_id", BindingFlags.NonPublic | BindingFlags.Instance);
m_Version = s_Type.GetField("_version", BindingFlags.NonPublic | BindingFlags.Instance);
}
}
}
23 changes: 23 additions & 0 deletions src/Helpers/Wrapper/PackageSearchMetadataWrapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System.Reflection;

namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
{
public class PackageSearchMetadataWrapper : TypeWrapper
{
protected static PropertyInfo m_Identity;

public PackageIdentityWrapper Identity
{
get
{
var identity = m_Identity.GetValue(m_Instance);
return new PackageIdentityWrapper(identity);
}
}

public PackageSearchMetadataWrapper(object instance) : base(instance)
{
m_Identity = s_Type.GetProperty("Identity");
}
}
}
33 changes: 33 additions & 0 deletions src/Helpers/Wrapper/TaskWrapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using System;
using System.Reflection;
using System.Threading.Tasks;

namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
{
public class TaskWrapper<TResult>
{
protected PropertyInfo m_Result;
protected Task m_Instance;

public Task Instance => m_Instance;

public async Task<TResult> GetResult()
{
await m_Instance;

var resultObj = m_Result.GetValue(m_Instance);
return resultObj switch
{
null => default,
TResult result => result,
_ => (TResult)Activator.CreateInstance(typeof(TResult), resultObj)
};
}

public TaskWrapper(Task instance)
{
m_Instance = instance;
m_Result = instance.GetType().GetProperty("Result");
}
}
}
27 changes: 27 additions & 0 deletions src/Helpers/Wrapper/TypeWrapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System;
using System.Linq;
using System.Reflection;

namespace OpenMod.Installer.RocketMod.Helpers.Wrapper
{
public abstract class TypeWrapper
{
protected Type s_Type;

protected object m_Instance;

public object Instance => m_Instance;

protected TypeWrapper(object instance)
{
m_Instance = instance;
s_Type = instance.GetType();
}

protected TypeWrapper(Assembly nugetAssembly, string typeName, params object[] args)
{
s_Type = nugetAssembly.GetTypes().First(tp => tp.Name.Equals(typeName, StringComparison.OrdinalIgnoreCase));
m_Instance = Activator.CreateInstance(s_Type, args);
}
}
}
2 changes: 1 addition & 1 deletion src/Jobs/MigrateEconomyJob.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public void ExecuteMigration(string[] args)
{
WorkingDirectory = openmodDirectory,
LogOnChange = false
}, null, null);
}, null, null, null);

if (!AsyncHelper.RunSync(() => dataStore.ExistsAsync("autoexec")))
{
Expand Down
2 changes: 1 addition & 1 deletion src/Jobs/MigratePermissionsJob.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public void ExecuteMigration(string[] args)
WorkingDirectory = workingDirectory
};

var dataStore = new YamlDataStore(dataStoreParams, null, null);
var dataStore = new YamlDataStore(dataStoreParams, null, null, null);

AsyncHelperEx.RunSync(() => dataStore.SaveAsync("roles", openmodRoles));
AsyncHelperEx.RunSync(() => dataStore.SaveAsync("users", openmodUsers));
Expand Down
8 changes: 4 additions & 4 deletions src/Jobs/NuGetInstallJob.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using OpenMod.Installer.RocketMod.Helpers;
using OpenMod.NuGet;
using System;
using OpenMod.Installer.RocketMod.Helpers;
using Rocket.Core.Logging;
using System.IO;
using System.Linq;
Expand Down Expand Up @@ -37,7 +37,7 @@ private async Task DownloadPackage(bool force, bool usePre)
var package = await nuGetPackageManager.QueryPackageExactAsync(m_PackageId, null, usePre);
if (package?.Identity == null)
{
Logger.LogError($"Downloading has failed for {m_PackageId}: {NuGetInstallCode.PackageOrVersionNotFound}");
Logger.LogError($"Downloading has failed for {m_PackageId}: PackageOrVersionNotFound");
return;
}

Expand All @@ -50,7 +50,7 @@ private async Task DownloadPackage(bool force, bool usePre)
var identity = package.Identity;

var installResult = await nuGetPackageManager.InstallAsync(identity, usePre);
var isInstalled = installResult.Code == NuGetInstallCode.Success || installResult.Code == NuGetInstallCode.NoUpdatesFound;
var isInstalled = installResult.Code == 0 || installResult.Code == 1;

if (isInstalled)
{
Expand Down
4 changes: 2 additions & 2 deletions src/Jobs/OpenModAssemblyLoadJob.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ public void ExecuteMigration(string[] args)
}

var moduleDirectory = OpenModInstallerPlugin.Instance.OpenModManager.ModuleDirectory;
foreach (var dllpath in Directory.GetFiles(moduleDirectory, "*.dll", SearchOption.TopDirectoryOnly))
foreach (var dllPath in Directory.GetFiles(moduleDirectory, "*.dll", SearchOption.TopDirectoryOnly))
{
var asm = Assembly.Load(File.ReadAllBytes(dllpath));
var asm = Assembly.Load(File.ReadAllBytes(dllPath));

var name = GetVersionIndependentName(asm.FullName);
if (s_LoadedAssemblies.ContainsKey(name))
Expand Down
9 changes: 4 additions & 5 deletions src/OpenMod.Installer.RocketMod.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Nito.AsyncEx.Context" Version="5.1.0" />
<PackageReference Include="OpenMod.Core" Version="3.0.0-beta1" />
<PackageReference Include="OpenMod.NuGet" Version="3.0.0-beta1" />
<PackageReference Include="OpenMod.UnityEngine.Redist" Version="2019.4.10" />
<PackageReference Include="OpenMod.Unturned.Redist" Version="3.20.14" />
<PackageReference Include="Nito.AsyncEx.Context" Version="5.1.2" />
<PackageReference Include="OpenMod.Core" Version="3.7.4" />
<PackageReference Include="OpenMod.UnityEngine.Redist" Version="2021.3.29.1" />
<PackageReference Include="OpenMod.Unturned.Redist" Version="3.23.12.3" />
</ItemGroup>

<ItemGroup>
Expand Down

0 comments on commit 7b7f58b

Please sign in to comment.