Skip to content

Commit 900ee46

Browse files
authored
Merge pull request #117 from tigattack/refactor/updateinfo
2 parents 6bd44d2 + 60b38e7 commit 900ee46

2 files changed

Lines changed: 107 additions & 110 deletions

File tree

AlertSender.ps1

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -29,60 +29,6 @@ function Get-Bottleneck {
2929
return $bottleneck
3030
}
3131

32-
class UpdateShouldNotifyResult {
33-
[Parameter(Mandatory)]
34-
[bool]$ShouldNotify
35-
[string]$Message
36-
}
37-
38-
function Get-UpdateShouldNotify {
39-
[CmdletBinding()]
40-
[OutputType([bool])]
41-
param (
42-
[Parameter(Mandatory)]
43-
[PSObject]$UpdateStatus
44-
)
45-
46-
$result = [UpdateShouldNotifyResult]@{
47-
ShouldNotify = $true
48-
}
49-
50-
# If no update is available, no need to notify
51-
if ($UpdateStatus.Status -ne 'Behind') {
52-
$result.ShouldNotify = $false
53-
$result.Message = 'No update available.'
54-
return $result
55-
}
56-
57-
# Define marker file path
58-
$markerFilePath = "$PSScriptRoot\update-notification.marker"
59-
60-
# Check if marker file exists
61-
if (Test-Path $markerFilePath) {
62-
$markerFile = Get-Item $markerFilePath
63-
$timeSinceLastNotification = (Get-Date) - $markerFile.LastWriteTime
64-
65-
# If less than 24 hours have passed since last notification, don't notify
66-
if ($timeSinceLastNotification.TotalHours -lt 24) {
67-
$result.ShouldNotify = $false
68-
$result.Message = "Update notification suppressed. Last notification was $($timeSinceLastNotification.TotalHours.ToString('0.00')) hours ago."
69-
70-
return $result
71-
}
72-
}
73-
74-
# Create or touch the marker file to indicate notification was sent
75-
if (Test-Path $markerFilePath) {
76-
(Get-Item $markerFilePath).LastWriteTime = Get-Date
77-
}
78-
else {
79-
New-Item -Path $markerFilePath -ItemType File -Force | Out-Null
80-
$result.Message = "Created update notification marker file at $markerFilePath"
81-
}
82-
83-
return $result
84-
}
85-
8632
# Convert config from JSON
8733
$Config = $Config | ConvertFrom-Json
8834

resources/UpdateInfo.psm1

