fix(installer): propagate cancellation + defensive asset parsing in ReleaseClient
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -27,7 +27,7 @@ public sealed class ReleaseClient : IReleaseClient
|
|||||||
return ParseRelease(json);
|
return ParseRelease(json);
|
||||||
}
|
}
|
||||||
catch (HttpRequestException) { return null; }
|
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)
|
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())
|
foreach (var item in arr.EnumerateArray())
|
||||||
{
|
{
|
||||||
var aName = item.GetProperty("name").GetString() ?? "";
|
if (!item.TryGetProperty("name", out var nameField)) continue;
|
||||||
var aUrl = item.GetProperty("browser_download_url").GetString() ?? "";
|
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;
|
var aSize = item.TryGetProperty("size", out var s) ? s.GetInt64() : 0L;
|
||||||
assets.Add(new ReleaseAsset(aName, aUrl, aSize));
|
assets.Add(new ReleaseAsset(aName, aUrl, aSize));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user