Beispiel #1
0
        /// <summary>
        ///   Attempts to update plugin <paramref name="packageId" />. If no
        ///   <paramref name="version" /> is specified, the latest available version will be installed.
        /// </summary>
        /// <param name="packageId">The plugin package id to update</param>
        /// <param name="version">Optional version to install</param>
        /// <param name="allowPrereleaseVersions">Whether to include pre-release versions</param>
        /// <param name="cancellationToken"></param>
        /// <returns>Success of operation</returns>
        /// <exception cref="ArgumentException"><paramref name="packageId" /> is empty</exception>
        /// <exception cref="ArgumentException">Plugin <paramref name="packageId" /> is not installed</exception>
        /// <exception cref="ArgumentNullException"></exception>
        public async Task <bool> UpdatePluginAsync(
            string packageId,
            NuGetVersion version                = null,
            bool allowPrereleaseVersions        = false,
            CancellationToken cancellationToken = default)
        {
            var pluginInstance = AllPlugins.FirstOrDefault(pi => pi.Package.Id == packageId);

            if (await StopPlugin(pluginInstance) == false)
            {
                LogAdapter.Warning($"Failed to stop plugin {packageId}, aborting update.");
                return(false);
            }

            using (await PMLock.WriterLockAsync())
            {
                var success = await PackageManager.UpdateAsync(
                    packageId,
                    version,
                    allowPrereleaseVersions,
                    cancellationToken);

                UISynchronizationContext.Send(() => PackageManager.FindInstalledPluginById(packageId)?.RaiseVersionChanged());

                return(success);
            }
        }
Beispiel #2
0
        private void CategorizePlugins(IEnumerable <IPlugin> plugins)
        {
            AllPlugins = plugins.ToArray();

            HostPlugin  = AllPlugins.FirstOrDefault(p => p.PluginType == PluginTypes.HostPlugin);
            AppPlugins  = AllPlugins.Where(p => p.PluginType == PluginTypes.ApplicationPlugin).ToArray();
            CorePlugins = AllPlugins.Where(p => p.PluginType == PluginTypes.CorePlugin).ToArray();

            LogPlugins(AllPlugins);
        }
        /// <summary>Start plugin <paramref name="packageId" /></summary>
        /// <param name="packageId">The plugin's package id to start</param>
        /// <returns>Success of operation</returns>
        public async Task <bool> StartPlugin(string packageId)
        {
            var pluginInstance = AllPlugins.FirstOrDefault(p => p.Package.Id == packageId);

            if (pluginInstance == null)
            {
                return(false);
            }

            return(await StartPlugin(pluginInstance).ConfigureAwait(false));
        }
Beispiel #4
0
        /// <summary>Uninstall <paramref name="pluginPackage" />. The plugin will be stopped if it is running.</summary>
        /// <param name="pluginPackage">The plugin to be uninstalled</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="ArgumentException">
        ///   When <paramref name="pluginPackage" /> is a Development
        ///   plugin
        /// </exception>
        public Task <bool> UninstallPluginAsync(LocalPluginPackage <TMeta> pluginPackage)
        {
            if (pluginPackage == null)
            {
                throw new ArgumentNullException(nameof(pluginPackage));
            }

            if (pluginPackage is LocalDevPluginPackage <TMeta> )
            {
                throw new ArgumentException($"Cannot uninstall a development plugin");
            }

            var pluginInstance = AllPlugins.FirstOrDefault(pi => pi.Package == pluginPackage);

            if (pluginInstance == null)
            {
                throw new InvalidOperationException($"Cannot find a matching PluginInstance for LocalPluginPackage {pluginPackage.Id}");
            }

            return(UninstallPluginAsync(pluginInstance));
        }
Beispiel #5
0
 /// <summary>
 /// get specified plugin, return null if not found
 /// </summary>
 /// <param name="id">id of plugin</param>
 /// <returns>plugin</returns>
 public static PluginPair GetPluginForId(string id)
 {
     return(AllPlugins.FirstOrDefault(o => o.Metadata.ID == id));
 }