79 lines
2.4 KiB
C#
79 lines
2.4 KiB
C#
using System;
|
|
|
|
using IllusionInjector;
|
|
using IllusionPlugin;
|
|
|
|
namespace GamecraftModdingAPI.Utility
|
|
{
|
|
/// <summary>
|
|
/// Simple plugin interaction operations
|
|
/// </summary>
|
|
public static class Dependency
|
|
{
|
|
/// <summary>
|
|
/// Find a plugin by name
|
|
/// </summary>
|
|
/// <returns>The plugin.</returns>
|
|
/// <param name="name">The plugin's name.</param>
|
|
public static IPlugin GetPlugin(string name)
|
|
{
|
|
foreach(IPlugin plugin in PluginManager.Plugins)
|
|
{
|
|
if (plugin.Name == name)
|
|
{
|
|
return plugin;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the plugin version.
|
|
/// This gives priority to the plugin's Version string but falls back to the Assembly's version
|
|
/// </summary>
|
|
/// <returns>The plugin's version.</returns>
|
|
/// <param name="name">The plugin's name.</param>
|
|
public static Version GetPluginVersion(string name)
|
|
{
|
|
IPlugin plugin = GetPlugin(name);
|
|
if (plugin != null) {
|
|
try
|
|
{
|
|
return new Version(plugin.Version);
|
|
} catch (Exception e) when (
|
|
e is ArgumentException
|
|
|| e is ArgumentNullException
|
|
|| e is ArgumentOutOfRangeException
|
|
|| e is FormatException
|
|
|| e is OverflowException) {}
|
|
return plugin.GetType().Assembly.GetName().Version;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// (I'm leaving the auto-generated version)
|
|
// <summary>
|
|
// Hell the specified name and version.
|
|
// </summary>
|
|
// <returns>The hell.</returns>
|
|
// <param name="name">Name.</param>
|
|
// <param name="version">Version.</param>
|
|
/// <summary>
|
|
/// Detect if you're in dependency hell with respect to the plugin.
|
|
/// ie Check if the plugin doesn't exist or is out of date.
|
|
/// When version is null, this only checks if the plugin exists.
|
|
/// The version is retrieved using GetPluginVersion(string name).
|
|
/// </summary>
|
|
/// <returns>Are you in dependency hell?</returns>
|
|
/// <param name="name">The plugin's name'</param>
|
|
/// <param name="version">The target version.</param>
|
|
public static bool Hell(string name, Version version = null)
|
|
{
|
|
Version pluginVersion = GetPluginVersion(name);
|
|
if (version == null) {
|
|
return pluginVersion == null;
|
|
}
|
|
return (pluginVersion == null || pluginVersion < version);
|
|
}
|
|
}
|
|
}
|