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