32 lines
2.3 KiB
PowerShell
32 lines
2.3 KiB
PowerShell
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
|
|
}
|