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; } } } }