diff --git a/Netkan/Sources/Github/GithubApi.cs b/Netkan/Sources/Github/GithubApi.cs index 5a0a04098..07b265506 100644 --- a/Netkan/Sources/Github/GithubApi.cs +++ b/Netkan/Sources/Github/GithubApi.cs @@ -71,23 +71,21 @@ public IEnumerable GetAllReleases(GithubRef reference, bool? useP break; } Log.Debug("Parsing JSON..."); - var ghReleases = JsonConvert.DeserializeObject(json) - ?.Where(ghRel => ReleaseTypeMatches(usePrerelease, ghRel.PreRelease) - // Skip releases without assets - && (reference.UseSourceArchive - || (ghRel.Assets != null - && ghRel.Assets.Any(reference.FilterMatches)))) - // Insurance against GitHub returning them in the wrong order - .OrderByDescending(ghRel => ghRel.PublishedAt) - .ToArray() - ?? Array.Empty(); - if (ghReleases.Length < 1) + var releases = JsonConvert.DeserializeObject(json) + ?? Array.Empty(); + if (releases.Length < 1) { // That's all folks! break; } - foreach (var ghRel in ghReleases) + foreach (var ghRel in releases.Where(r => ReleaseTypeMatches(usePrerelease, r.PreRelease) + // Skip releases without assets + && (reference.UseSourceArchive + || (r.Assets != null + && r.Assets.Any(reference.FilterMatches)))) + // Insurance against GitHub returning them in the wrong order + .OrderByDescending(r => r.PublishedAt)) { yield return ghRel; } diff --git a/Netkan/Sources/Github/GithubRelease.cs b/Netkan/Sources/Github/GithubRelease.cs index 922d95a04..b086c64dd 100644 --- a/Netkan/Sources/Github/GithubRelease.cs +++ b/Netkan/Sources/Github/GithubRelease.cs @@ -27,5 +27,17 @@ public sealed class GithubRelease [JsonProperty("prerelease")] [DefaultValue(false)] public bool PreRelease { get; set; } = false; + + [JsonIgnore] + public GithubReleaseAsset? SourceArchiveAsset + => Tag is ModuleVersion ver + ? new GithubReleaseAsset() + { + Name = ver.ToString(), + Download = SourceArchive, + Updated = PublishedAt, + Uploader = Author, + } + : null; } } diff --git a/Netkan/Transformers/GithubTransformer.cs b/Netkan/Transformers/GithubTransformer.cs index 198bc6705..8e14ed6ea 100644 --- a/Netkan/Transformers/GithubTransformer.cs +++ b/Netkan/Transformers/GithubTransformer.cs @@ -69,18 +69,13 @@ public IEnumerable Transform(Metadata metadata, TransformOptions? opts bool returnedAny = false; foreach (var rel in releases) { - if (ghRef.UseSourceArchive && rel.Tag != null) + if (ghRef.UseSourceArchive + && rel.Tag != null + && rel.SourceArchiveAsset is GithubReleaseAsset srcAsset) { returnedAny = true; yield return TransformOne(metadata, metadata.Json(), ghRef, ghRepo, rel, - new GithubReleaseAsset() - { - Name = rel.Tag.ToString(), - Download = rel.SourceArchive, - Updated = rel.PublishedAt, - Uploader = rel.Author, - }, - rel.Tag.ToString()); + srcAsset, rel.Tag.ToString()); } else if (ghRef.VersionFromAsset != null && rel.Assets != null) {