param([string]$PreviewDirectory = (Join-Path $PSScriptRoot '../build/update-preview'), [switch]$Network) $ErrorActionPreference = 'Stop' . (Join-Path $PSScriptRoot '../resources/update.ps1') -Library [IO.Directory]::CreateDirectory($PreviewDirectory) | Out-Null Start-UpdateProgress try { if ($script:progressWindow.Status -ne 'Checking for updates') { throw 'Initial progress stage missing' } Show-UpdateProgress 'Downloading update' '42% - 1.6 / 3.9 MB' 42 if ($script:progressWindow.Percent -ne 42) { throw 'Determinate download progress missing' } $script:progressWindow.SavePreview((Join-Path $PreviewDirectory 'download.png')) if ($Network) { Receive-File 'https://gitea.hrynco.com/api/v1/repos/hrynco/hrynco-kswitcher/releases?limit=100' (Join-Path $PreviewDirectory 'releases.json') 2MB 'Downloading update' if ($script:progressWindow.Percent -ne 100) { throw 'Real download did not finish at 100 percent' } } foreach ($stage in @('Verifying download','Preparing installation','Closing KSwitcher','Installing update','Restarting KSwitcher','Restoring previous version')) { Show-UpdateProgress $stage 'Update stage under test' if ($script:progressWindow.Status -ne $stage -or $script:progressWindow.Percent -ne -1) { throw "Invalid progress stage: $stage" } } $script:progressWindow.SavePreview((Join-Path $PreviewDirectory 'rollback.png')) $script:progressWindow.Finish('Update completed','KSwitcher 0.6.11 is now running.',$true) if ($script:progressWindow.Status -ne 'Update completed' -or $script:progressWindow.Percent -ne 100) { throw 'Completion state missing' } Start-Sleep -Milliseconds 800 # Let the native progress-bar animation finish before capturing it. $script:progressWindow.SavePreview((Join-Path $PreviewDirectory 'complete.png')) $script:progressWindow.Finish('Update failed',"The updated application did not confirm startup.`r`nThe previous version has been restored and restarted.",$false) if ($script:progressWindow.Status -ne 'Update failed' -or $script:progressWindow.Percent -ne 0) { throw 'Failure state missing' } $script:progressWindow.SavePreview((Join-Path $PreviewDirectory 'failed.png')) 'Passed updater progress UI checks' } finally { $script:progressWindow.Dispose() $script:progressWindow = $null }