示例#1
0
 public void MovePluginToCorrectCollection(IPluginViewModel plugin)
 {
     if (PluginManager.IsInstalled(plugin.InternalName))
     {
         if (PluginManager.IsMarkedForRemoval(plugin.InternalName))
         {
             // installed & marked for removal -> marked for removal
             SetPluginToCollection(plugin, MarkedForRemovalPlugins);
         }
         else if (PluginManager.packages.Any(p => p.information.Name == plugin.InternalName) || PluginManager.IsFailed(plugin.InternalName))
         {
             // installed & (activated || failed activation) -> installed
             SetPluginToCollection(plugin, InstalledPlugins);
         }
         else
         {
             // installed, not activated -> fresh
             SetPluginToCollection(plugin, FreshPlugins);
         }
     }
     else
     {
         // not installed -> available
         SetPluginToCollection(plugin, AvailablePlugins);
     }
 }
示例#2
0
        public void SetPluginToCollection(IPluginViewModel plugin, ObservableCollection<IPluginViewModel> target)
        {
            var collections = new[] {InstalledPlugins, AvailablePlugins, FreshPlugins, MarkedForRemovalPlugins};
            foreach (var collection in collections)
            {
                if (collection != target)
                {
                    collection.Remove(plugin);
                }
            }

            if (!target.Contains(plugin))
            {
                target.Add(plugin);
            }
        }
示例#3
0
        private void UninstallPlugin(IPluginViewModel publicPluginViewModel)
        {
            var currentPlugin =
                PluginManager.Current.LoadedPlugins.FirstOrDefault(x => x.PluginInfo.Guid == publicPluginViewModel.Guid);

            if (currentPlugin != null)
            {
                PluginManager.Current.RemovePlugin(currentPlugin);
                RefreshAdministration = true;
            }

            var file = new FileInfo(publicPluginViewModel.LocalPath);

            if (file.Exists)
            {
                file.Delete();
            }
        }
示例#4
0
        private async Task InternalRefresh()
        {
            // should be called from STA
            var wasSelected = selectedPlugin?.InternalName;

            selectedPlugin = null;
            InstalledPlugins.Clear();
            AvailablePlugins.Clear();
            FreshPlugins.Clear();
            MarkedForRemovalPlugins.Clear();

            try
            {
                IsLoadingLocalPlugins = true;
                // making sure that all packages are loaded
                await PluginManager.PreloadTask.ConfigureAwait(false);

                var installedPlugins = await Task.Run(() => PluginManager.GetAllPlugins().ToList()).ConfigureAwait(false);

                // display installed plugins
                Dispatch(() =>
                {
                    foreach (var vm in installedPlugins.Select(plugin => new LoadedPluginViewModel(plugin, this)))
                    {
                        MovePluginToCorrectCollection(vm);
                    }
                    IsLoadingLocalPlugins = false;
                    RestorePluginSelection(wasSelected);
                });

                await LoadRegistryPlugins(installedPlugins);

                // restore plugin selection if user didn't select other menu item while plugins were loading
                RestorePluginSelection(wasSelected);
            }
            finally
            {
                // in case plugin loading failed, disable loading anyway
                Dispatch(() => IsLoadingLocalPlugins = false);
            }
        }
 public PluginView(IPluginViewModel pluginViewModel) : this()
 {
     DataContext = pluginViewModel;
 }