private static Plugin CreatePlugin(IPluginDescription plugin, byte[] hash) { return(new Plugin() { Name = plugin.Name, Version = plugin.Version, Hash = hash }); }
public LicenseConfirmationDialog(IPluginDescription plugin) : base() { InitializeComponent(); richTextBox.Text = plugin.LicenseText; this.Text = plugin.ToString(); this.DialogResult = DialogResult.Cancel; }
private IEnumerable <ListViewItem> FindItemsForPlugin(IPluginDescription plugin) { return(from item in pluginsListView.Items.OfType <ListViewItem>() let otherPlugin = item.Tag as IPluginDescription where otherPlugin != null && otherPlugin.Name == plugin.Name && otherPlugin.Version == plugin.Version select item); }
private void UpdateIndex(IPluginDescription description) { _index.Description = description.Description; _index.Id = description.Id.Value; _index.Name = description.Name; _index.Author = description.Author; _index.Website = description.Website != null?description.Website.ToString() : null; _index.Version = description.Version?.ToString(); _index.ImplementedPluginInterfaces = new List <PluginInterfaceImplementation>(); foreach (var implementationDescription in description.PluginImplementations) { _index.ImplementedPluginInterfaces.Add(new PluginInterfaceImplementation { InterfaceTypename = implementationDescription.InterfaceType.FullName, ImplementationTypename = implementationDescription.FullTypeName, InterfaceVersion = implementationDescription.Version.Value }); } _index.SerializableTypes = new List <SerializableTypeDescription>(); foreach (var pair in description.SerializableTypes) { _index.SerializableTypes.Add(new SerializableTypeDescription { Name = pair.Key, FullName = pair.Value }); } _index.TailviewerApiVersion = description.TailviewerApiVersion?.ToString(); }
protected virtual void UpdateDescription() { descriptionTextBox.Text = string.Empty; if (typesTreeView.SelectedNode != null) { IPluginDescription plugin = typesTreeView.SelectedNode.Tag as IPluginDescription; if (plugin != null) { StringBuilder sb = new StringBuilder(); sb.Append("Plugin: ").Append(plugin.Name).Append(Environment.NewLine); sb.Append("Version: ").Append(plugin.Version.ToString()).Append(Environment.NewLine); descriptionTextBox.Text = sb.ToString(); } Type type = typesTreeView.SelectedNode.Tag as Type; if (type != null) { string description = ItemAttribute.GetDescription(type); if (description != null) { descriptionTextBox.Text = description; } } } else if (typesTreeView.Nodes.Count == 0) { descriptionTextBox.Text = "No types found"; } }
public LicenseView(IPluginDescription plugin) : base() { InitializeComponent(); Name = "License of: " + plugin; richTextBox.Text = plugin.LicenseText; }
private ListViewItem CreateListViewItem(IPluginDescription plugin) { ListViewItem item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString(), plugin.Description }); item.Tag = plugin; item.ImageIndex = 0; return(item); }
public PluginView(IPluginDescription plugin) : base() { InitializeComponent(); PopulateImageList(); this.plugin = plugin; this.Text = "Plugin Details: " + plugin.ToString(); UpdateControls(); }
internal static IEnumerable<IPluginDescription> GetAllDependents(IPluginDescription plugin, IEnumerable<IPluginDescription> availablePlugins) { return from p in availablePlugins let matchingEntries = from dep in GetAllDependencies(p) where dep.Name == plugin.Name where dep.Version == plugin.Version select dep where matchingEntries.Any() select p as IPluginDescription; }
/// <summary> /// Finds all types that are subtypes or equal to the specified type if they are part of the given /// <paramref name="pluginDescription"/>. /// </summary> /// <param name="type">Most general type for which to find matching types.</param> /// <param name="pluginDescription">The plugin the subtypes must be part of.</param> /// <param name="onlyInstantiable">Return only types that are instantiable /// <param name="includeGenericTypeDefinitions">Specifies if generic type definitions shall be included</param> /// (interfaces, abstract classes... are not returned)</param> /// <returns>Enumerable of the discovered types.</returns> internal static IEnumerable <Type> GetTypes(Type type, IPluginDescription pluginDescription, bool onlyInstantiable, bool includeGenericTypeDefinitions) { PluginDescription pluginDesc = (PluginDescription)pluginDescription; return(from asm in AppDomain.CurrentDomain.GetAssemblies() where !asm.IsDynamic && !string.IsNullOrEmpty(asm.Location) where pluginDesc.AssemblyLocations.Any(location => location.Equals(Path.GetFullPath(asm.Location), StringComparison.CurrentCultureIgnoreCase)) from t in GetTypes(type, asm, onlyInstantiable, includeGenericTypeDefinitions) select t); }
public ILogSource CreateCustom(CustomDataSourceId id, ICustomDataSourceConfiguration configuration, out IPluginDescription pluginDescription) { var pair = _dataSourcePlugins.First(x => x.Plugin.Id == id); pluginDescription = pair.Description; var logFile = TryCreateCustomWith(pair.Plugin, configuration); return(new NoThrowLogSource(logFile, pluginDescription.Name)); }
private void remotePluginsListView_ItemChecked(object sender, ItemCheckedEventArgs e) { foreach (ListViewItem item in pluginsListView.SelectedItems) { IPluginDescription plugin = (IPluginDescription)item.Tag; if (e.Item.Checked) HandlePluginChecked(plugin); else HandlePluginUnchecked(plugin); } installPluginsButton.Enabled = pluginsListView.CheckedItems.Count > 0; }
internal static IEnumerable <IPluginDescription> GetAllDependents(IPluginDescription plugin, IEnumerable <IPluginDescription> availablePlugins) { return(from p in availablePlugins let matchingEntries = from dep in GetAllDependencies(p) where dep.Name == plugin.Name where dep.Version == plugin.Version select dep where matchingEntries.Any() select p as IPluginDescription); }
private static byte[] CreateZipPackage(IPluginDescription plugin) { using (MemoryStream stream = new MemoryStream()) { ZipArchive zipFile = new ZipArchive(stream, ZipArchiveMode.Create); foreach (var file in plugin.Files) { zipFile.CreateEntry(file.Name); } stream.Seek(0, SeekOrigin.Begin); return(stream.GetBuffer()); } }
private DeploymentService.PluginDescription MakePluginDescription(IPluginDescription plugin, Dictionary <IPluginDescription, DeploymentService.PluginDescription> cachedPluginDescriptions) { if (!cachedPluginDescriptions.ContainsKey(plugin)) { var dependencies = (from dep in plugin.Dependencies select MakePluginDescription(dep, cachedPluginDescriptions)) .ToList(); cachedPluginDescriptions.Add(plugin, new DeploymentService.PluginDescription(plugin.Name, plugin.Version, dependencies, plugin.ContactName, plugin.ContactEmail, plugin.LicenseText)); } return(cachedPluginDescriptions[plugin]); }
public static List<PluginData> CreatePluginDatas(IPluginDescription plugin) { List<PluginData> pluginDatas = new List<PluginData>(); foreach (IPluginFile pf in plugin.Files) { PluginData pluginData = new PluginData(); pluginData.Data = File.ReadAllBytes(pf.Name); pluginData.FileName = Path.GetFileName(pf.Name); pluginDatas.Add(pluginData); } return pluginDatas; }
//private readonly DelegateCommand _deleteCommand; public InstalledPluginViewModel(IPluginDescription description) { _description = description; // TODO: Deleting requires a bit more care because we store plugins // in Program Files which is (for good reason) protected. // Uninstalling a plugin should probably force the UAC dialog // and thus be performed in a separate process. However in order // for this to succeed, we must make sure that we don't hold anymore // handles to the plugin... //_deleteCommand = new DelegateCommand(); }
public static List <PluginData> CreatePluginDatas(IPluginDescription plugin) { List <PluginData> pluginDatas = new List <PluginData>(); foreach (IPluginFile pf in plugin.Files) { PluginData pluginData = new PluginData(); pluginData.Data = File.ReadAllBytes(pf.Name); pluginData.FileName = Path.GetFileName(pf.Name); pluginDatas.Add(pluginData); } return(pluginDatas); }
private void HandlePluginChecked(IPluginDescription plugin) { // also check all dependencies List<ListViewItem> modifiedItems = new List<ListViewItem>(); modifiedItems.AddRange(FindItemsForPlugin(plugin)); foreach (var dep in Util.GetAllDependencies(plugin)) { // there can be multiple entries for a single plugin in different groups foreach (ListViewItem item in FindItemsForPlugin(dep)) { if (item != null && !item.Checked) { if (!modifiedItems.Contains(item)) modifiedItems.Add(item); } } } pluginsListView.CheckItems(modifiedItems); }
public IPluginStatus GetStatus(IPluginDescription description) { var id = description?.Id; if (id != null && _pluginStati.TryGetValue(id, out var status)) { return(status); } status = new PluginStatus { IsInstalled = false }; return(status); }
internal static IEnumerable<IPluginDescription> GetAllDependencies(IPluginDescription plugin) { HashSet<IPluginDescription> yieldedPlugins = new HashSet<IPluginDescription>(); foreach (var dep in plugin.Dependencies) { foreach (var recDep in GetAllDependencies(dep)) { if (!yieldedPlugins.Contains(recDep)) { yieldedPlugins.Add(recDep); yield return recDep; } } if (!yieldedPlugins.Contains(dep)) { yieldedPlugins.Add(dep); yield return dep; } } }
private IFileFormatPlugin FindSupportingPlugin(string filePath, out IPluginDescription pluginDescription) { var fileName = Path.GetFileName(filePath); foreach (var pair in _plugins) { if (Supports(pair.Plugin, fileName)) { pluginDescription = pair.Description; return(pair.Plugin); } } pluginDescription = null; return(null); }
/// <inheritdoc /> public ILogFile Open(string filePath, out IPluginDescription pluginDescription) { var plugin = FindSupportingPlugin(filePath, out pluginDescription); if (plugin != null) { var logFile = OpenWith(filePath, plugin); if (logFile != null) { var pluginName = plugin.GetType().Assembly.FullName; return(new NoThrowLogFile(logFile, pluginName)); } } return(_services.CreateTextLogFile(filePath)); }
/// <summary> /// Creates an instance of all types that are subtypes or the same type of the specified type and declared in <paramref name="plugin"/> /// </summary> /// <typeparam name="T">Most general type.</typeparam> /// <returns>Enumerable of the created instances.</returns> internal static IEnumerable <T> GetInstances <T>(IPluginDescription plugin) where T : class { List <T> instances = new List <T>(); foreach (Type t in GetTypes(typeof(T), plugin, onlyInstantiable: true, includeGenericTypeDefinitions: false)) { T instance = null; try { instance = (T)Activator.CreateInstance(t); } catch { } if (instance != null) { instances.Add(instance); } } return(instances); }
public IPluginStatus GetStatus(IPluginDescription description) { foreach (var pluginLoader in _pluginLoaders) { var status = pluginLoader.GetStatus(description); if (status.IsInstalled) { return(status); } } return(new PluginStatus { IsInstalled = false, IsLoaded = false }); }
/// <inheritdoc /> public T Load <T>(IPluginDescription description) where T : class, IPlugin { if (!_archivesByPlugin.TryGetValue(description, out var archive)) { throw new ArgumentException(); } if (!description.Plugins.TryGetValue(typeof(T), out var interfaceImplementation)) { throw new NotImplementedException(); } var plugin = archive.LoadPlugin(); var type = plugin.GetType(interfaceImplementation); var pluginObject = Activator.CreateInstance(type); return((T)pluginObject); }
private bool TryFindNewestPlugin(IPluginDescription installedPlugin, IReadOnlyList <PluginIdentifier> allPlugins, out PluginIdentifier id) { var candidates = allPlugins.Where(x => x.Id == installedPlugin.Id.Value) .OrderByDescending(x => x.Version) .ToList(); if (candidates.Count == 0) { Log.DebugFormat("No newer version for plugin '{0}' available", installedPlugin.Id); id = null; return(false); } id = candidates[0]; return(true); }
internal static IEnumerable <Type> GetTypes(IEnumerable <Type> types, IPluginDescription pluginDescription, bool onlyInstantiable, bool includeGenericTypeDefinitions, bool assignableToAllTypes) { IEnumerable <Type> result = GetTypes(types.First(), pluginDescription, onlyInstantiable, includeGenericTypeDefinitions); foreach (Type type in types.Skip(1)) { IEnumerable <Type> discoveredTypes = GetTypes(type, pluginDescription, onlyInstantiable, includeGenericTypeDefinitions); if (assignableToAllTypes) { result = result.Intersect(discoveredTypes); } else { result = result.Union(discoveredTypes); } } return(result); }
private void UpdateIndex(IPluginDescription description) { _index.Description = description.Description; _index.Id = description.Id.Value; _index.Name = description.Name; _index.Author = description.Author; _index.Website = description.Website != null?description.Website.ToString() : null; _index.Version = description.Version?.ToString(); _index.ImplementedPluginInterfaces = new List <PluginInterfaceImplementation>(); foreach (var pair in description.Plugins) { _index.ImplementedPluginInterfaces.Add(new PluginInterfaceImplementation { InterfaceTypename = pair.Key.FullName, ImplementationTypename = pair.Value }); } }
private bool TryLoad(string filePath, out IPluginDescription description) { try { description = ReflectPlugin(filePath); return(true); } catch (FileLoadException e) { var error = string.Format("Unable to load plugin '{0}': {1}", filePath, e); Log.Error(error); description = new PluginDescription { FilePath = filePath, Error = error }; return(false); } catch (BadImageFormatException e) { var error = string.Format("Unable to load plugin '{0}' (plugins must be compiled against AnyCPU): {1}", filePath, e); Log.Error(error); description = new PluginDescription { FilePath = filePath, Error = error }; return(false); } catch (Exception e) { var error = string.Format("Caught unexpected exception while trying to load plugin '{0}': {1}", filePath, e); Log.Error(error); description = new PluginDescription { FilePath = filePath, Error = error }; return(false); } }
internal static IEnumerable <IPluginDescription> GetAllDependencies(IPluginDescription plugin) { HashSet <IPluginDescription> yieldedPlugins = new HashSet <IPluginDescription>(); foreach (var dep in plugin.Dependencies) { foreach (var recDep in GetAllDependencies(dep)) { if (!yieldedPlugins.Contains(recDep)) { yieldedPlugins.Add(recDep); yield return(recDep); } } if (!yieldedPlugins.Contains(dep)) { yieldedPlugins.Add(dep); yield return(dep); } } }
/// <inheritdoc /> public override T Load <T>(IPluginDescription description) { if (description == null) { throw new ArgumentNullException(nameof(description)); } var assembly = Assembly.LoadFrom(description.FilePath); var fullTypeName = description.Plugins[typeof(T)]; var implementation = assembly.GetType(fullTypeName); if (implementation == null) { throw new ArgumentException(string.Format("Plugin '{0}' does not define a type named '{1}'", description.FilePath, fullTypeName)); } var plugin = (T)Activator.CreateInstance(implementation); return(plugin); }
private ListViewItem MakeListViewItem(IPluginDescription plugin) { ListViewItem item; if (localAndServerPlugins[plugin] != null) { item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString(), localAndServerPlugins[plugin].Version.ToString(), localAndServerPlugins[plugin].Description }); if (plugin.Version <= localAndServerPlugins[plugin].Version) { item.ForeColor = Color.Gray; } } else { item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString(), string.Empty, plugin.Description }); } item.Tag = plugin; item.ImageIndex = 0; item.Checked = false; return(item); }
private static void CollectPluginDependencies(List<IPluginDescription> plugins, IPluginDescription plugin) { if (plugin == null) return; foreach (var dependency in plugin.Dependencies) { if (!plugins.Contains(dependency)) { plugins.Add(dependency); CollectPluginDependencies(plugins, dependency); } } }
private ListViewItem FindItemForPlugin(IPluginDescription dep) { return (from i in listView.Items.Cast<ListViewItem>() where i.Tag == dep select i).Single(); }
private IEnumerable<ListViewItem> FindItemsForPlugin(IPluginDescription plugin) { return (from item in pluginsListView.Items.OfType<ListViewItem>() let otherPlugin = item.Tag as IPluginDescription where otherPlugin != null && otherPlugin.Name == plugin.Name && otherPlugin.Version == plugin.Version select item); }
private IEnumerable<ListViewItem> FindItemsForPlugin(IPluginDescription plugin) { return from item in pluginListView.Items.OfType<ListViewItem>() let p = item.Tag as IPluginDescription where p.Name == plugin.Name where p.Version == plugin.Version select item; }
private ListViewItem CreateListViewItem(IPluginDescription plugin) { ListViewItem item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString(), string.Empty, plugin.Description }); item.Tag = plugin; item.ImageIndex = 0; item.Checked = false; return item; }
// compares for two plugins with same major and minor version if plugin1 is newer than plugin2 internal static bool IsNewerThan(IPluginDescription plugin1, IPluginDescription plugin2) { // newer: build version is higher, or if build version is the same revision is higher return plugin1.Version.Build > plugin2.Version.Build || (plugin1.Version.Build == plugin2.Version.Build && plugin1.Version.Revision > plugin2.Version.Revision); }
private DeploymentService.PluginDescription MakePluginDescription(IPluginDescription plugin, Dictionary<IPluginDescription, DeploymentService.PluginDescription> cachedPluginDescriptions) { if (!cachedPluginDescriptions.ContainsKey(plugin)) { var dependencies = (from dep in plugin.Dependencies select MakePluginDescription(dep, cachedPluginDescriptions)) .ToList(); cachedPluginDescriptions.Add(plugin, new DeploymentService.PluginDescription(plugin.Name, plugin.Version, dependencies, plugin.ContactName, plugin.ContactEmail, plugin.LicenseText)); } return cachedPluginDescriptions[plugin]; }
private static Plugin CreatePlugin(IPluginDescription plugin, byte[] hash) { return new Plugin() { Name = plugin.Name, Version = plugin.Version, Hash = hash }; }
private ListViewItem MakeListViewItem(IPluginDescription plugin) { ListViewItem item; if (localAndServerPlugins[plugin] != null) { item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString(), localAndServerPlugins[plugin].Version.ToString(), localAndServerPlugins[plugin].Description }); if (plugin.Version <= localAndServerPlugins[plugin].Version) item.ForeColor = Color.Gray; } else { item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString(), string.Empty, plugin.Description }); } item.Tag = plugin; item.ImageIndex = 0; item.Checked = false; return item; }
private static byte[] CreateZipPackage(IPluginDescription plugin) { using (MemoryStream stream = new MemoryStream()) { ZipArchive zipFile = new ZipArchive(stream, ZipArchiveMode.Create); foreach (var file in plugin.Files) { zipFile.CreateEntry(file.Name); } stream.Seek(0, SeekOrigin.Begin); return stream.GetBuffer(); } }