fix(installer): propagate cancellation + defensive asset parsing in ReleaseClient

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Mika Kuns
2026-04-15 09:15:56 +02:00
parent 5603fd458d
commit 83d7058b32

View File

@@ -27,7 +27,7 @@ public sealed class ReleaseClient : IReleaseClient
return ParseRelease(json);
}
catch (HttpRequestException) { return null; }
catch (TaskCanceledException) { return null; }
catch (TaskCanceledException) when (!ct.IsCancellationRequested) { return null; }
}
public async Task DownloadAsync(string url, string destPath, IProgress<long> progress, CancellationToken ct)
@@ -65,8 +65,11 @@ public sealed class ReleaseClient : IReleaseClient
{
foreach (var item in arr.EnumerateArray())
{
var aName = item.GetProperty("name").GetString() ?? "";
var aUrl = item.GetProperty("browser_download_url").GetString() ?? "";
if (!item.TryGetProperty("name", out var nameField)) continue;
if (!item.TryGetProperty("browser_download_url", out var urlField)) continue;
var aName = nameField.GetString() ?? "";
var aUrl = urlField.GetString() ?? "";
var aSize = item.TryGetProperty("size", out var s) ? s.GetInt64() : 0L;
assets.Add(new ReleaseAsset(aName, aUrl, aSize));
}