예제 #1
0
        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();
            }
        }
예제 #2
0
        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);
                        }
                    }
                }
            }
        }
예제 #3
0
        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;
                    }
                }
            }
        }
예제 #4
0
 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");
     }
 }
예제 #5
0
        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();
            }
        }
예제 #6
0
        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);
                        }
                    }
                }
            }
        }
예제 #7
0
        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");
                        }
                    }
                }
            }
        }