Пример #1
0
        private void checkLatestVersion()
        {
            NetHelper.Request($"https://api.github.com/repos/{Program.Repository}/releases?per_page=10&page=1", "cache/net/releases", 15 * 60,
                              (response, exception) =>
            {
                if (IsDisposed)
                {
                    return;
                }
                if (exception != null)
                {
                    handleLastestVersionException(exception);
                    return;
                }
                try
                {
                    var hasLatest     = false;
                    var latestVersion = Program.Version;
                    var description   = "";
                    var downloadUrl   = (string)null;

                    var releases = TinyToken.ReadString <JsonFormat>(response);
                    foreach (var release in releases.Values <TinyObject>())
                    {
                        var isDraft      = release.Value <bool>("draft");
                        var isPrerelease = release.Value <bool>("prerelease");
                        if (isDraft || isPrerelease)
                        {
                            continue;
                        }

                        var name    = release.Value <string>("name");
                        var version = new Version(name);

                        if (!hasLatest)
                        {
                            hasLatest     = true;
                            latestVersion = version;

                            foreach (var asset in release.Values <TinyObject>("assets"))
                            {
                                var downloadName = asset.Value <string>("name");
                                if (downloadName.EndsWith(".zip"))
                                {
                                    downloadUrl = asset.Value <string>("browser_download_url");
                                    break;
                                }
                            }
                        }

                        if (Program.Version < version || Program.Version >= latestVersion)
                        {
                            var publishedAt = release.Value <string>("published_at");
                            var publishDate = DateTime.ParseExact(publishedAt, @"yyyy-MM-dd\THH:mm:ss\Z", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
                            var authorName  = release.Value <string>("author", "login");

                            var body = release.Value <string>("body");
                            if (body.Contains("---"))
                            {
                                body = body.Substring(0, body.IndexOf("---"));
                            }
                            body = body.Replace("\r\n", "\n").Trim(' ', '\n');
                            body = $"v{version} - {authorName}, {publishDate.ToTimeAgo()}\n{body}\n\n";

                            var newDescription = description + body;
                            if (description.Length > 0 && newDescription.Count(c => c == '\n') > 35)
                            {
                                break;
                            }

                            description = newDescription;
                        }
                        else
                        {
                            break;
                        }
                    }

                    if (Program.Version < latestVersion)
                    {
                        updateButton.Text     = $"Version {latestVersion} available!";
                        updateButton.Tooltip  = $"What's new:\n\n{description.TrimEnd('\n')}";
                        updateButton.OnClick += (sender, e) =>
                        {
                            if (downloadUrl != null && latestVersion >= new Version(1, 4))
                            {
                                Manager.Add(new UpdateMenu(downloadUrl));
                            }
                            else
                            {
                                Updater.OpenLastestReleasePage();
                            }
                        };
                        updateButton.StyleName = "";
                        updateButton.Disabled  = false;
                    }
                    else
                    {
                        versionLabel.Tooltip   = $"Recent changes:\n\n{description.TrimEnd('\n')}";
                        updateButton.Displayed = false;
                    }
                    bottomLayout.Pack(600);
                }
                catch (Exception e)
                {
                    handleLastestVersionException(e);
                }
            });
        }