Plugins: Add IPlugin.OptionsChanged

This commit is contained in:
Katy Coe
2020-12-23 23:54:56 +01:00
parent e1adf20951
commit 62451e5131
9 changed files with 40 additions and 9 deletions

View File

@@ -181,10 +181,9 @@ namespace Il2CppInspector.CLI
} }
} }
// Enable plugin // Enable plugin and inform of options
PluginManager.AsInstance.ManagedPlugins.First(p => p.Plugin == plugin).Enabled = true; PluginManager.AsInstance.ManagedPlugins.First(p => p.Plugin == plugin).Enabled = true;
PluginManager.OptionsChanged(plugin);
// TODO: Plugin hook OptionsChanged
} }
return true; return true;
} }

View File

@@ -9,8 +9,20 @@ using System.IO;
using NoisyCowStudios.Bin2Object; using NoisyCowStudios.Bin2Object;
using Il2CppInspector.Reflection; using Il2CppInspector.Reflection;
// Hooks we provide to plugins which can choose whether or not to provide implementations
namespace Il2CppInspector.PluginAPI.V100 namespace Il2CppInspector.PluginAPI.V100
{ {
/// <summary>
/// Executes when the plugin's options are updated by the user
/// Not called on first load (with the default, possibly incomplete options provided by the plugin author)
/// Do not perform any long-running operations here
/// Implementation is optional - the default is to do nothing
/// </summary>
public partial interface IPlugin
{
void OptionsChanged(PluginOptionsChangedEventInfo e) { }
}
/// <summary> /// <summary>
/// Process global-metadata.dat when it is first opened as a sequence of bytes /// Process global-metadata.dat when it is first opened as a sequence of bytes
/// Seek cursor will be at the start of the file /// Seek cursor will be at the start of the file

View File

@@ -11,7 +11,7 @@ namespace Il2CppInspector.PluginAPI.V100
/// <summary> /// <summary>
/// Core interface that all plugins must implement /// Core interface that all plugins must implement
/// </summary> /// </summary>
public interface IPlugin public partial interface IPlugin
{ {
/// <summary> /// <summary>
/// Plugin name for CLI and unique ID /// Plugin name for CLI and unique ID

View File

@@ -61,6 +61,11 @@ namespace Il2CppInspector.PluginAPI.V100
public bool SkipValidation { get; set; } public bool SkipValidation { get; set; }
} }
/// <summary>
/// Event info for OptionsChanged
/// </summary>
public class PluginOptionsChangedEventInfo : PluginEventInfo { }
/// <summary> /// <summary>
/// Event info for PostProcessMetadata /// Event info for PostProcessMetadata
/// </summary> /// </summary>

View File

@@ -12,7 +12,8 @@ using Il2CppInspector.Reflection;
namespace Il2CppInspector namespace Il2CppInspector
{ {
// Hooks we provide to plugins which can choose whether or not to provide implementations // Internal helpers to call the same hook on every plugin
// Does not include hooks that should be called individually, eg. OptionsChanged
internal static class PluginHooks internal static class PluginHooks
{ {
public static PluginPreProcessMetadataEventInfo PreProcessMetadata(BinaryObjectStream stream) public static PluginPreProcessMetadataEventInfo PreProcessMetadata(BinaryObjectStream stream)

View File

@@ -220,6 +220,21 @@ namespace Il2CppInspector
} }
} }
// Commit options change for the specified plugin
public static PluginOptionsChangedEventInfo OptionsChanged(IPlugin plugin) {
var eventInfo = new PluginOptionsChangedEventInfo();
try {
plugin.OptionsChanged(eventInfo);
}
catch (Exception ex) {
eventInfo.Error = new PluginErrorEventArgs { Plugin = plugin, Exception = ex, Operation = "options update" };
ErrorHandler?.Invoke(AsInstance, eventInfo.Error);
}
return eventInfo;
}
// Try to cast each enabled plugin to a specific interface type, and for those supporting the interface, execute the supplied delegate // Try to cast each enabled plugin to a specific interface type, and for those supporting the interface, execute the supplied delegate
// Errors will be forwarded to the error handler // Errors will be forwarded to the error handler
internal static E Try<I, E>(Action<I, E> action) where E : PluginEventInfo, new() internal static E Try<I, E>(Action<I, E> action) where E : PluginEventInfo, new()

View File

@@ -24,6 +24,7 @@ using System.Text.RegularExpressions;
using System.Linq; using System.Linq;
using Il2CppInspector.PluginAPI.V100; using Il2CppInspector.PluginAPI.V100;
using Il2CppInspector.Reflection; using Il2CppInspector.Reflection;
using Il2CppInspector;
namespace Il2CppInspectorGUI namespace Il2CppInspectorGUI
{ {
@@ -126,8 +127,6 @@ namespace Il2CppInspectorGUI
private void okButton_Click(object sender, RoutedEventArgs e) { private void okButton_Click(object sender, RoutedEventArgs e) {
// Close dialog box but call OnClosing first to validate all the options // Close dialog box but call OnClosing first to validate all the options
DialogResult = true; DialogResult = true;
// TODO: Plugin hook OptionsChanged (and make sure it works when clicking close icon as well)
} }
// Select a file path // Select a file path
@@ -168,6 +167,7 @@ namespace Il2CppInspectorGUI
MessageBox.Show("One or more options are invalid.", "Il2CppInspector Plugin Configuration"); MessageBox.Show("One or more options are invalid.", "Il2CppInspector Plugin Configuration");
e.Cancel = true; e.Cancel = true;
} }
PluginManager.OptionsChanged(Plugin);
} }
} }
} }

View File

@@ -107,6 +107,5 @@ namespace Il2CppInspector.GUI
private void getPluginsButton_Click(object sender, RoutedEventArgs e) { private void getPluginsButton_Click(object sender, RoutedEventArgs e) {
Process.Start(new ProcessStartInfo { FileName = @"https://github.com/djkaty/Il2CppInspectorPlugins", UseShellExecute = true }); Process.Start(new ProcessStartInfo { FileName = @"https://github.com/djkaty/Il2CppInspectorPlugins", UseShellExecute = true });
} }
} }
} }

View File

@@ -107,8 +107,8 @@ namespace Il2CppInspector
ourPlugin[key] = Convert.ChangeType(value, targetType); ourPlugin[key] = Convert.ChangeType(value, targetType);
} }
} }
// TODO: Plugin hook OptionsChanged
} }
PluginManager.OptionsChanged(plugin);
} }
List<Il2CppInspector> inspectors; List<Il2CppInspector> inspectors;