Esempio n. 1
0
        public PackageInfo(SemanticVersion version, bool preRelease, GitHubReleaseAsset githubAsset)
        {
            if (version == null)
            {
                throw new ArgumentNullException(nameof(version));
            }

            if (githubAsset == null)
            {
                throw new ArgumentNullException(nameof(githubAsset));
            }

            Version     = version;
            PreRelease  = preRelease;
            GitHubAsset = githubAsset;
        }
        private void Check(string data)
        {
            if (string.IsNullOrEmpty(data))
            {
                this.Status = UpdateStatus.Problem;
            }
            else
            {
                List <GitHubRelease> list       = new List <GitHubRelease>();
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                try {
                    list = serializer.Deserialize <List <GitHubRelease> >(data);
                }
                catch (Exception exception) {
                    this.Status = UpdateStatus.Problem;
                    if (this.Error != null)
                    {
                        this.Error(this, new UnhandledExceptionEventArgs(exception, false));
                    }
                }
                if (list.Count == 0)
                {
                    this.Status = UpdateStatus.Problem;
                }
                else
                {
                    // First, check if there's some stable release
                    GitHubRelease release = list.FirstOrDefault(p => !p.draft && !p.prerelease);
                    if (release == null)
                    {
                        this.Status = UpdateStatus.Problem;
                        return;
                    }

                    // Second, see if it contains an asset suitable for UpdateManager needs
                    GitHubReleaseAsset asset = release.assets.FirstOrDefault(p => !p.name.Contains("debug") && p.name.ToLower().EndsWith(".zip"));
                    if (asset == null)
                    {
                        this.Status = UpdateStatus.Problem;
                        return;
                    }

                    // The release tag is expected to be in format "X.X.X.X" or "vX.X.X.X"
                    string  remoteVersion = release.tag_name.TrimStart('v');
                    Version current       = new Version(this.CurrentVersion);
                    Version remote        = new Version(remoteVersion);

                    this.Latest = new LatestVersion(asset.browser_download_url, asset.name, remoteVersion);

                    if (current < remote)
                    {
                        this.Status     = UpdateStatus.NewVersion;
                        this.NewVersion = remote.ToString();
                        if (this.UpdateAvailable != null)
                        {
                            this.UpdateAvailable(this);
                        }
                    }
                    else
                    {
                        this.Status = UpdateStatus.UpToDate;
                    }
                }
            }
        }