private static void PluginCommand(Action action, PluginContainer container, string message) { if (HandleExceptions) { if (mMenuStrip.IsDisposed) { try { action(); } catch (Exception e) { var version = container.Plugin.Version; message = $"{container.Name} Version {version} {message}"; container.Fail(e, message); ReceiveError(message + "\n" + e.ToString()); } } else { // Do this on a UI thread mMenuStrip.Invoke((MethodInvoker) delegate { try { action(); } catch (Exception e) { var version = container.Plugin.Version; message = $"{container.Name} Version {version} {message}"; container.Fail(e, message); ReceiveError(message + "\n" + e.ToString()); } }); } } else { action(); } }
static void CallMethodOnPlugin(Action <GlueViewPlugin> methodToCall, string methodName) { foreach (PluginManager manager in mInstances) { foreach (var plugin in manager.Plugins) { PluginContainer container = manager.PluginContainers[plugin]; if (container.IsEnabled) { try { methodToCall(plugin); } catch (Exception e) { container.Fail(e, "Failed in " + methodName); string message = $"{container.Plugin.FriendlyName} failed in {methodName}\n{e.ToString()}"; Facades.GlueViewCommands.Self.PrintOutput(message); } } } } }
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) { PluginContainer container = ListBox.Items[e.Index] as PluginContainer; bool isShuttingDown = e.CurrentValue == CheckState.Checked && e.NewValue == CheckState.Unchecked; if (isShuttingDown) { if (PluginManager.ShutDownPlugin(container.Plugin, Plugins.Interfaces.PluginShutDownReason.UserDisabled)) { e.NewValue = CheckState.Unchecked; } } else { bool shouldBeEnabled = e.NewValue == CheckState.Checked; if (shouldBeEnabled && !container.IsEnabled) { DialogResult result = System.Windows.Forms.DialogResult.Yes; if (!string.IsNullOrEmpty(container.FailureDetails)) { result = MessageBox.Show("The plugin " + container.Name + " has crashed so " + " it was disabled. Are you sure you want to re-enable it?", "Re-enable crashed plugin?", MessageBoxButtons.YesNo); } if (result == System.Windows.Forms.DialogResult.Yes) { #if GLUE_VIEW MessageBox.Show("Re-enabling plugins is not supported in GlueView yet."); #else container.IsEnabled = true; try { container.Plugin.StartUp(); PluginManager.ReenablePlugin(container.Plugin); } catch (Exception exception) { container.Fail(exception, "Failed in StartUp"); RefreshCheckBoxes(); } #endif } else { e.NewValue = CheckState.Unchecked; } } } }
static void GenerateWithException(GenerateDelegate method, ICodeBlock codeBlock, IElement element, IPlugin plugin, PluginManager pluginManager) { try { method(codeBlock, element); } catch (Exception e) { PluginContainer pluginContainer = pluginManager.PluginContainers[plugin]; pluginContainer.Fail(e, "Failed during code generation"); } }
private static void PluginCommandNotUiThread(Action action, PluginContainer container, string message) { if (HandleExceptions) { try { action(); } catch (Exception e) { container.Fail(e, message); ReceiveError(message + "\n" + e.ToString()); } } else { action(); } }
static void CallMethodOnPlugin(Action <GlueViewPlugin> methodToCall, string methodName) { foreach (PluginManager manager in mInstances) { foreach (var plugin in manager.Plugins) { PluginContainer container = manager.PluginContainers[plugin]; if (container.IsEnabled) { try { methodToCall(plugin); } catch (Exception e) { container.Fail(e, "Failed in " + methodName); } } } } }
public static void ReactToUpdate() { foreach (PluginManager manager in mInstances) { foreach (GlueViewPlugin plugin in manager.Plugins) { PluginContainer container = manager.mPluginContainers[plugin]; if (container.IsEnabled) { try { plugin.CallUpdate(); } catch (Exception e) { container.Fail(e, "Failed in CallUpdate"); } } } } }