示例#1
0
        private async Task ReloadPackagesAsync()
        {
            _reloadPackagesCancellationTokenSource?.Cancel();
            _reloadPackagesCancellationTokenSource = new CancellationTokenSource();

            var identities = _localPackagesService.RequireInstalledPackages()
                             .Where(i => i.Id.ContainsIgnoreCase(_lastFilterString));

            var tasks = identities.Select(async i =>
            {
                var packageInfo = await _localPackagesService.GetInstalledPackageInfoAsync(i.Id);

                if (packageInfo == null)
                {
                    return(new PackageRowPresentationModel(i.Id, true, i.Version.ToString(),
                                                           Resources.Load <Texture2D>(Paths.DefaultIconResourceName),
                                                           Enumerable.Empty <string>(),
                                                           Enumerable.Empty <string>()));
                }

                return(await CreatePresentationModelAsync(packageInfo));
            });

            // todo break method if _reloadPackagesCancellationTokenSource.Cancelled
            IEnumerable <PackageRowPresentationModel> packages = await Task.WhenAll(tasks);

            if (!string.IsNullOrWhiteSpace(_lastSelectedAssembly))
            {
                packages = packages.Where(p => p.InstalledInAssemblies.Contains(_lastSelectedAssembly));
            }

            if (!string.IsNullOrWhiteSpace(_lastSelectedSource))
            {
                packages = packages.Where(p => p.Sources.Contains(_lastSelectedSource));
            }

            _mainWindow.InstalledPackages = packages;
        }