Allow check pre-release version
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user