/// <summary> /// Called when the gitub api for releases responses /// </summary> private void OnGithubResponse(WebServiceJson webServiceJson) { try { if (webServiceJson.StatusCodeResponse == HttpStatusCode.OK && webServiceJson.ResponseException == null) { LatestReleaseInfo = null; // get the releases var releases = webServiceJson.DeserializeArray <ReleaseInfo>(); // case where we put the url for the latest release only if (releases != null && releases.Count == 0) { var latestRelease = webServiceJson.Deserialize <ReleaseInfo>(); if (latestRelease != null) { releases = new List <ReleaseInfo> { latestRelease }; } } if (releases != null && releases.Count > 0) { // sort descending releases.Sort((o, o2) => o.tag_name.IsHigherVersionThan(o2.tag_name) ? -1 : 1); VersionLog = new StringBuilder(); foreach (var release in releases) { if (string.IsNullOrEmpty(release.tag_name)) { continue; } // For each version higher than the local one, append to the release body // Will be used to display the version log to the user if (release.tag_name.IsHigherVersionThan(LocalVersion) && (GetPreReleases || !release.prerelease)) { // h1 VersionLog.AppendLine("## " + (release.tag_name ?? "?") + " : " + (release.name ?? "") + " ##\n\n"); // body VersionLog.AppendLine((release.body ?? "") + "\n\n"); // the first higher release encountered is the latest if (LatestReleaseInfo == null) { LatestReleaseInfo = release; } } } // There is a distant version higher than the local one if (LatestReleaseInfo != null) { var url = GetDownloadUrl != null?GetDownloadUrl(LatestReleaseInfo) : DefaultGetDownloadUrl(LatestReleaseInfo); if (!string.IsNullOrEmpty(url)) { var downloadFile = Path.Combine(AssetDownloadFolder, AssetName); Utils.CreateDirectory(AssetDownloadFolder); Utils.DeleteFile(downloadFile); var e = new StartingDownloadEvent(); if (StartingUpdate != null) { StartingUpdate(this, LatestReleaseInfo, e); } if (!e.CancelDownload) { DownloadFile(url, downloadFile, OnAssetDownloaded); } } else { if (ErrorOccured != null) { ErrorOccured(this, new Exception("Asset not found"), GitHubUpdaterFailReason.NoAssetOnLatestRelease); } } } else { if (AlreadyUpdated != null) { AlreadyUpdated(this, releases.First()); } } } } else { if (ErrorOccured != null) { ErrorOccured(this, new Exception("Update error", webServiceJson.ResponseException), GitHubUpdaterFailReason.ReleaseApiUnreachable); } } } catch (Exception e) { if (ErrorOccured != null) { ErrorOccured(this, e, GitHubUpdaterFailReason.AnalyseReleasesFailed); } } }