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);
|
||||
}
|
||||
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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user