diff --git a/src/MeoAsstGui/Resources/Localizations/en-us.xaml b/src/MeoAsstGui/Resources/Localizations/en-us.xaml index 88269682d1..6046de1cf7 100644 --- a/src/MeoAsstGui/Resources/Localizations/en-us.xaml +++ b/src/MeoAsstGui/Resources/Localizations/en-us.xaml @@ -123,6 +123,7 @@ Auto check update Auto download update Beta release + Nightly release Download via aria2 Check update diff --git a/src/MeoAsstGui/Resources/Localizations/zh-cn.xaml b/src/MeoAsstGui/Resources/Localizations/zh-cn.xaml index c13cae3ad3..3019a48f59 100644 --- a/src/MeoAsstGui/Resources/Localizations/zh-cn.xaml +++ b/src/MeoAsstGui/Resources/Localizations/zh-cn.xaml @@ -123,6 +123,7 @@ 自动检查更新 自动下载更新包 检查测试版本更新 + 检查内测版本更新 使用 aria2 进行下载 检查更新 diff --git a/src/MeoAsstGui/UserControl/VersionUpdateSettingsUserControl.xaml b/src/MeoAsstGui/UserControl/VersionUpdateSettingsUserControl.xaml index c6e7871ca6..026ec8871c 100644 --- a/src/MeoAsstGui/UserControl/VersionUpdateSettingsUserControl.xaml +++ b/src/MeoAsstGui/UserControl/VersionUpdateSettingsUserControl.xaml @@ -43,6 +43,13 @@ Content="{DynamicResource UpdateCheckBeta}" IsChecked="{Binding UpdateBeta}" IsEnabled="{Binding UpdateCheck}" /> + + /// Gets or sets a value indicating whether to update nightly. + /// + 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)); /// diff --git a/src/MeoAsstGui/ViewModels/VersionUpdateViewModel.cs b/src/MeoAsstGui/ViewModels/VersionUpdateViewModel.cs index 6c5888faae..06e0f549e6 100644 --- a/src/MeoAsstGui/ViewModels/VersionUpdateViewModel.cs +++ b/src/MeoAsstGui/ViewModels/VersionUpdateViewModel.cs @@ -413,14 +413,14 @@ namespace MeoAsstGui /// 操作成功返回 ,反之则返回 public bool CheckUpdate(bool force = false) { - // 开发版不检查更新 - if (!force && !isStableVersion()) + var settings = _container.Get(); + if (!settings.UpdateCheck) { return false; } - var settings = _container.Get(); - 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 Compiled:c{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;