From b0453e405593f2adfe48376dd23f02c056305864 Mon Sep 17 00:00:00 2001 From: Jaex Date: Wed, 23 Jul 2014 03:18:49 +0300 Subject: [PATCH] Beta support --- HelpersLib/Helpers/Helpers.cs | 18 ++-- HelpersLib/HelpersLib.csproj | 1 - HelpersLib/UpdateChecker/DownloaderForm.cs | 7 +- .../UpdateChecker/GitHubUpdateChecker.cs | 12 ++- HelpersLib/UpdateChecker/UpdateChecker.cs | 46 +++++++++- .../UpdateChecker/UpdateCheckerLabel.cs | 4 +- HelpersLib/UpdateChecker/UpdateInfo.cs | 85 ------------------- HelpersLib/UpdateChecker/XMLUpdateChecker.cs | 10 +-- ShareX/Forms/MainForm.cs | 5 +- ShareX/Program.cs | 3 + ShareX/Properties/AssemblyInfo.cs | 4 +- ShareX/TaskHelpers.cs | 4 +- 12 files changed, 75 insertions(+), 124 deletions(-) delete mode 100644 HelpersLib/UpdateChecker/UpdateInfo.cs diff --git a/HelpersLib/Helpers/Helpers.cs b/HelpersLib/Helpers/Helpers.cs index 9af17ad6b..5c525eec8 100644 --- a/HelpersLib/Helpers/Helpers.cs +++ b/HelpersLib/Helpers/Helpers.cs @@ -331,6 +331,16 @@ public static int CompareVersion(string version1, string version2) return NormalizeVersion(version1).CompareTo(NormalizeVersion(version2)); } + /// + /// If version1 newer than version2 = 1 + /// If version1 equal to version2 = 0 + /// If version1 older than version2 = -1 + /// + public static int CompareVersion(Version version1, Version version2) + { + return version1.Normalize().CompareTo(version2.Normalize()); + } + /// /// If version newer than ApplicationVersion = 1 /// If version equal to ApplicationVersion = 0 @@ -346,14 +356,6 @@ private static Version NormalizeVersion(string version) return Version.Parse(version).Normalize(); } - /// - /// If latestVersion newer than currentVersion = true - /// - public static bool CheckVersion(Version currentVersion, Version latestVersion) - { - return currentVersion.Normalize() < latestVersion.Normalize(); - } - public static bool IsWindowsXP() { return OSVersion.Major == 5 && OSVersion.Minor == 1; diff --git a/HelpersLib/HelpersLib.csproj b/HelpersLib/HelpersLib.csproj index 34e912ec6..f158dc8e5 100644 --- a/HelpersLib/HelpersLib.csproj +++ b/HelpersLib/HelpersLib.csproj @@ -331,7 +331,6 @@ MyPictureBox.cs - diff --git a/HelpersLib/UpdateChecker/DownloaderForm.cs b/HelpersLib/UpdateChecker/DownloaderForm.cs index ec3abe921..e4130ed6c 100644 --- a/HelpersLib/UpdateChecker/DownloaderForm.cs +++ b/HelpersLib/UpdateChecker/DownloaderForm.cs @@ -75,7 +75,7 @@ private DownloaderForm() } public DownloaderForm(UpdateChecker updateChecker) - : this(updateChecker.UpdateInfo) + : this(updateChecker.DownloadURL, updateChecker.Filename) { Proxy = updateChecker.Proxy; @@ -85,11 +85,6 @@ public DownloaderForm(UpdateChecker updateChecker) } } - public DownloaderForm(UpdateInfo updateInfo) - : this(updateInfo.DownloadURL, updateInfo.Filename) - { - } - public DownloaderForm(string url, string filename) : this() { diff --git a/HelpersLib/UpdateChecker/GitHubUpdateChecker.cs b/HelpersLib/UpdateChecker/GitHubUpdateChecker.cs index ec0d89c21..4b30393de 100644 --- a/HelpersLib/UpdateChecker/GitHubUpdateChecker.cs +++ b/HelpersLib/UpdateChecker/GitHubUpdateChecker.cs @@ -54,8 +54,6 @@ public GitHubUpdateChecker(string owner, string repo) public override void CheckUpdate() { - UpdateInfo = new UpdateInfo { CurrentVersion = this.CurrentVersion }; - try { List releases = GetReleases(); @@ -67,7 +65,7 @@ public override void CheckUpdate() if (latestRelease != null && !string.IsNullOrEmpty(latestRelease.tag_name) && latestRelease.tag_name.Length > 1 && latestRelease.tag_name[0] == 'v') { - UpdateInfo.LatestVersion = new Version(latestRelease.tag_name.Substring(1)); + LatestVersion = new Version(latestRelease.tag_name.Substring(1)); if (latestRelease.assets != null && latestRelease.assets.Count > 0) { @@ -75,9 +73,9 @@ public override void CheckUpdate() { if (asset != null && !string.IsNullOrEmpty(asset.name) && asset.name.EndsWith(".exe", StringComparison.InvariantCultureIgnoreCase)) { - UpdateInfo.Filename = asset.name; - UpdateInfo.DownloadURL = asset.url; - UpdateInfo.RefreshStatus(); + Filename = asset.name; + DownloadURL = asset.url; + RefreshStatus(); return; } } @@ -90,7 +88,7 @@ public override void CheckUpdate() DebugHelper.WriteException(e, "GitHub update check failed"); } - UpdateInfo.Status = UpdateStatus.UpdateCheckFailed; + Status = UpdateStatus.UpdateCheckFailed; } public string GetLatestDownloadURL() diff --git a/HelpersLib/UpdateChecker/UpdateChecker.cs b/HelpersLib/UpdateChecker/UpdateChecker.cs index 6a90d1030..e4fa2f0ab 100644 --- a/HelpersLib/UpdateChecker/UpdateChecker.cs +++ b/HelpersLib/UpdateChecker/UpdateChecker.cs @@ -25,21 +25,59 @@ using System; using System.Net; +using System.Web; using System.Windows.Forms; namespace HelpersLib { public abstract class UpdateChecker { + public UpdateStatus Status { get; set; } public Version CurrentVersion { get; set; } + public Version LatestVersion { get; set; } public ReleaseChannelType ReleaseType { get; set; } + public bool IsBeta { get; set; } public IWebProxy Proxy { get; set; } - public UpdateInfo UpdateInfo { get; protected set; } - public UpdateChecker() + private string filename; + + public string Filename { - CurrentVersion = Version.Parse(Application.ProductVersion); - ReleaseType = ReleaseChannelType.Stable; + get + { + if (string.IsNullOrEmpty(filename)) + { + return HttpUtility.UrlDecode(DownloadURL.Substring(DownloadURL.LastIndexOf('/') + 1)); + } + + return filename; + } + set + { + filename = value; + } + } + + public string DownloadURL { get; set; } + + private const bool forceUpdate = false; // For testing purposes + + public void RefreshStatus() + { + if (CurrentVersion == null) + { + CurrentVersion = Version.Parse(Application.ProductVersion); + } + + if (Status != UpdateStatus.UpdateCheckFailed && CurrentVersion != null && LatestVersion != null && !string.IsNullOrEmpty(DownloadURL) && + (forceUpdate || Helpers.CompareVersion(CurrentVersion, LatestVersion) < 0 || (IsBeta && Helpers.CompareVersion(CurrentVersion, LatestVersion) == 0))) + { + Status = UpdateStatus.UpdateAvailable; + } + else + { + Status = UpdateStatus.UpToDate; + } } public abstract void CheckUpdate(); diff --git a/HelpersLib/UpdateChecker/UpdateCheckerLabel.cs b/HelpersLib/UpdateChecker/UpdateCheckerLabel.cs index 84256a657..fe56a2208 100644 --- a/HelpersLib/UpdateChecker/UpdateCheckerLabel.cs +++ b/HelpersLib/UpdateChecker/UpdateCheckerLabel.cs @@ -70,7 +70,7 @@ private void UpdateControls() pbLoading.Visible = false; lblCheckingUpdates.Visible = false; - switch (updateChecker.UpdateInfo.Status) + switch (updateChecker.Status) { case UpdateStatus.UpdateCheckFailed: lblStatus.Text = "Update check failed"; @@ -90,7 +90,7 @@ private void UpdateControls() private void llblUpdateAvailable_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { - if (updateChecker != null && updateChecker.UpdateInfo != null && updateChecker.UpdateInfo.Status == UpdateStatus.UpdateAvailable) + if (updateChecker != null && updateChecker.Status == UpdateStatus.UpdateAvailable) { using (DownloaderForm updaterForm = new DownloaderForm(updateChecker)) { diff --git a/HelpersLib/UpdateChecker/UpdateInfo.cs b/HelpersLib/UpdateChecker/UpdateInfo.cs deleted file mode 100644 index 9c00f42be..000000000 --- a/HelpersLib/UpdateChecker/UpdateInfo.cs +++ /dev/null @@ -1,85 +0,0 @@ -#region License Information (GPL v3) - -/* - ShareX - A program that allows you to take screenshots and share any file type - Copyright (C) 2007-2014 ShareX Developers - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - Optionally you can also view the license at . -*/ - -#endregion License Information (GPL v3) - -using System; -using System.Web; -using System.Windows.Forms; - -namespace HelpersLib -{ - public class UpdateInfo - { - public UpdateStatus Status { get; set; } - public Version CurrentVersion { get; set; } - public Version LatestVersion { get; set; } - - private string filename; - - public string Filename - { - get - { - if (string.IsNullOrEmpty(filename)) - { - return HttpUtility.UrlDecode(DownloadURL.Substring(DownloadURL.LastIndexOf('/') + 1)); - } - - return filename; - } - set - { - filename = value; - } - } - - public string DownloadURL { get; set; } - public ReleaseChannelType ReleaseChannel { get; set; } - - private bool forceUpdate = false; // For testing purposes - - public UpdateInfo() - { - ReleaseChannel = ReleaseChannelType.Stable; - } - - public void RefreshStatus() - { - if (CurrentVersion == null) - { - CurrentVersion = Version.Parse(Application.ProductVersion); - } - - if (Status != UpdateStatus.UpdateCheckFailed && CurrentVersion != null && LatestVersion != null && !string.IsNullOrEmpty(DownloadURL) && - (forceUpdate || Helpers.CheckVersion(CurrentVersion, LatestVersion))) - { - Status = UpdateStatus.UpdateAvailable; - } - else - { - Status = UpdateStatus.UpToDate; - } - } - } -} \ No newline at end of file diff --git a/HelpersLib/UpdateChecker/XMLUpdateChecker.cs b/HelpersLib/UpdateChecker/XMLUpdateChecker.cs index 73383c068..0f36260ec 100644 --- a/HelpersLib/UpdateChecker/XMLUpdateChecker.cs +++ b/HelpersLib/UpdateChecker/XMLUpdateChecker.cs @@ -45,8 +45,6 @@ public XMLUpdateChecker(string url, string applicationName) public override void CheckUpdate() { - UpdateInfo = new UpdateInfo { CurrentVersion = this.CurrentVersion, ReleaseChannel = ReleaseType }; - try { using (WebClient wc = new WebClient()) @@ -83,9 +81,9 @@ public override void CheckUpdate() if (xe != null) { - UpdateInfo.LatestVersion = new Version(xe.Element("Version").Value); - UpdateInfo.DownloadURL = xe.Element("URL").Value; - UpdateInfo.RefreshStatus(); + LatestVersion = new Version(xe.Element("Version").Value); + DownloadURL = xe.Element("URL").Value; + RefreshStatus(); return; } } @@ -97,7 +95,7 @@ public override void CheckUpdate() DebugHelper.WriteException(e, "XML update check failed"); } - UpdateInfo.Status = UpdateStatus.UpdateCheckFailed; + Status = UpdateStatus.UpdateCheckFailed; } } } \ No newline at end of file diff --git a/ShareX/Forms/MainForm.cs b/ShareX/Forms/MainForm.cs index 927bcee09..0d1784191 100644 --- a/ShareX/Forms/MainForm.cs +++ b/ShareX/Forms/MainForm.cs @@ -533,8 +533,9 @@ private void CheckUpdate() { UpdateChecker updateChecker = TaskHelpers.CheckUpdate(); - if (updateChecker.UpdateInfo != null && updateChecker.UpdateInfo.Status == UpdateStatus.UpdateAvailable && - MessageBox.Show("A newer version of ShareX is available.\r\nWould you like to download and install it?", string.Format("{0} {1} is available", Application.ProductName, updateChecker.UpdateInfo.LatestVersion.ToString()), + if (updateChecker != null && updateChecker.Status == UpdateStatus.UpdateAvailable && + MessageBox.Show("A newer version of ShareX is available.\r\nWould you like to download and install it?", + string.Format("ShareX {0} is available", updateChecker.LatestVersion.ToString()), MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes) { using (DownloaderForm updaterForm = new DownloaderForm(updateChecker)) diff --git a/ShareX/Program.cs b/ShareX/Program.cs index 4957d2e11..bf6ef96bf 100644 --- a/ShareX/Program.cs +++ b/ShareX/Program.cs @@ -213,6 +213,8 @@ public static string ToolsFolder #endregion Paths + public const bool IsBeta = true; + public static string Title { get @@ -221,6 +223,7 @@ public static string Title string title = string.Format("ShareX {0}.{1}", version.Major, version.Minor); if (version.Build > 0) title += "." + version.Build; if (IsPortable) title += " Portable"; + if (IsBeta) title += " Beta"; return title; } } diff --git a/ShareX/Properties/AssemblyInfo.cs b/ShareX/Properties/AssemblyInfo.cs index 7be6a0af1..e3d93f693 100644 --- a/ShareX/Properties/AssemblyInfo.cs +++ b/ShareX/Properties/AssemblyInfo.cs @@ -11,5 +11,5 @@ [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("82E6AC09-0FEF-4390-AD9F-0DD3F5561EFC")] -[assembly: AssemblyVersion("9.2.1")] -[assembly: AssemblyFileVersion("9.2.1")] \ No newline at end of file +[assembly: AssemblyVersion("9.3.0")] +[assembly: AssemblyFileVersion("9.3.0")] \ No newline at end of file diff --git a/ShareX/TaskHelpers.cs b/ShareX/TaskHelpers.cs index 0deafac98..c55f12de4 100644 --- a/ShareX/TaskHelpers.cs +++ b/ShareX/TaskHelpers.cs @@ -423,13 +423,15 @@ public static Icon GetProgressIcon(int percentage) public static UpdateChecker CheckUpdate() { UpdateChecker updateChecker = new GitHubUpdateChecker("ShareX", "ShareX"); + updateChecker.IsBeta = Program.IsBeta; updateChecker.Proxy = ProxyInfo.Current.GetWebProxy(); updateChecker.CheckUpdate(); // Fallback if GitHub API fails - if (updateChecker.UpdateInfo == null || updateChecker.UpdateInfo.Status == UpdateStatus.UpdateCheckFailed) + if (updateChecker.Status == UpdateStatus.None || updateChecker.Status == UpdateStatus.UpdateCheckFailed) { updateChecker = new XMLUpdateChecker("http://getsharex.com/Update.xml", "ShareX"); + updateChecker.IsBeta = Program.IsBeta; updateChecker.Proxy = ProxyInfo.Current.GetWebProxy(); updateChecker.CheckUpdate(); }