Пример #1
0
 private bool BackupPlugin(IPlugin plugin)
 {
     //Backup current version if installed and different from the one we are installing
     try
     {
         IPlugin ip = InstalledPlugins.Find(plugin);
         if (ip != null && ip.Version != plugin.Version)
         {
             if (!Directory.Exists(backupDir))
             {
                 Directory.CreateDirectory(backupDir);
             }
             string oldPluginPath = Path.Combine(ApplicationPaths.AppPluginPath, plugin.Filename);
             string bpPath        = Path.Combine(backupDir, plugin.Filename);
             File.Copy(oldPluginPath, bpPath, true);
             IPlugin bp = backedUpPlugins.Find(plugin);
             if (bp != null)
             {
                 backedUpPlugins.Remove(bp);
             }
             backedUpPlugins.Add(Plugin.FromFile(bpPath, false));
             return(true);
         }
     }
     catch (Exception e)
     {
         Logger.ReportException("Error trying to backup current plugin", e);
     }
     return(false);
 }
Пример #2
0
        private void InstalledPluginsChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            //TODO re-sort

            RemoveInstalledPluginsFromList();

            InstalledPluginSerializer.Instance.StoreInstalledPlugins(InstalledPlugins.ToList(), EntityViewModel);
        }
Пример #3
0
        /// <summary>
        /// Deserialize PluginInfo from json
        /// </summary>
        /// <param name="json">Json data of PluginInfo</param>
        /// <returns>True if data are loaded, otherwise False</returns>
        protected virtual bool DeserializePluginInfo(string json)
        {
            var pluginsInfo = JsonConvert.DeserializeObject <PluginsInfo>(json);

            InstalledPluginNames   = pluginsInfo.InstalledPluginNames;
            InstalledPlugins       = pluginsInfo.InstalledPlugins;
            PluginNamesToUninstall = pluginsInfo.PluginNamesToUninstall;
            PluginNamesToDelete    = pluginsInfo.PluginNamesToDelete;
            PluginNamesToInstall   = pluginsInfo.PluginNamesToInstall;

            return(InstalledPlugins.Any() || PluginNamesToUninstall.Any() || PluginNamesToDelete.Any() ||
                   PluginNamesToInstall.Any());
        }
Пример #4
0
        protected override void RenderPackages()
        {
            PluginsListBox.Clear();

            PluginsListBox.Loading.ShowLoading(PluginsListBox.PackageListPane);
            AppHost.DoEvents();

            var searchText = PluginsListBox.Search.Text;
            var packages   = InstalledPlugins.OfType <PackagePluginDescriptor>().Select(p => p.Package).ToList();

            var updatePackages = new List <Tuple <IPackageRepository, IPackage> >();

            foreach (var gallery in AppHost.Plugins.GetPluginGalleries())
            {
                var repository = PackageRepositoryFactory.Default.CreateRepository(gallery.Location);

                List <IPackage> updates;
                try
                {
                    updates = repository.GetUpdates(packages, PluginsListBox.IncludePrereleases, false).ToList();
                }
                catch (ArgumentException ex)
                {
                    AppHost.Output.LogException(ex);
                    continue;
                }

                updatePackages.AddRange(updates.Select(package => new Tuple <IPackageRepository, IPackage>(repository, package)));
            }

            var listBoxItems = new List <PluginsListBoxItem>();

            foreach (var tuple in updatePackages)
            {
                if (!tuple.Item2.Title.IsFilterMatch(searchText))
                {
                    continue;
                }

                var plugin = new PackagePluginDescriptor(tuple.Item1, tuple.Item2);
                listBoxItems.Add(new PluginsListBoxItem(this, plugin, false, false, true, false));
            }

            PluginsListBox.RenderPlugins(listBoxItems);
        }
Пример #5
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);
            }
        }
Пример #6
0
        protected override void RenderPackages()
        {
            PluginsListBox.Clear();
            PluginsListBox.SupportPrereleases = true;

            PluginsListBox.Loading.ShowLoading(PluginsListBox.PackageListPane);
            AppHost.DoEvents();

            var plugins = new List <BasePluginDescriptor>();

            IPackageRepository repository;

            try
            {
                repository = PackageRepositoryFactory.Default.CreateRepository(Url);
            }
            catch (Exception ex)
            {
                AppHost.Output.LogException(ex);
                AppHost.MessageBox(string.Format("The URL of the repository \"{0}\" is invalid:\n\n{1}\n\n{2}", FeedName, Url, ex.Message), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            var packages = new List <IPackage>();

            try
            {
                var query = repository.Search(PluginsListBox.Search.Text, PluginsListBox.IncludePrereleases);

                query = query.OrderByDescending(p => p.DownloadCount).ThenBy(p => p.Title).Skip(PageIndex * 10);

                packages = query.ToList().GroupBy(p => p.Id).Select(y => y.OrderByDescending(p => p.Version).First()).ToList();
            }
            catch (WebException ex)
            {
                AppHost.MessageBox("Failed to communicated with the server: " + Url + "\n\nThe server responded with: " + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            catch (UriFormatException)
            {
                AppHost.MessageBox("The URL is invalid: " + Url, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }

            var listBoxItems = new List <PluginsListBoxItem>();

            var count = 0;

            foreach (var package in packages)
            {
                var plugin = new PackagePluginDescriptor(repository, package);
                plugins.Add(plugin);

                count++;
                if (count == 10)
                {
                    break;
                }

                var isInstalled = InstalledPlugins.OfType <PackagePluginDescriptor>().Any(p => p.Package.Id == package.Id && p.Package.Version == package.Version);

                listBoxItems.Add(new PluginsListBoxItem(this, plugin, true, false, false, isInstalled));
            }

            var total = PageIndex * 10 + packages.Count;

            var currentPage = PageIndex;
            var firstPage   = currentPage - 2;

            if (firstPage < 0)
            {
                firstPage = 0;
            }

            var lastPage = total % 10 == 0 ? total / 10 - 1 : total / 10;

            if (lastPage > firstPage + 4)
            {
                lastPage = firstPage + 4;
            }

            PluginsListBox.RenderPlugins(listBoxItems);

            PluginsListBox.RenderPager(currentPage, firstPage, lastPage);
        }
Пример #7
0
 public void EnablePlugin(InstalledPlugin installedPlugin)
 {
     installedPlugin.IsEnabled = true;
     RaisePropertyChanged(this, new PropertyChangedEventArgs(nameof(installedPlugin.IsEnabled)));
     InstalledPluginSerializer.Instance.StoreInstalledPlugins(InstalledPlugins.ToList(), EntityViewModel);
 }