Allow check pre-release version

This commit is contained in:
noisyfox
2016-12-06 22:01:00 +11:00
parent 1e7a8de34a
commit 65b9c9f5fa
6 changed files with 72 additions and 29 deletions
@@ -18,12 +18,14 @@ namespace Shadowsocks.Controller
private Configuration config;
public bool NewVersionFound;
public string LatestVersionNumber;
public string LatestVersionSuffix;
public string LatestVersionName;
public string LatestVersionURL;
public string LatestVersionLocalName;
public event EventHandler CheckUpdateCompleted;
public const string Version = "3.3.5";
public const bool PreRelease = false;
private class CheckUpdateTimer : System.Timers.Timer
{
@@ -83,17 +85,21 @@ namespace Shadowsocks.Controller
{
foreach (JObject release in result)
{
if ((bool)release["prerelease"])
var isPreRelease = (bool) release["prerelease"];
if (isPreRelease && !config.checkPreRelease)
{
continue;
}
foreach (JObject asset in (JArray)release["assets"])
{
Asset ass = new Asset();
ass.Parse(asset);
if (ass.IsNewVersion(Version))
Asset ass = Asset.ParseAsset(asset);
if (ass != null)
{
asserts.Add(ass);
ass.prerelease = isPreRelease;
if (ass.IsNewVersion(Version, PreRelease, config.checkPreRelease))
{
asserts.Add(ass);
}
}
}
}
@@ -106,6 +112,7 @@ namespace Shadowsocks.Controller
LatestVersionURL = asset.browser_download_url;
LatestVersionNumber = asset.version;
LatestVersionName = asset.name;
LatestVersionSuffix = asset.suffix == null ? "" : $"-{asset.suffix}";
startDownload();
}
@@ -148,7 +155,7 @@ namespace Shadowsocks.Controller
Logging.LogUsefulException(e.Error);
return;
}
Logging.Debug($"New version {LatestVersionNumber} found: {LatestVersionLocalName}");
Logging.Debug($"New version {LatestVersionNumber}{LatestVersionSuffix} found: {LatestVersionLocalName}");
if (CheckUpdateCompleted != null)
{
CheckUpdateCompleted(this, new EventArgs());
@@ -179,10 +186,38 @@ namespace Shadowsocks.Controller
public string name;
public string version;
public string browser_download_url;
public string suffix;
public bool IsNewVersion(string currentVersion)
public static Asset ParseAsset(JObject aJObject)
{
if (prerelease)
var name = (string) aJObject["name"];
Match match = Regex.Match(name, @"^Shadowsocks-(?<version>\d+(?:\.\d+)*)(?:|-(?<suffix>.+))\.\w+$",
RegexOptions.IgnoreCase);
if (match.Success)
{
string version = match.Groups["version"].Value;
var asset = new Asset
{
browser_download_url = (string) aJObject["browser_download_url"],
name = name,
version = version
};
if (match.Groups["suffix"].Success)
{
asset.suffix = match.Groups["suffix"].Value;
}
return asset;
}
return null;
}
public bool IsNewVersion(string currentVersion, bool isPreRelease, bool checkPreRelease)
{
if (prerelease && !checkPreRelease)
{
return false;
}
@@ -190,28 +225,13 @@ namespace Shadowsocks.Controller
{
return false;
}
return CompareVersion(version, currentVersion) > 0;
}
public void Parse(JObject asset)
{
name = (string)asset["name"];
browser_download_url = (string)asset["browser_download_url"];
version = ParseVersionFromURL(browser_download_url);
prerelease = browser_download_url.IndexOf("prerelease", StringComparison.Ordinal) >= 0;
}
private static string ParseVersionFromURL(string url)
{
Match match = Regex.Match(url, @".*Shadowsocks-win.*?-([\d\.]+)\.\w+", RegexOptions.IgnoreCase);
if (match.Success)
var cmp = CompareVersion(version, currentVersion);
if (cmp == 0)
{
if (match.Groups.Count == 2)
{
return match.Groups[1].Value;
}
// If current version is pre-release and we find non-prerelease version online, then the non-prelease version is newer.
return !prerelease && isPreRelease;
}
return null;
return cmp > 0;
}
public static int CompareVersion(string l, string r)
@@ -357,6 +357,16 @@ namespace Shadowsocks.Controller
}
}
public void ToggleCheckingPreRelease(bool enabled)
{
_config.checkPreRelease = enabled;
Configuration.Save(_config);
if (ConfigChanged != null)
{
ConfigChanged(this, new EventArgs());
}
}
public void SaveLogViewerConfig(LogViewerConfig newConfig)
{
_config.logViewer = newConfig;