mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-22 11:12:36 +01:00
Check updates
This commit is contained in:
parent
d0946d0498
commit
35bea46883
@ -20,6 +20,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
buttonDownloadAndInstall.Visible = false;
|
||||
textBoxChangeLog.Visible = false;
|
||||
buttonCancel.Text = Configuration.Settings.Language.General.OK;
|
||||
buttonCancel.Visible = false;
|
||||
}
|
||||
|
||||
private void CheckForUpdates_KeyDown(object sender, KeyEventArgs e)
|
||||
@ -43,21 +44,32 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
timerCheckForUpdates.Stop();
|
||||
labelStatus.Text = string.Format(Configuration.Settings.Language.CheckForUpdates.CheckingForUpdatesFailedX, "Time out");
|
||||
buttonCancel.Visible = true;
|
||||
}
|
||||
else if (_updatesHelper.Error != null)
|
||||
{
|
||||
timerCheckForUpdates.Stop();
|
||||
labelStatus.Text = string.Format(Configuration.Settings.Language.CheckForUpdates.CheckingForUpdatesFailedX, _updatesHelper.Error);
|
||||
buttonCancel.Visible = true;
|
||||
}
|
||||
else if (_updatesHelper.Done)
|
||||
{
|
||||
timerCheckForUpdates.Stop();
|
||||
Height = 600;
|
||||
textBoxChangeLog.Text = _updatesHelper.LatestChangeLog;
|
||||
textBoxChangeLog.Visible = true;
|
||||
labelStatus.Text = Configuration.Settings.Language.CheckForUpdates.CheckingForUpdatesNewVersion;
|
||||
buttonDownloadAndInstall.Visible = true;
|
||||
buttonCancel.Text = Configuration.Settings.Language.General.Cancel;
|
||||
if (_updatesHelper.IsUpdateAvailable())
|
||||
{
|
||||
Height = 600;
|
||||
textBoxChangeLog.Text = _updatesHelper.LatestChangeLog;
|
||||
textBoxChangeLog.Visible = true;
|
||||
labelStatus.Text = Configuration.Settings.Language.CheckForUpdates.CheckingForUpdatesNewVersion;
|
||||
buttonDownloadAndInstall.Visible = true;
|
||||
buttonCancel.Text = Configuration.Settings.Language.General.Cancel;
|
||||
buttonCancel.Visible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
labelStatus.Text = Configuration.Settings.Language.CheckForUpdates.CheckingForUpdatesNoneAvailable;
|
||||
buttonCancel.Visible = true;
|
||||
}
|
||||
}
|
||||
_seconds += timerCheckForUpdates.Interval / 1000.0;
|
||||
}
|
||||
|
@ -1,11 +1,15 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Logic.Forms
|
||||
{
|
||||
public class CheckForUpdatesHelper
|
||||
{
|
||||
private static Regex regex = new Regex(@"\d\.\d", RegexOptions.Compiled); // 3.4.0 (xth June 2014)
|
||||
|
||||
private const string ReleasesUrl = "https://api.github.com/repos/SubtitleEdit/subtitleedit/releases";
|
||||
private const string ChangeLogUrl = "https://raw.githubusercontent.com/SubtitleEdit/subtitleedit/master/src/Changelog.txt";
|
||||
|
||||
@ -18,7 +22,7 @@ namespace Nikse.SubtitleEdit.Logic.Forms
|
||||
{
|
||||
get
|
||||
{
|
||||
return _successCount == 2;
|
||||
return _successCount == 1;
|
||||
}
|
||||
private set
|
||||
{
|
||||
@ -70,7 +74,8 @@ namespace Nikse.SubtitleEdit.Logic.Forms
|
||||
try
|
||||
{
|
||||
_changeLog = GetStringFromResponse(result);
|
||||
LatestChangeLog = _changeLog;
|
||||
LatestChangeLog = GetLastestChangeLog(_changeLog);
|
||||
LatestVersionNumber = GetLastestVersionNumber(LatestChangeLog);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
@ -81,6 +86,45 @@ namespace Nikse.SubtitleEdit.Logic.Forms
|
||||
}
|
||||
}
|
||||
|
||||
private string GetLastestVersionNumber(string latestChangeLog)
|
||||
{
|
||||
foreach (string line in latestChangeLog.Replace(Environment.NewLine, "\n").Split('\n'))
|
||||
{
|
||||
string s = line.Trim();
|
||||
if (!s.Contains("x") && !s.Contains("*") && s.Contains("(") && s.Contains(")") && regex.IsMatch(s))
|
||||
{
|
||||
int indexOfSpace = s.IndexOf(" ");
|
||||
if (indexOfSpace > 0)
|
||||
return s.Substring(0, indexOfSpace).Trim();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private string GetLastestChangeLog(string changeLog)
|
||||
{
|
||||
bool releaseOn = false;
|
||||
var sb = new StringBuilder();
|
||||
foreach (string line in changeLog.Replace(Environment.NewLine, "\n").Split('\n'))
|
||||
{
|
||||
string s = line.Trim();
|
||||
if (s.Length == 0 && releaseOn)
|
||||
return sb.ToString();
|
||||
|
||||
if (!releaseOn)
|
||||
{
|
||||
if (!s.Contains("x") && !s.Contains("*") && s.Contains("(") && s.Contains(")") && regex.IsMatch(s))
|
||||
releaseOn = true;
|
||||
}
|
||||
|
||||
if (releaseOn)
|
||||
{
|
||||
sb.AppendLine(line);
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private string GetStringFromResponse(IAsyncResult result)
|
||||
{
|
||||
HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;
|
||||
@ -107,11 +151,39 @@ namespace Nikse.SubtitleEdit.Logic.Forms
|
||||
public void CheckForUpdates()
|
||||
{
|
||||
// load github release json
|
||||
StartDownloadString(ReleasesUrl, "application/json", new AsyncCallback(FinishWebRequestReleases));
|
||||
//StartDownloadString(ReleasesUrl, "application/json", new AsyncCallback(FinishWebRequestReleases));
|
||||
|
||||
// load change log
|
||||
StartDownloadString(ChangeLogUrl, null, new AsyncCallback(FinishWebRequestChangeLog));
|
||||
}
|
||||
|
||||
public bool IsUpdateAvailable()
|
||||
{
|
||||
string[] currentVersionInfo = Utilities.AssemblyVersion.Split('.');
|
||||
string minorMinorVersion = string.Empty;
|
||||
if (currentVersionInfo.Length >= 3 && currentVersionInfo[2] != "0")
|
||||
minorMinorVersion = "." + currentVersionInfo[2];
|
||||
string currentVersion = String.Format("{0}.{1}{2}", currentVersionInfo[0], currentVersionInfo[1], minorMinorVersion);
|
||||
if (currentVersion == LatestVersionNumber)
|
||||
return false;
|
||||
|
||||
string[] latestVersionInfo = LatestVersionNumber.Split('.');
|
||||
try
|
||||
{
|
||||
if (int.Parse(latestVersionInfo[0]) > int.Parse(currentVersionInfo[0]))
|
||||
return true;
|
||||
if (int.Parse(latestVersionInfo[0]) == int.Parse(currentVersionInfo[0]) && int.Parse(latestVersionInfo[1]) > int.Parse(currentVersionInfo[1]))
|
||||
return true;
|
||||
if (int.Parse(latestVersionInfo[0]) == int.Parse(currentVersionInfo[0]) && int.Parse(latestVersionInfo[1]) == int.Parse(currentVersionInfo[1]) && int.Parse(latestVersionInfo[2]) > int.Parse(currentVersionInfo[2]))
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -337,7 +337,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
CheckingForUpdatesFailedX = "Checking for updates failed: {0}",
|
||||
CheckingForUpdatesNoneAvailable = "You're using the latest version of Subtitle Edit :)",
|
||||
CheckingForUpdatesNewVersion = "New version available!",
|
||||
InstallUpdate = "Download and install",
|
||||
InstallUpdate = "Go to download page",
|
||||
};
|
||||
|
||||
ChooseAudioTrack = new LanguageStructure.ChooseAudioTrack
|
||||
|
Loading…
Reference in New Issue
Block a user