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(); var currentLocalVersionId = _context.App.GetInstalledVersionId(); DebugLogger.LogVariable(latestVersionId, "latestVersionId"); DebugLogger.LogVariable(currentLocalVersionId, "currentLocalVersionId"); var commandFactory = new AppUpdaterCommandFactory(); var geolocateCommand = commandFactory.CreateGeolocateCommand(); geolocateCommand.Prepare(_context.StatusMonitor); geolocateCommand.Execute(cancellationToken); var checkDiskSpaceCommand = commandFactory.CreateCheckDiskSpaceCommandForDiff(latestVersionId, _context); checkDiskSpaceCommand.Prepare(_context.StatusMonitor); checkDiskSpaceCommand.Execute(cancellationToken); var validateLicense = commandFactory.CreateValidateLicenseCommand(_context); validateLicense.Prepare(_context.StatusMonitor); validateLicense.Execute(cancellationToken); var diffCommandsList = new List <DiffCommands>(); for (int i = currentLocalVersionId + 1; i <= latestVersionId; i++) { DiffCommands diffCommands; diffCommands.Download = commandFactory.CreateDownloadDiffPackageCommand(i, validateLicense.KeySecret, geolocateCommand.CountryCode, _context); diffCommands.Download.Prepare(_context.StatusMonitor); diffCommands.Install = commandFactory.CreateInstallDiffCommand(i, _context); diffCommands.Install.Prepare(_context.StatusMonitor); diffCommandsList.Add(diffCommands); } foreach (var diffCommands in diffCommandsList) { diffCommands.Download.Execute(cancellationToken); diffCommands.Install.Execute(cancellationToken); } _context.App.DownloadDirectory.Clear(); }
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(); }