Lines changed: 107 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,124 @@
1-
function Get-UpdateStatus {
1+
class UpdateShouldNotifyResult {
2+
[Parameter(Mandatory)]
3+
[bool]$ShouldNotify
4+
[string]$Message
5+
}
26

3-
process {
4-
# Get currently downloaded version of this project.
5-
$currentVersion = (Get-Content "$PSScriptRoot\version.txt" -Raw).Trim()
7+
function Get-UpdateShouldNotify {
8+
[CmdletBinding()]
9+
[OutputType([UpdateShouldNotifyResult])]
10+
param (
11+
[Parameter(Mandatory)]
12+
[PSObject]$UpdateStatus
13+
)
614

7-
# Get all releases from GitHub.
8-
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
9-
try {
10-
$releases = Invoke-RestMethod -Uri 'https://api.github.com/repos/tigattack/VeeamNotify/releases' -Method Get
11-
}
12-
catch {
13-
$versionStatusCode = $_.Exception.Response.StatusCode.value__
14-
Write-LogMessage -Tag 'WARN' -Message "Failed to query GitHub for the latest version. Please check your internet connection and try again. Status code: $versionStatusCode"
15+
$result = [UpdateShouldNotifyResult]@{
16+
ShouldNotify = $true
17+
}
18+
19+
# If no update is available, no need to notify
20+
if ($UpdateStatus.Status -ne 'Behind') {
21+
$result.ShouldNotify = $false
22+
$result.Message = 'No update available.'
23+
return $result
24+
}
25+
26+
# Define marker file path
27+
$markerFilePath = "$PSScriptRoot\update-notification.marker"
28+
29+
# Check if marker file exists
30+
if (Test-Path $markerFilePath) {
31+
$markerFile = Get-Item $markerFilePath
32+
$timeSinceLastNotification = (Get-Date) - $markerFile.LastWriteTime
33+
34+
# If less than 24 hours have passed since last notification, don't notify
35+
if ($timeSinceLastNotification.TotalHours -lt 24) {
36+
$result.ShouldNotify = $false
37+
$result.Message = "Update notification suppressed. Last notification was $($timeSinceLastNotification.TotalHours.ToString('0.00')) hours ago."
38+
39+
return $result
1540
}
41+
}
1642

17-
if ($releases) {
18-
# Get latest stable
19-
foreach ($i in $releases) {
20-
if (-not $i.prerelease) {
21-
$latestStable = $i.tag_name
22-
break
23-
}
24-
}
43+
# Create or touch the marker file to indicate notification was sent
44+
if (Test-Path $markerFilePath) {
45+
(Get-Item $markerFilePath).LastWriteTime = Get-Date
46+
}
47+
else {
48+
New-Item -Path $markerFilePath -ItemType File -Force | Out-Null
49+
$result.Message = "Created update notification marker file at $markerFilePath"
50+
}
2551

26-
# Get latest prerelease
27-
foreach ($i in $releases) {
28-
if ($i.prerelease) {
29-
$latestPrerelease = $i.tag_name
30-
break
31-
}
32-
}
52+
return $result
53+
}
3354

34-
# Determine if prerelease
35-
$prerelease = $false
36-
foreach ($i in $releases) {
37-
if ($i.tag_name -eq $currentVersion -and $i.prerelease) {
38-
$prerelease = $true
39-
break
40-
}
41-
}
55+
function Get-UpdateStatus {
56+
# Get currently downloaded version of this project.
57+
$currentVersion = (Get-Content "$PSScriptRoot\version.txt" -Raw).Trim()
4258

43-
# Set version status
44-
if ($currentVersion -gt $latestStable) {
45-
$status = 'Ahead'
46-
}
47-
elseif ($currentVersion -lt $latestStable) {
48-
$status = 'Behind'
59+
# Get all releases from GitHub.
60+
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
61+
try {
62+
$releases = Invoke-RestMethod -Uri 'https://api.github.com/repos/tigattack/VeeamNotify/releases' -Method Get
63+
}
64+
catch {
65+
$versionStatusCode = $_.Exception.Response.StatusCode.value__
66+
Write-LogMessage -Tag 'WARN' -Message "Failed to query GitHub for the latest version. Please check your internet connection and try again. Status code: $versionStatusCode"
67+
}
68+
69+
if ($releases) {
70+
# Get latest stable
71+
foreach ($i in $releases) {
72+
if (-not $i.prerelease) {
73+
$latestStable = $i.tag_name
74+
break
4975
}
50-
else {
51-
$status = 'Current'
76+
}
77+
78+
# Get latest prerelease
79+
foreach ($i in $releases) {
80+
if ($i.prerelease) {
81+
$latestPrerelease = $i.tag_name
82+
break
5283
}
84+
}
5385

54-
# Create PSObject to return.
55-
$out = New-Object PSObject -Property @{
56-
CurrentVersion = $currentVersion
57-
LatestStable = $latestStable
58-
LatestPrerelease = $latestPrerelease
59-
Prerelease = $prerelease
60-
Status = $status
86+
# Determine if prerelease
87+
$prerelease = $false
88+
foreach ($i in $releases) {
89+
if ($i.tag_name -eq $currentVersion -and $i.prerelease) {
90+
$prerelease = $true
91+
break
6192
}
6293
}
94+
95+
# Set version status
96+
if ($currentVersion -gt $latestStable) {
97+
$status = 'Ahead'
98+
}
99+
elseif ($currentVersion -lt $latestStable) {
100+
$status = 'Behind'
101+
}
63102
else {
64-
# Create PSObject to return.
65-
$out = New-Object PSObject -Property @{
66-
CurrentVersion = $currentVersion
67-
}
103+
$status = 'Current'
68104
}
69105

70-
# Return PSObject.
71-
return $out
106+
# Create PSObject to return.
107+
$out = New-Object PSObject -Property @{
108+
CurrentVersion = $currentVersion
109+
LatestStable = $latestStable
110+
LatestPrerelease = $latestPrerelease
111+
Prerelease = $prerelease
112+
Status = $status
113+
}
114+
}
115+
else {
116+
# Create PSObject to return.
117+
$out = New-Object PSObject -Property @{
118+
CurrentVersion = $currentVersion
119+
}
72120
}
121+
122+
# Return PSObject.
123+
return $out
73124
}

0 commit comments

Comments
 (0)