#pragma warning disable RECS0165 // Asynchronous methods should return a Task instead of void protected override async void OnInitialize() #pragma warning restore RECS0165 // Asynchronous methods should return a Task instead of void { try { if (_hasLoaded) { return; } Observable.FromEventPattern <EventArgs>(_configService, "SettingsChanged") .ObserveOnDispatcher() .Subscribe(eventPattern => ListViewMode = ((AppConfiguration)eventPattern.Sender).DefaultToTileViewForLocalSource ? ListViewMode.Tile : ListViewMode.Standard); await LoadPackages(); Observable.FromEventPattern <PropertyChangedEventArgs>(this, "PropertyChanged") .Where( eventPattern => eventPattern.EventArgs.PropertyName == nameof(MatchWord) || eventPattern.EventArgs.PropertyName == nameof(SearchQuery) || eventPattern.EventArgs.PropertyName == nameof(ShowOnlyPackagesWithUpdate)) .ObserveOnDispatcher() .Subscribe(eventPattern => PackageSource.Refresh()); Observable.FromEventPattern <PropertyChangedEventArgs>(this, "PropertyChanged") .Where(eventPattern => eventPattern.EventArgs.PropertyName == nameof(ListViewMode)) .ObserveOnDispatcher() .Subscribe(eventPattern => { if (ListViewMode == ListViewMode.Tile) { // reset custom sorting for now var listColView = PackageSource as ListCollectionView; if (listColView != null) { listColView.CustomSort = null; } } }); _hasLoaded = true; var chocoPackage = _packages.FirstOrDefault(p => p.Id.ToLower() == "chocolatey"); if (chocoPackage != null && chocoPackage.CanUpdate) { #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed _progressService.ShowMessageAsync(Resources.LocalSourceViewModel_Chocolatey, Resources.LocalSourceViewModel_UpdateAvailableForChocolatey) .ConfigureAwait(false); #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed } } catch (Exception ex) { Logger.Fatal("Local source control view model failed to load.", ex); throw; } }
private async Task LoadPackages() { if (IsLoading) { return; } IsLoading = true; IsShowOnlyPackagesWithUpdateEnabled = false; try { _packages.Clear(); Packages.Clear(); var packages = (await _chocolateyService.GetInstalledPackages()) .Select(Mapper.Map <IPackageViewModel>).ToList(); foreach (var packageViewModel in packages) { _packages.Add(packageViewModel); Packages.Add(packageViewModel); } FirstLoadIncomplete = false; var updates = await _chocolateyService.GetOutdatedPackages(); foreach (var update in updates) { await _eventAggregator.PublishOnUIThreadAsync(new PackageHasUpdateMessage(update.Id, update.Version)); } PackageSource.Refresh(); } catch (ConnectionClosedException) { Logger.Warning("Threw connection closed message while processing load packages."); } catch (Exception ex) { Logger.Fatal("Packages failed to load", ex); throw; } finally { IsLoading = false; IsShowOnlyPackagesWithUpdateEnabled = true; } }
public async Task HandleAsync(PackageChangedMessage message, CancellationToken cancellationToken) #endif { switch (message.ChangeType) { case PackageChangeType.Pinned: PackageSource.Refresh(); break; case PackageChangeType.Unpinned: if (message.Package.SourceType != chocolatey.infrastructure.app.domain.SourceType.normal) { PackageSource.Refresh(); } else { // Local file system var package = Packages.First(p => p.Id == message.Id); if (package.LatestVersion != null) { PackageSource.Refresh(); } else { var outOfDatePackages = await _chocolateyService.GetOutdatedPackages(package.IsPrerelease, package.Id, false); foreach (var update in outOfDatePackages) { await _eventAggregator.PublishOnUIThreadAsync(new PackageHasUpdateMessage(update.Id, update.Version)); } PackageSource.Refresh(); } } break; case PackageChangeType.Uninstalled: Packages.Remove(Packages.First(p => p.Id == message.Id)); break; default: await LoadPackages(); break; } }
private async Task CheckOutdated(bool forceCheckForOutdated) { IsLoading = true; try { var updates = await _chocolateyService.GetOutdatedPackages(false, null, forceCheckForOutdated); // Use a list of task for correct async loop var listOfTasks = updates.Select(update => _eventAggregator.PublishOnUIThreadAsync(new PackageHasUpdateMessage(update.Id, update.Version))).ToList(); await Task.WhenAll(listOfTasks); PackageSource.Refresh(); } catch (ConnectionClosedException) { Logger.Warning("Threw connection closed message while processing load packages."); } catch (Exception ex) { Logger.Fatal("Packages failed to load", ex); throw; } finally { IsLoading = false; // Only enable the "Show only outdated packages" when it makes sense. // It does not make sense to enable the checkbox when we haven't checked for // outdated packages. We should only enable the checkbox here when: (or) // 1. the "Prevent Automated Outdated Packages Check" is disabled // 2. forced a check for outdated packages. IsShowOnlyPackagesWithUpdateEnabled = !_configService.GetAppConfiguration().PreventAutomatedOutdatedPackagesCheck || forceCheckForOutdated; // Force invalidating the command stuff. // This helps us to prevent disabled buttons after executing this routine. // But IMO it has something to do with Caliburn. CommandManager.InvalidateRequerySuggested(); } }
public async Task Handle(PackageChangedMessage message) { switch (message.ChangeType) { case PackageChangeType.Pinned: PackageSource.Refresh(); break; case PackageChangeType.Unpinned: var package = Packages.First(p => p.Id == message.Id); if (package.LatestVersion != null) { PackageSource.Refresh(); } else { var outOfDatePackages = await _chocolateyService.GetOutdatedPackages(package.IsPrerelease, package.Id); foreach (var update in outOfDatePackages) { await _eventAggregator.PublishOnUIThreadAsync(new PackageHasUpdateMessage(update.Id, update.Version)); } PackageSource.Refresh(); } break; case PackageChangeType.Uninstalled: Packages.Remove(Packages.First(p => p.Id == message.Id)); break; default: await LoadPackages(); break; } }
#pragma warning disable RECS0165 // Asynchronous methods should return a Task instead of void protected override async void OnInitialize() #pragma warning restore RECS0165 // Asynchronous methods should return a Task instead of void { try { if (_hasLoaded) { return; } await LoadPackages(); Observable.FromEventPattern <PropertyChangedEventArgs>(this, "PropertyChanged") .Where( eventPattern => eventPattern.EventArgs.PropertyName == "MatchWord" || eventPattern.EventArgs.PropertyName == "SearchQuery" || eventPattern.EventArgs.PropertyName == "ShowOnlyPackagesWithUpdate") .ObserveOnDispatcher() .Subscribe(eventPattern => PackageSource.Refresh()); _hasLoaded = true; var chocoPackage = _packages.FirstOrDefault(p => p.Id.ToLower() == "chocolatey"); if (chocoPackage != null && chocoPackage.CanUpdate) { #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed _progressService.ShowMessageAsync(Resources.LocalSourceViewModel_Chocolatey, Resources.LocalSourceViewModel_UpdateAvailableForChocolatey) .ConfigureAwait(false); #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed } } catch (Exception ex) { Logger.Fatal("Local source control view model failed to load.", ex); throw; } }
#pragma warning disable RECS0165 // Asynchronous methods should return a Task instead of void protected override async void OnInitialize() #pragma warning restore RECS0165 // Asynchronous methods should return a Task instead of void { try { if (HasLoaded) { return; } ListViewMode = _configService.GetEffectiveConfiguration().DefaultToTileViewForLocalSource ?? true ? ListViewMode.Tile : ListViewMode.Standard; ShowAdditionalPackageInformation = _configService.GetEffectiveConfiguration().ShowAdditionalPackageInformation ?? false; Observable.FromEventPattern <EventArgs>(_configService, "SettingsChanged") .ObserveOnDispatcher() .Subscribe(eventPattern => { var appConfig = (AppConfiguration)eventPattern.Sender; ListViewMode = appConfig.DefaultToTileViewForLocalSource ?? false ? ListViewMode.Tile : ListViewMode.Standard; ShowAdditionalPackageInformation = appConfig.ShowAdditionalPackageInformation ?? false; }); await LoadPackages(); Observable.FromEventPattern <PropertyChangedEventArgs>(this, "PropertyChanged") .Where( eventPattern => eventPattern.EventArgs.PropertyName == nameof(MatchWord) || eventPattern.EventArgs.PropertyName == nameof(SearchQuery) || eventPattern.EventArgs.PropertyName == nameof(ShowOnlyPackagesWithUpdate)) .ObserveOnDispatcher() .Subscribe(eventPattern => PackageSource.Refresh()); Observable.FromEventPattern <PropertyChangedEventArgs>(this, "PropertyChanged") .Where(eventPattern => eventPattern.EventArgs.PropertyName == nameof(ListViewMode)) .ObserveOnDispatcher() .Subscribe(eventPattern => { if (ListViewMode == ListViewMode.Tile) { // reset custom sorting for now var listColView = PackageSource as ListCollectionView; if (listColView != null) { listColView.CustomSort = null; } } }); HasLoaded = true; var chocoPackage = _packages.FirstOrDefault(p => p.Id.ToLower() == "chocolatey"); if (chocoPackage != null && chocoPackage.CanUpdate) { await _dialogService.ShowMessageAsync( L(nameof(Resources.LocalSourceViewModel_Chocolatey)), L(nameof(Resources.LocalSourceViewModel_UpdateAvailableForChocolatey))) .ConfigureAwait(false); } } catch (Exception ex) { Logger.Fatal("Local source control view model failed to load.", ex); throw; } }