Exemplo n.º 1
0
        private static void CheckDependencies()
        {
            var indexesOfPluginsWithUnresolvedDeps = new HashSet <int>();

            for (int i = 0; i < _pluginContainers.Count; i++)
            {
                if (_pluginContainers[i].Plugin is IPlugin3 plugin2 && plugin2.Dependencies != null)
                {
                    foreach (string dep in plugin2.Dependencies)
                    {
                        if (!_pluginContainers.Select(l => l.Plugin.Name).Contains(dep))
                        {
                            indexesOfPluginsWithUnresolvedDeps.Add(i);
                        }
                    }
                }
            }
            foreach (int indexOfPluginWithUnresolvedDeps in indexesOfPluginsWithUnresolvedDeps)
            {
                var plugin2 = _pluginContainers[indexOfPluginWithUnresolvedDeps].Plugin;
                _pluginContainers.RemoveAt(indexOfPluginWithUnresolvedDeps);
                PluginUnloaded?.Invoke(plugin2);
                Notify.SmartNotify("Plug-in error", $"Plug-in {plugin2.Name} requires {string.Join(", ", plugin2.Dependencies)}", NotifyUserType.Error, true);
            }
        }
Exemplo n.º 2
0
        private static void InvokeDeinitialize(Plugin plugin)
        {
            try
            {
                Debug.Write(LogType.Log, "Unloading plugin " + plugin);

                PluginUnloading?.Invoke(plugin);

                plugin.Deinitialize();

                PluginUnloaded?.Invoke(plugin);
            }
            catch (Exception ex)
            {
                Debug.LogException(ex);
                Debug.LogErrorFormat("Failed to deinitialize plugin {0}. {1}", plugin, ex.Message);
            }
        }
Exemplo n.º 3
0
 internal async void OnPluginUnloaded(IPluginContainer container)
 {
     await _taskFactory.StartNew(() => PluginUnloaded?.Invoke(this, new PluginEventArgs(container))).ConfigureAwait(false);
 }
Exemplo n.º 4
0
 /// <summary>
 /// Unloads the given plugin.
 /// </summary>
 /// <param name="plugin">The plugin to unload.</param>
 public static void Unload(RPlugin plugin)
 {
     PluginUnloaded?.Invoke(_plugins[plugin]);
     plugin.Unload();
     _plugins.Remove(plugin);
 }
Exemplo n.º 5
0
 protected virtual void OnPluginUnloaded(PluginEventArgs e)
 {
     PluginUnloaded?.Invoke(this, e);
 }
Exemplo n.º 6
0
 /// <summary>
 ///     Raises the <see cref="PluginUnloaded" /> event.
 /// </summary>
 /// <seealso cref="EventArgs" />
 protected virtual void OnPluginUnloaded()
 {
     PluginUnloaded?.Invoke(this, EventArgs.Empty);
 }
Exemplo n.º 7
0
 private void PluginHostProxyDisposed(object sender, EventArgs e)
 {
     PluginUnloaded?.Invoke(this, new PluginUnloadedEventArgs(((PluginHostProxy)sender).RemoteView));
 }