diff --git a/ms-spotify-check.ps1 b/ms-spotify-check.ps1 index a1a7ac8..849ab1a 100644 --- a/ms-spotify-check.ps1 +++ b/ms-spotify-check.ps1 @@ -8,6 +8,38 @@ function Write-Log { Write-Host "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - $Message" } +function Invoke-WithRetry { + param ( + [ScriptBlock]$ScriptBlock, + [int]$MaxAttempts = 3, + [int]$DelaySeconds = 5 + ) + + $attempt = 1 + $success = $false + + while (-not $success -and $attempt -le $MaxAttempts) { + try { + $result = & $ScriptBlock + $success = $true + return $result + } + catch { + Write-Log "Attempt $attempt failed: $_" + if ($attempt -lt $MaxAttempts) { + Write-Log "Retrying in $DelaySeconds seconds..." + Start-Sleep -Seconds $DelaySeconds + } + $attempt++ + } + } + + if (-not $success) { + Write-Log "All $MaxAttempts attempts failed." + return $null + } +} + function Get-LatestSpotifyVersion { Write-Log "Getting data from rg-adguard..." @@ -37,15 +69,17 @@ function Get-LatestSpotifyVersion { $ProgressPreference = 'SilentlyContinue' - try { - $response = Invoke-WebRequest -Uri $url -Method "POST" -Body $body -WebSession $session -Headers $headers -UseBasicParsing - $html = $response.Content + $response = Invoke-WithRetry -ScriptBlock { + Invoke-WebRequest -Uri $url -Method "POST" -Body $body -WebSession $session -Headers $headers -UseBasicParsing } - catch { - Write-Log "Error executing request: $_" + + if (-not $response) { + Write-Log "Failed to get response from rg-adguard after multiple attempts." return $null } + $html = $response.Content + $trContents = [regex]::Matches($html, '(?s)(.*?)') | ForEach-Object { $_.Groups[1].Value } $results = @() foreach ($trContent in $trContents) { @@ -89,14 +123,13 @@ function Download-SpotifyAppx { } Write-Log "Downloading appx file..." $ProgressPreference = 'SilentlyContinue' - try { + + $success = Invoke-WithRetry -ScriptBlock { Invoke-WebRequest -Uri $downloadUrl -OutFile $filePath - return $true - } - catch { - Write-Log "Error downloading file: $_" - return $false + $true } + + return $success } function Extract-SpotifyAppx { @@ -139,19 +172,22 @@ function Compare-SpotifyVersions { param ($version, $jsonUrl) Write-Log "Comparison of versions..." $ProgressPreference = 'SilentlyContinue' - try { - $jsonContent = Invoke-WebRequest -Uri $jsonUrl | ConvertFrom-Json - foreach ($jsonVersion in $jsonContent.PSObject.Properties) { - if ($jsonVersion.Value.fullversion -eq $version) { - return $true - } - } - return $false + + $jsonContent = Invoke-WithRetry -ScriptBlock { + Invoke-WebRequest -Uri $jsonUrl | ConvertFrom-Json } - catch { - Write-Log "Error comparing versions: $_" + + if (-not $jsonContent) { + Write-Log "Failed to fetch version information after multiple attempts." return $null } + + foreach ($jsonVersion in $jsonContent.PSObject.Properties) { + if ($jsonVersion.Value.fullversion -eq $version) { + return $true + } + } + return $false } function Trigger-GitAction { @@ -176,12 +212,16 @@ function Trigger-GitAction { "Content-Type" = "application/json" } - try { + $success = Invoke-WithRetry -ScriptBlock { Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $headers -Body $payload + $true + } + + if ($success) { Write-Log "Successfully triggered Git action" } - catch { - Write-Log "Error triggering Git action: $_" + else { + Write-Log "Failed to trigger Git action after multiple attempts" } } @@ -237,4 +277,4 @@ $tempPath = [System.IO.Path]::GetTempPath() $spotifyTempDir = Join-Path $tempPath "Spotify" New-Item -Path $spotifyTempDir -ItemType Directory -Force | Out-Null -Main +Main \ No newline at end of file