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); } }
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); } }
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(); } }
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; }