public override void Execute(CancellationToken cancellationToken) { base.Execute(cancellationToken); var integrityCheckStopwatch = new Stopwatch(); var optionalParams = new PatcherStatistics.OptionalParams { VersionId = _versionId, }; System.Func <PatcherStatistics.OptionalParams> timedParams = () => new PatcherStatistics.OptionalParams { VersionId = optionalParams.VersionId, Time = integrityCheckStopwatch.Elapsed.Seconds, }; try { PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.ValidationStarted, optionalParams); ExecuteInternal(cancellationToken); if (Results.Files.All(integrity => integrity.Status == FileIntegrityStatus.Ok)) { PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.ValidationSucceeded, timedParams()); } else { PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.ValidationFailed, timedParams()); } } catch (System.OperationCanceledException) { PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.ValidationCanceled, timedParams()); throw; } }
public void Update(CancellationToken cancellationToken) { Assert.MethodCalledOnlyOnce(ref _updateHasBeenCalled, "Update"); Assert.ApplicationIsInstalled(_context.App); DebugLogger.Log("Updating with diff strategy."); var latestVersionId = _context.App.GetLatestVersionId(true, cancellationToken); var currentLocalVersionId = _context.App.GetInstalledVersionId(); DebugLogger.LogVariable(latestVersionId, "latestVersionId"); DebugLogger.LogVariable(currentLocalVersionId, "currentLocalVersionId"); var commandFactory = new AppUpdaterCommandFactory(); var geolocateCommand = commandFactory.CreateGeolocateCommand(); geolocateCommand.Prepare(_status, cancellationToken); geolocateCommand.Execute(cancellationToken); var checkDiskSpaceCommand = commandFactory.CreateCheckDiskSpaceCommandForDiff(latestVersionId, _context, cancellationToken); checkDiskSpaceCommand.Prepare(_status, cancellationToken); checkDiskSpaceCommand.Execute(cancellationToken); var validateLicense = commandFactory.CreateValidateLicenseCommand(_context); validateLicense.Prepare(_status, cancellationToken); validateLicense.Execute(cancellationToken); var diffCommandsList = new List <DiffCommands>(); for (int i = currentLocalVersionId + 1; i <= latestVersionId; i++) { DiffCommands diffCommands; var resource = _context.App.RemoteData.GetDiffPackageResource(i, validateLicense.KeySecret, geolocateCommand.CountryCode, cancellationToken); diffCommands.Download = new DiffCommands.Context <IDownloadPackageCommand> { Command = commandFactory.CreateDownloadDiffPackageCommand(i, validateLicense.KeySecret, geolocateCommand.CountryCode, _context, cancellationToken), VersionId = i, Size = resource.Size, }; diffCommands.Download.Command.Prepare(_status, cancellationToken); diffCommands.Install = commandFactory.CreateInstallDiffCommand(i, _context); diffCommands.Install.Prepare(_status, cancellationToken); diffCommandsList.Add(diffCommands); } foreach (var diffCommands in diffCommandsList) { var optionalParams = new PatcherStatistics.OptionalParams { Size = diffCommands.Download.Size, VersionId = diffCommands.Download.VersionId }; try { PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.PatchDownloadStarted, optionalParams); diffCommands.Download.Command.Execute(cancellationToken); PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.PatchDownloadSucceeded, optionalParams); } catch (OperationCanceledException) { PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.PatchDownloadCanceled, optionalParams); throw; } catch (Exception) { PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.PatchDownloadFailed, optionalParams); throw; } diffCommands.Install.Execute(cancellationToken); } _context.App.DownloadDirectory.Clear(); }
public void Update(CancellationToken cancellationToken) { Assert.MethodCalledOnlyOnce(ref _updateHasBeenCalled, "Update"); DebugLogger.Log("Updating with content strategy."); var commandFactory = new Commands.AppUpdaterCommandFactory(); var geolocateCommand = commandFactory.CreateGeolocateCommand(); geolocateCommand.Prepare(_status); geolocateCommand.Execute(cancellationToken); var latestVersionId = _context.App.GetLatestVersionId(); DebugLogger.LogVariable(latestVersionId, "latestVersionId"); var checkDiskSpaceCommand = commandFactory.CreateCheckDiskSpaceCommandForContent(latestVersionId, _context); checkDiskSpaceCommand.Prepare(_status); checkDiskSpaceCommand.Execute(cancellationToken); var validateLicense = commandFactory.CreateValidateLicenseCommand(_context); validateLicense.Prepare(_status); validateLicense.Execute(cancellationToken); var uninstall = commandFactory.CreateUninstallCommand(_context); uninstall.Prepare(_status); var resource = _context.App.RemoteData.GetContentPackageResource(latestVersionId, validateLicense.KeySecret, geolocateCommand.CountryCode); var downloadContentPackage = commandFactory.CreateDownloadContentPackageCommand(latestVersionId, validateLicense.KeySecret, geolocateCommand.CountryCode, _context); downloadContentPackage.Prepare(_status); var installContent = commandFactory.CreateInstallContentCommand(latestVersionId, _context); installContent.Prepare(_status); uninstall.Execute(cancellationToken); var downloadStopwatch = new Stopwatch(); var optionalParams = new PatcherStatistics.OptionalParams { VersionId = latestVersionId, Size = resource.Size, }; Func <PatcherStatistics.OptionalParams> timedParams = () => new PatcherStatistics.OptionalParams { VersionId = optionalParams.VersionId, Size = optionalParams.Size, Time = downloadStopwatch.Elapsed.Seconds, }; try { PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.ContentDownloadStarted, optionalParams); downloadStopwatch.Start(); downloadContentPackage.Execute(cancellationToken); PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.ContentDownloadSucceeded, timedParams()); } catch (OperationCanceledException) { PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.ContentDownloadCanceled, timedParams()); throw; } catch (Exception) { PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.ContentDownloadFailed, timedParams()); throw; } installContent.Execute(cancellationToken); _context.App.DownloadDirectory.Clear(); }