//// //// Copyright (c) PlaceholderCompany. All rights reserved. //// //namespace FSI.BT.Tools.SystemTrayMenu.Helper.Updater //{ // using System; // using System.Collections.Generic; // using System.Drawing; // using System.Net.Http; // using System.Reflection; // using System.Windows.Forms; // using FSI.BT.Tools.Global.Utilities; // using FSI.BT.Tools.SystemTrayMenu.Utilities; // public class GitHubUpdate // { // private static List> releases; // private static Form newVersionForm; // public static void ActivateNewVersionFormOrCheckForUpdates(bool showWhenUpToDate) // { // if (newVersionForm != null) // { // newVersionForm.HandleInvoke(newVersionForm.Activate); // } // else // { // CheckForUpdates(showWhenUpToDate); // } // } // private static void CheckForUpdates(bool showWhenUpToDate) // { // string urlGithubReleases = @"http://api.github.com/repos/Hofknecht/SystemTrayMenu/releases"; // HttpClient client = new(); // // https://developer.github.com/v3/#user-agent-required // client.DefaultRequestHeaders.Add("User-Agent", "FSI.BT.Tools.SystemTrayMenu/" + Application.ProductVersion.ToString()); // // https://developer.github.com/v3/media/#request-specific-version // client.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3.text+json"); // try // { // using HttpResponseMessage response = client.GetAsync(urlGithubReleases).Result; // using HttpContent content = response.Content; // string responseString = content.ReadAsStringAsync().Result; // releases = responseString.FromJson>>(); // } // catch (Exception ex) // { // Log.Warn($"{nameof(CheckForUpdates)} failed", ex); // } // if (releases == null) // { // Log.Info($"{nameof(CheckForUpdates)} failed."); // } // else // { // RemoveCurrentAndOlderVersions(); // ShowNewVersionOrUpToDateDialog(showWhenUpToDate); // } // newVersionForm?.Dispose(); // newVersionForm = null; // } // private static void RemoveCurrentAndOlderVersions() // { // int releasesCount = releases.Count; // Version versionCurrent = Assembly.GetExecutingAssembly().GetName().Version; // for (int i = 0; i < releasesCount; i++) // { // string tagName = releases[i]["tag_name"].ToString(); // Version versionGitHub = new(tagName.Replace("v", string.Empty)); // if (versionGitHub.CompareTo(versionCurrent) < 1) // { // releases.RemoveRange(i, releasesCount - i); // break; // } // } // } // private static void ShowNewVersionOrUpToDateDialog(bool showWhenUpToDate) // { // if (releases.Count > 0) // { // if (NewVersionDialog() == DialogResult.Yes) // { // Log.ProcessStart("https://github.com/Hofknecht/SystemTrayMenu/releases"); // } // } // else if (showWhenUpToDate) // { // MessageBox.Show(Global.Utilities.Translator.GetText("You have the latest version of SystemTrayMenu!")); // } // } // /// // /// Creates a window to show changelog of new available versions. // /// // /// Name of latest release. // /// Pathnotes. // /// OK = OK, Yes = Website, else = Cancel. // private static DialogResult NewVersionDialog() // { // const int ClientPad = 15; // newVersionForm = new() // { // StartPosition = FormStartPosition.CenterScreen, // FormBorderStyle = FormBorderStyle.FixedDialog, // Icon = Config.GetAppIcon(), // ShowInTaskbar = false, // }; // newVersionForm.FormBorderStyle = FormBorderStyle.Sizable; // newVersionForm.MaximizeBox = true; // newVersionForm.MinimizeBox = false; // newVersionForm.ClientSize = new Size(600, 400); // newVersionForm.MinimumSize = newVersionForm.ClientSize; // newVersionForm.Text = Global.Utilities.Translator.GetText("New version available!"); // Label label = new() // { // Size = new Size(newVersionForm.ClientSize.Width - ClientPad, 20), // Location = new Point(ClientPad, ClientPad), // Text = $"{Global.Utilities.Translator.GetText("Latest available version:")} {GetLatestVersionName()}", // }; // newVersionForm.Controls.Add(label); // Button buttonOK = new() // { // DialogResult = DialogResult.OK, // Name = "buttonOK", // }; // buttonOK.Location = new Point( // newVersionForm.ClientSize.Width - buttonOK.Size.Width - ClientPad, // newVersionForm.ClientSize.Height - buttonOK.Size.Height - ClientPad); // buttonOK.MinimumSize = new Size(75, 23); // buttonOK.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; // buttonOK.Text = Global.Utilities.Translator.GetText("OK"); // buttonOK.AutoSizeMode = AutoSizeMode.GrowAndShrink; // buttonOK.AutoSize = true; // newVersionForm.Controls.Add(buttonOK); // Button buttonGoToDownloadPage = new() // { // DialogResult = DialogResult.Yes, // Name = "buttonGoToDownloadPage", // }; // buttonGoToDownloadPage.Location = new Point( // newVersionForm.ClientSize.Width - buttonGoToDownloadPage.Size.Width - ClientPad - buttonOK.Size.Width - ClientPad, // newVersionForm.ClientSize.Height - buttonGoToDownloadPage.Size.Height - ClientPad); // buttonGoToDownloadPage.MinimumSize = new Size(75, 23); // buttonGoToDownloadPage.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; // buttonGoToDownloadPage.Text = Global.Utilities.Translator.GetText("Go to download page"); // buttonGoToDownloadPage.AutoSizeMode = AutoSizeMode.GrowAndShrink; // buttonGoToDownloadPage.AutoSize = true; // newVersionForm.Controls.Add(buttonGoToDownloadPage); // TextBox textBox = new() // { // Location = new Point(ClientPad, label.Location.Y + label.Size.Height + 5), // }; // textBox.Size = new Size( // newVersionForm.ClientSize.Width - (ClientPad * 2), // buttonOK.Location.Y - ClientPad - textBox.Location.Y); // textBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; // textBox.Multiline = true; // textBox.Text = GetChangelog(); // textBox.ReadOnly = true; // textBox.ScrollBars = ScrollBars.Both; // textBox.BackColor = Color.FromKnownColor(KnownColor.Window); // textBox.ForeColor = Color.FromKnownColor(KnownColor.ControlText); // newVersionForm.Controls.Add(textBox); // newVersionForm.AcceptButton = buttonOK; // return newVersionForm.ShowDialog(); // } // /// // /// Returns the latest release version name. // /// // /// Version name. // private static string GetLatestVersionName() // { // string result = "Unknown"; // if (releases == null) // { // return result; // } // try // { // result = releases[0]["tag_name"].ToString().Replace("v", string.Empty); // } // catch (Exception ex) // { // Log.Warn($"{nameof(GetLatestVersionName)} failed", ex); // } // return result; // } // /// // /// Returns the change log from current version up to the latest release version. // /// // /// Change log summary or error text. // private static string GetChangelog() // { // string result = string.Empty; // string errorstr = "An error occurred during update check!" + Environment.NewLine; // if (releases == null) // { // return errorstr + "Could not receive changelog!"; // } // try // { // for (int i = 0; i < releases.Count; i++) // { // Dictionary release = releases[i]; // result += release["name"].ToString() // + Environment.NewLine // + release["body_text"].ToString() // .Replace("\n\n", Environment.NewLine) // .Replace("\n \n", Environment.NewLine) // + Environment.NewLine + Environment.NewLine; // if (i < releases.Count) // { // result += "--------------------------------------------------" + // "-------------------------------------------------------" // + Environment.NewLine; // } // } // result = result.Replace("\n", Environment.NewLine); // } // catch (Exception ex) // { // Log.Warn($"{nameof(GetChangelog)}", ex); // result = errorstr + ex.Message.ToString(); // } // return result; // } // } //}