feat: 增加内测版本更新 GUI 选项

勾选内测版更新后,在 MaaRelease 仓库中若最新者不是当前版本,则直接使用该版本。
测试版和稳定版检测版本号是否为v开头的版本,内测版不做检查。
This commit is contained in:
zzyyyl
2022-10-30 14:03:46 +08:00
parent ff4c0f127e
commit d6e35b9fda
5 changed files with 60 additions and 16 deletions

View File

@@ -123,6 +123,7 @@
<system:String x:Key="UpdateAutoCheck">Auto check update</system:String>
<system:String x:Key="UpdateAutoDownload">Auto download update</system:String>
<system:String x:Key="UpdateCheckBeta">Beta release</system:String>
<system:String x:Key="UpdateCheckNightly">Nightly release</system:String>
<system:String x:Key="DownloadWithAria2">Download via aria2</system:String>
<system:String x:Key="UpdateCheckNow">Check update</system:String>

View File

@@ -123,6 +123,7 @@
<system:String x:Key="UpdateAutoCheck">自动检查更新</system:String>
<system:String x:Key="UpdateAutoDownload">自动下载更新包</system:String>
<system:String x:Key="UpdateCheckBeta">检查测试版本更新</system:String>
<system:String x:Key="UpdateCheckNightly">检查内测版本更新</system:String>
<system:String x:Key="DownloadWithAria2">使用 aria2 进行下载</system:String>
<system:String x:Key="UpdateCheckNow">检查更新</system:String>

View File

@@ -43,6 +43,13 @@
Content="{DynamicResource UpdateCheckBeta}"
IsChecked="{Binding UpdateBeta}"
IsEnabled="{Binding UpdateCheck}" />
<CheckBox
Margin="10"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Content="{DynamicResource UpdateCheckNightly}"
IsChecked="{Binding UpdateNightly}"
IsEnabled="{Binding UpdateCheck}" />
<CheckBox
Margin="10"
HorizontalAlignment="Left"

View File

@@ -1379,6 +1379,21 @@ namespace MeoAsstGui
}
/* 软件更新设置 */
private bool _updateNightly = Convert.ToBoolean(ViewStatusStorage.Get("VersionUpdate.UpdateNightly", bool.FalseString));
/// <summary>
/// Gets or sets a value indicating whether to update nightly.
/// </summary>
public bool UpdateNightly
{
get => _updateNightly;
set
{
SetAndNotify(ref _updateNightly, value);
ViewStatusStorage.Set("VersionUpdate.UpdateNightly", value.ToString());
}
}
private bool _updateBeta = Convert.ToBoolean(ViewStatusStorage.Get("VersionUpdate.UpdateBeta", bool.FalseString));
/// <summary>

View File

@@ -413,14 +413,14 @@ namespace MeoAsstGui
/// <returns>操作成功返回 <see langword="true"/>,反之则返回 <see langword="false"/>。</returns>
public bool CheckUpdate(bool force = false)
{
// 开发版不检查更新
if (!force && !isStableVersion())
var settings = _container.Get<SettingsViewModel>();
if (!settings.UpdateCheck)
{
return false;
}
var settings = _container.Get<SettingsViewModel>();
if (!settings.UpdateCheck)
// 开发版不检查更新
if (!settings.UpdateNightly && !force && !isStableVersion())
{
return false;
}
@@ -444,7 +444,12 @@ namespace MeoAsstGui
_latestJson = null;
foreach (var item in releaseArray)
{
if (!settings.UpdateBeta && (bool)item["prerelease"])
if (!settings.UpdateNightly && isStableVersion(item["tag_name"].ToString()))
{
continue;
}
if (!settings.UpdateNightly && !settings.UpdateBeta && (bool)item["prerelease"])
{
continue;
}
@@ -464,18 +469,28 @@ namespace MeoAsstGui
return false;
}
bool curParsed = Semver.SemVersion.TryParse(_curVersion, Semver.SemVersionStyles.AllowLowerV, out var curVersionObj);
bool latestPared = Semver.SemVersion.TryParse(_latestVersion, Semver.SemVersionStyles.AllowLowerV, out var latestVersionObj);
if (curParsed && latestPared)
if (settings.UpdateNightly)
{
if (curVersionObj.CompareSortOrderTo(latestVersionObj) >= 0)
if (_curVersion == _latestVersion)
{
return false;
}
}
else if (string.CompareOrdinal(_curVersion, _latestVersion) >= 0)
else
{
return false;
bool curParsed = Semver.SemVersion.TryParse(_curVersion, Semver.SemVersionStyles.AllowLowerV, out var curVersionObj);
bool latestPared = Semver.SemVersion.TryParse(_latestVersion, Semver.SemVersionStyles.AllowLowerV, out var latestVersionObj);
if (curParsed && latestPared)
{
if (curVersionObj.CompareSortOrderTo(latestVersionObj) >= 0)
{
return false;
}
}
else if (string.CompareOrdinal(_curVersion, _latestVersion) >= 0)
{
return false;
}
}
if (!_latestJson.ContainsKey("assets") || (_latestJson["assets"] as JArray).Count == 0)
@@ -692,7 +707,7 @@ namespace MeoAsstGui
return true;
}
private bool isStableVersion()
private bool isStableVersion(string version = null)
{
// 正式版vX.X.X
// DevBuild (CI)yyyy-MM-dd-HH-mm-ss-{CommitHash[..7]}
@@ -701,23 +716,28 @@ namespace MeoAsstGui
// Release (Local Tag){Tag}-Local
// Debug (Local)DEBUG VERSION
// Script Compiledc{CommitHash[..7]}
if (_curVersion == "DEBUG VERSION")
if (version == null)
{
version = _curVersion;
}
if (version == "DEBUG VERSION")
{
return false;
}
if (_curVersion.StartsWith("c"))
if (version.StartsWith("c"))
{
return false;
}
if (_curVersion.Contains("Local"))
if (version.Contains("Local"))
{
return false;
}
var pattern = @"v((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)";
var match = Regex.Match(_curVersion, pattern);
var match = Regex.Match(version, pattern);
if (match.Success is false)
{
return false;