From 61f9fa956234db15529b83e6a7799fb024377ad2 Mon Sep 17 00:00:00 2001 From: tigattack <10629864+tigattack@users.noreply.github.com> Date: Thu, 22 May 2025 18:41:35 +0100 Subject: [PATCH 1/2] refactor(updateinfo): move logic out of process block --- resources/UpdateInfo.psm1 | 113 +++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 58 deletions(-) diff --git a/resources/UpdateInfo.psm1 b/resources/UpdateInfo.psm1 index 3c1abbb..60c2881 100644 --- a/resources/UpdateInfo.psm1 +++ b/resources/UpdateInfo.psm1 @@ -1,73 +1,70 @@ function Get-UpdateStatus { + # Get currently downloaded version of this project. + $currentVersion = (Get-Content "$PSScriptRoot\version.txt" -Raw).Trim() - process { - # Get currently downloaded version of this project. - $currentVersion = (Get-Content "$PSScriptRoot\version.txt" -Raw).Trim() - - # Get all releases from GitHub. - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - try { - $releases = Invoke-RestMethod -Uri 'https://api.github.com/repos/tigattack/VeeamNotify/releases' -Method Get - } - catch { - $versionStatusCode = $_.Exception.Response.StatusCode.value__ - Write-LogMessage -Tag 'WARN' -Message "Failed to query GitHub for the latest version. Please check your internet connection and try again. Status code: $versionStatusCode" - } - - if ($releases) { - # Get latest stable - foreach ($i in $releases) { - if (-not $i.prerelease) { - $latestStable = $i.tag_name - break - } - } + # Get all releases from GitHub. + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + try { + $releases = Invoke-RestMethod -Uri 'https://api.github.com/repos/tigattack/VeeamNotify/releases' -Method Get + } + catch { + $versionStatusCode = $_.Exception.Response.StatusCode.value__ + Write-LogMessage -Tag 'WARN' -Message "Failed to query GitHub for the latest version. Please check your internet connection and try again. Status code: $versionStatusCode" + } - # Get latest prerelease - foreach ($i in $releases) { - if ($i.prerelease) { - $latestPrerelease = $i.tag_name - break - } + if ($releases) { + # Get latest stable + foreach ($i in $releases) { + if (-not $i.prerelease) { + $latestStable = $i.tag_name + break } + } - # Determine if prerelease - $prerelease = $false - foreach ($i in $releases) { - if ($i.tag_name -eq $currentVersion -and $i.prerelease) { - $prerelease = $true - break - } + # Get latest prerelease + foreach ($i in $releases) { + if ($i.prerelease) { + $latestPrerelease = $i.tag_name + break } + } - # Set version status - if ($currentVersion -gt $latestStable) { - $status = 'Ahead' - } - elseif ($currentVersion -lt $latestStable) { - $status = 'Behind' - } - else { - $status = 'Current' + # Determine if prerelease + $prerelease = $false + foreach ($i in $releases) { + if ($i.tag_name -eq $currentVersion -and $i.prerelease) { + $prerelease = $true + break } + } - # Create PSObject to return. - $out = New-Object PSObject -Property @{ - CurrentVersion = $currentVersion - LatestStable = $latestStable - LatestPrerelease = $latestPrerelease - Prerelease = $prerelease - Status = $status - } + # Set version status + if ($currentVersion -gt $latestStable) { + $status = 'Ahead' + } + elseif ($currentVersion -lt $latestStable) { + $status = 'Behind' } else { - # Create PSObject to return. - $out = New-Object PSObject -Property @{ - CurrentVersion = $currentVersion - } + $status = 'Current' } - # Return PSObject. - return $out + # Create PSObject to return. + $out = New-Object PSObject -Property @{ + CurrentVersion = $currentVersion + LatestStable = $latestStable + LatestPrerelease = $latestPrerelease + Prerelease = $prerelease + Status = $status + } + } + else { + # Create PSObject to return. + $out = New-Object PSObject -Property @{ + CurrentVersion = $currentVersion + } } + + # Return PSObject. + return $out } From 60b38e764f41f8fb2cea4f74bb53d04678c97d62 Mon Sep 17 00:00:00 2001 From: tigattack <10629864+tigattack@users.noreply.github.com> Date: Thu, 22 May 2025 18:42:27 +0100 Subject: [PATCH 2/2] refactor: move `Get-UpdateShouldNotify` & associated class to `UpdateInfo` module --- AlertSender.ps1 | 54 --------------------------------------- resources/UpdateInfo.psm1 | 54 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/AlertSender.ps1 b/AlertSender.ps1 index 869ac9d..12553fe 100644 --- a/AlertSender.ps1 +++ b/AlertSender.ps1 @@ -29,60 +29,6 @@ function Get-Bottleneck { return $bottleneck } -class UpdateShouldNotifyResult { - [Parameter(Mandatory)] - [bool]$ShouldNotify - [string]$Message -} - -function Get-UpdateShouldNotify { - [CmdletBinding()] - [OutputType([bool])] - param ( - [Parameter(Mandatory)] - [PSObject]$UpdateStatus - ) - - $result = [UpdateShouldNotifyResult]@{ - ShouldNotify = $true - } - - # If no update is available, no need to notify - if ($UpdateStatus.Status -ne 'Behind') { - $result.ShouldNotify = $false - $result.Message = 'No update available.' - return $result - } - - # Define marker file path - $markerFilePath = "$PSScriptRoot\update-notification.marker" - - # Check if marker file exists - if (Test-Path $markerFilePath) { - $markerFile = Get-Item $markerFilePath - $timeSinceLastNotification = (Get-Date) - $markerFile.LastWriteTime - - # If less than 24 hours have passed since last notification, don't notify - if ($timeSinceLastNotification.TotalHours -lt 24) { - $result.ShouldNotify = $false - $result.Message = "Update notification suppressed. Last notification was $($timeSinceLastNotification.TotalHours.ToString('0.00')) hours ago." - - return $result - } - } - - # Create or touch the marker file to indicate notification was sent - if (Test-Path $markerFilePath) { - (Get-Item $markerFilePath).LastWriteTime = Get-Date - } - else { - New-Item -Path $markerFilePath -ItemType File -Force | Out-Null - $result.Message = "Created update notification marker file at $markerFilePath" - } - - return $result -} - # Convert config from JSON $Config = $Config | ConvertFrom-Json diff --git a/resources/UpdateInfo.psm1 b/resources/UpdateInfo.psm1 index 60c2881..cb0d32b 100644 --- a/resources/UpdateInfo.psm1 +++ b/resources/UpdateInfo.psm1 @@ -1,3 +1,57 @@ +class UpdateShouldNotifyResult { + [Parameter(Mandatory)] + [bool]$ShouldNotify + [string]$Message +} + +function Get-UpdateShouldNotify { + [CmdletBinding()] + [OutputType([UpdateShouldNotifyResult])] + param ( + [Parameter(Mandatory)] + [PSObject]$UpdateStatus + ) + + $result = [UpdateShouldNotifyResult]@{ + ShouldNotify = $true + } + + # If no update is available, no need to notify + if ($UpdateStatus.Status -ne 'Behind') { + $result.ShouldNotify = $false + $result.Message = 'No update available.' + return $result + } + + # Define marker file path + $markerFilePath = "$PSScriptRoot\update-notification.marker" + + # Check if marker file exists + if (Test-Path $markerFilePath) { + $markerFile = Get-Item $markerFilePath + $timeSinceLastNotification = (Get-Date) - $markerFile.LastWriteTime + + # If less than 24 hours have passed since last notification, don't notify + if ($timeSinceLastNotification.TotalHours -lt 24) { + $result.ShouldNotify = $false + $result.Message = "Update notification suppressed. Last notification was $($timeSinceLastNotification.TotalHours.ToString('0.00')) hours ago." + + return $result + } + } + + # Create or touch the marker file to indicate notification was sent + if (Test-Path $markerFilePath) { + (Get-Item $markerFilePath).LastWriteTime = Get-Date + } + else { + New-Item -Path $markerFilePath -ItemType File -Force | Out-Null + $result.Message = "Created update notification marker file at $markerFilePath" + } + + return $result +} + function Get-UpdateStatus { # Get currently downloaded version of this project. $currentVersion = (Get-Content "$PSScriptRoot\version.txt" -Raw).Trim()