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); } }
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); } }
internal async void OnPluginUnloaded(IPluginContainer container) { await _taskFactory.StartNew(() => PluginUnloaded?.Invoke(this, new PluginEventArgs(container))).ConfigureAwait(false); }
/// <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); }
protected virtual void OnPluginUnloaded(PluginEventArgs e) { PluginUnloaded?.Invoke(this, e); }
/// <summary> /// Raises the <see cref="PluginUnloaded" /> event. /// </summary> /// <seealso cref="EventArgs" /> protected virtual void OnPluginUnloaded() { PluginUnloaded?.Invoke(this, EventArgs.Empty); }
private void PluginHostProxyDisposed(object sender, EventArgs e) { PluginUnloaded?.Invoke(this, new PluginUnloadedEventArgs(((PluginHostProxy)sender).RemoteView)); }