Exemple #1
0
        /// <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);
                }
            }
        }