Add basic plugin version checking functionality
This commit is contained in:
parent
8145c6c23f
commit
c57154a970
1 changed files with 74 additions and 5 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue