Example #1
0
        /// <summary>
        /// Update installed plugins
        /// </summary>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <param name="progress">The progress.</param>
        /// <returns>Task.</returns>
        public async Task Execute(CancellationToken cancellationToken, IProgress <double> progress)
        {
            progress.Report(0);

            var packagesToInstall = (await _installationManager.GetAvailablePluginUpdatesWithoutRegistrationInfo(true, cancellationToken).ConfigureAwait(false)).ToList();

            progress.Report(10);

            var numComplete = 0;

            // Create tasks for each one
            var tasks = packagesToInstall.Select(i => Task.Run(async() =>
            {
                cancellationToken.ThrowIfCancellationRequested();

                try
                {
                    await _installationManager.InstallPackage(i, new Progress <double>(), cancellationToken).ConfigureAwait(false);
                }
                catch (OperationCanceledException)
                {
                    // InstallPackage has it's own inner cancellation token, so only throw this if it's ours
                    if (cancellationToken.IsCancellationRequested)
                    {
                        throw;
                    }
                }
                catch (HttpException ex)
                {
                    _logger.ErrorException("Error downloading {0}", ex, i.name);
                }
                catch (IOException ex)
                {
                    _logger.ErrorException("Error updating {0}", ex, i.name);
                }

                // Update progress
                lock (progress)
                {
                    numComplete++;
                    double percent = numComplete;
                    percent       /= packagesToInstall.Count;

                    progress.Report((90 * percent) + 10);
                }
            }));

            cancellationToken.ThrowIfCancellationRequested();

            await Task.WhenAll(tasks).ConfigureAwait(false);

            progress.Report(100);
        }
Example #2
0
        /// <summary>
        /// Gets the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>System.Object.</returns>
        /// <exception cref="System.ArgumentException">Unsupported PackageType</exception>
        public object Get(GetPackageVersionUpdates request)
        {
            var result = new List <PackageVersionInfo>();

            if (request.PackageType == PackageType.UserInstalled || request.PackageType == PackageType.All)
            {
                result.AddRange(_installationManager.GetAvailablePluginUpdatesWithoutRegistrationInfo(false, CancellationToken.None).Result.ToList());
            }

            else if (request.PackageType == PackageType.System || request.PackageType == PackageType.All)
            {
                var updateCheckResult = _appHost.CheckForApplicationUpdate(CancellationToken.None, new Progress <double>()).Result;

                if (updateCheckResult.IsUpdateAvailable)
                {
                    result.Add(updateCheckResult.Package);
                }
            }

            return(ToOptimizedResult(result));
        }