|
|
@@ -1,10 +1,79 @@ |
|
|
|
using System; |
|
|
|
namespace GamecraftModdingAPI |
|
|
|
|
|
|
|
using IllusionInjector; |
|
|
|
using IllusionPlugin; |
|
|
|
|
|
|
|
namespace GamecraftModdingAPI.Utility |
|
|
|
{ |
|
|
|
public class Dependency |
|
|
|
/// <summary> |
|
|
|
/// Simple plugin interaction operations |
|
|
|
/// </summary> |
|
|
|
public static class Dependency |
|
|
|
{ |
|
|
|
public 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); |
|
|
|
} |
|
|
|
} |
|
|
|
} |