From 81a98638b0ed111a9fa7c9a6694bd368cd4c5035 Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Tue, 20 May 2025 16:24:08 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/version.json | 2 +- src/MaaWpfGui/Models/ResourceUpdater.cs | 48 +++++++-------- src/MaaWpfGui/Res/Localizations/en-us.xaml | 2 +- src/MaaWpfGui/Res/Localizations/ja-jp.xaml | 6 +- src/MaaWpfGui/Res/Localizations/ko-kr.xaml | 6 +- src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 8 +-- src/MaaWpfGui/Res/Localizations/zh-tw.xaml | 6 +- .../ViewModels/UI/TaskQueueViewModel.cs | 4 +- .../ViewModels/UI/VersionUpdateViewModel.cs | 59 ++++++++++++------- .../VersionUpdateSettingsUserControlModel.cs | 22 ++++--- 10 files changed, 93 insertions(+), 70 deletions(-) diff --git a/resource/version.json b/resource/version.json index 09b94b5f8d..e5d5c5a5f7 100644 --- a/resource/version.json +++ b/resource/version.json @@ -7,5 +7,5 @@ "pool": "定向甄选", "time": 1747296000 }, - "last_updated": "2025-05-15 11:07:00.704" + "last_updated": "2025-05-15 10:07:00.704" } diff --git a/src/MaaWpfGui/Models/ResourceUpdater.cs b/src/MaaWpfGui/Models/ResourceUpdater.cs index e0ff0c278a..af6ac17af9 100644 --- a/src/MaaWpfGui/Models/ResourceUpdater.cs +++ b/src/MaaWpfGui/Models/ResourceUpdater.cs @@ -105,6 +105,7 @@ namespace MaaWpfGui.Models /// /// :已是最新版本。 /// :有新版本。 + /// :有新版本,但未填写 cdk /// :网络错误。 /// :其他错误。 /// @@ -209,8 +210,7 @@ namespace MaaWpfGui.Models if (string.IsNullOrEmpty(cdk)) { - ToastNotification.ShowDirect(string.Format(LocalizationHelper.GetString("MirrorChyanResourceUpdateTip"), releaseNote)); - return (CheckUpdateRetT.OK, null, releaseNote); + return (CheckUpdateRetT.NoMirrorChyanCdk, null, releaseNote); } var uri = data["data"]?["url"]?.ToString(); @@ -295,33 +295,33 @@ namespace MaaWpfGui.Models /// public static async Task CheckAndDownloadResourceUpdate() { - SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = true; - - // 可以用 MirrorChyan 资源更新了喵 - var (ret, uri, releaseNote) = await CheckFromMirrorChyanAsync(); - if (ret != CheckUpdateRetT.OK || string.IsNullOrEmpty(uri)) + try { - SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = false; + SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = true; + + var (ret, uri, releaseNote) = await CheckFromMirrorChyanAsync(); + if (ret == CheckUpdateRetT.NoMirrorChyanCdk) + { + ToastNotification.ShowDirect(string.Format(LocalizationHelper.GetString("MirrorChyanResourceUpdateTip"), releaseNote)); + } + + if (ret != CheckUpdateRetT.OK) + { + return ret; + } + + if (SettingsViewModel.VersionUpdateSettings.UpdateSource == "MirrorChyan" && + await DownloadFromMirrorChyanAsync(uri, releaseNote)) + { + return CheckUpdateRetT.OnlyGameResourceUpdated; + } + return ret; } - - switch (SettingsViewModel.VersionUpdateSettings.UpdateSource) + finally { - case "Github": - break; - - case "MirrorChyan": - if (await DownloadFromMirrorChyanAsync(uri, releaseNote)) - { - SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = false; - return CheckUpdateRetT.OnlyGameResourceUpdated; - } - - break; + SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = false; } - - SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = false; - return ret; } public static async Task ResourceUpdateAndReloadAsync() diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index 919050c47c..5387ab509d 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -286,7 +286,7 @@ You can cancel this popup by clicking the Settings - Issue Report link. Thank yo Force using GitHub MirrorChyan Fill after switching source - Software update detected. Please go to 「Settings - Update Settings」 to configure MirrorChyan CDK or switch to Global Source. + Please go to 「Settings - Update Settings」 to configure MirrorChyan CDK or switch to Global Source. Resource update {0} detected. Please go to 「Settings- Update Settings - Resource Update」 to update manually, or fill in MirrorChayn CDK to update automatically. Resource update {0} detected The CDK has expired. Please use a new CDK for authorization. diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index 43d7181445..f74b869f83 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -277,7 +277,7 @@ 🌏 海外ソースを使用: ● ソフトウェアバージョン:MAA Teamが提供するAPIで更新をチェックし、GitHubまたはMAA Teamが提供するCN Mirrorsから自動的に更新パッケージを取得 - ● リソースバージョン:MirrorChyanが無料の更新検出を提供、設定で「リソース更新」をクリックしてGitHubから手動でダウンロード可能 + ● リソースバージョン:MirrorChyanが無料の更新検出を提供、設定で 「リソース更新」 をクリックしてGitHubから手動でダウンロード可能 🔑 MirrorChyanを使用: ● ソフトウェアとリソースはMirrorChyan経由で優先的に高速ダウンロード @@ -287,8 +287,8 @@ GitHub を強制使用 MirrorChyan 更新ソース切替後入力 - ソフトウェア更新が検出されました。「設定 - 更新設定」に移動して MirrorChyan CDK を設定するか、グローバル ソースに切り替えてください。 - リソース更新 {0} が検出されました。「設定 - 更新設定 - リソース更新」に移動して手動で更新するか、MirrorChayn CDK を入力して自動的に更新してください。 + 「設定 - 更新設定」 に移動して MirrorChyan CDK を設定するか、グローバル ソースに切り替えてください。 + リソース更新 {0} が検出されました。「設定 - 更新設定 - リソース更新」 に移動して手動で更新するか、MirrorChayn CDK を入力して自動的に更新してください。 リソース更新 {0} が検出されました CDK の有効期限が切れました。新しい CDK を使用して認証してください。 CDK が無効です。入力が正しいか確認してください。 diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index 6cf1345b97..8f4fa06667 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -276,7 +276,7 @@ 🌏 글로벌 소스 사용: ● 소프트웨어 버전: MAA Team이 제공하는 API를 통해 업데이트를 확인하며, GitHub 또는 MAA Team이 제공하는 중국 미러에서 자동으로 업데이트 패키지를 받아옵니다. - ● 리소스 버전: MirrorChyan이 무료로 업데이트 감지를 제공하며, 설정의 「리소스 업데이트」를 클릭하여 GitHub에서 수동으로 다운로드할 수 있습니다. + ● 리소스 버전: MirrorChyan이 무료로 업데이트 감지를 제공하며, 설정의 「리소스 업데이트」 를 클릭하여 GitHub에서 수동으로 다운로드할 수 있습니다. 🔑 MirrorChyan 사용: ● 소프트웨어와 리소스는 MirrorChyan을 통해 고속 다운로드가 우선적으로 지원됩니다. @@ -286,8 +286,8 @@ GitHub 강제 사용 MirrorChyan 소스 전환 후 입력 - 소프트웨어 업데이트가 감지되었습니다. 「설정 - 업데이트 설정」으로 이동하여 MirrorChyan CDK를 구성하거나 글로벌 소스로 전환하세요. - 리소스 업데이트 {0}이 감지되었습니다. 「설정 - 업데이트 설정 - 리소스 업데이트」로 이동하여 수동으로 업데이트하거나, MirrorChyan CDK를 입력하여 자동으로 업데이트하세요. + 「설정 - 업데이트 설정」 으로 이동하여 MirrorChyan CDK를 구성하거나 글로벌 소스로 전환하세요. + 리소스 업데이트 {0}이 감지되었습니다. 「설정 - 업데이트 설정 - 리소스 업데이트」 로 이동하여 수동으로 업데이트하거나, MirrorChyan CDK를 입력하여 자동으로 업데이트하세요. 리소스 업데이트 {0}이 감지되었습니다 CDK가 만료되었습니다. 새 CDK로 인증해 주세요. CDK가 유효하지 않습니다. 입력값이 올바른지 확인해 주세요. diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index 3ed3e953cb..0faa7dd71f 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -277,7 +277,7 @@ 🌏 使用海外源: ● 软件版本:由 MAA Team 提供 API 检查更新,从 GitHub 或由 MAA Team 提供的国内镜像自动拉取更新包 - ● 资源版本:由 Mirror酱 提供免费的更新检测,可手动在设置中点击「资源更新」从 GitHub 下载 + ● 资源版本:由 Mirror酱 提供免费的更新检测,可手动在设置中点击 「资源更新」 从 GitHub 下载 🔑 使用 Mirror酱: ● 软件与资源优先通过 Mirror酱 高速下载 @@ -287,8 +287,8 @@ 强制使用 GitHub Mirror酱 切换更新源后填写 - 检测到软件更新。请前往「设置-更新设置」配置 Mirror酱 CDK 或切换海外源。 - 检测到资源更新: {0}。请前往「设置-更新设置-资源更新」手动更新,或配置 Mirror酱 CDK 以自动更新。 + 请前往 「设置-更新设置」 配置 Mirror酱 CDK 或切换海外源。 + 检测到资源更新: {0}。请前往 「设置-更新设置-资源更新」 手动更新,或配置 Mirror酱 CDK 以自动更新。 检测到资源更新: {0} CDK 已过期,请使用新的 CDK 进行授权。 CDK 无效,请检查输入是否正确。 @@ -900,7 +900,7 @@ C:\\leidian\\LDPlayer9。\n 开始编队 选择干员: 当前步骤: {0} {1} - 不支持的关卡,请检查关卡名或前往「设置 - 更新设置 - 资源更新」尝试更新资源版本! + 不支持的关卡,请检查关卡名或前往 「设置 - 更新设置 - 资源更新」 尝试更新资源版本! 识别结果: 连接失败 正在尝试重连 diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index adae36f393..1d4b3c2893 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -276,7 +276,7 @@ 🌏 使用海外源: ● 軟體版本:由 MAA Team 提供 API 檢查更新,從 GitHub 或由 MAA Team 提供的國內鏡像自動拉取更新包 - ● 資源版本:由 MirrorChyan 提供免費的更新檢測,可手動在設定中點擊「資源更新」從 GitHub 下載 + ● 資源版本:由 MirrorChyan 提供免費的更新檢測,可手動在設定中點擊 「資源更新」 從 GitHub 下載 🔑 使用 MirrorChyan: ● 軟體與資源優先通過 MirrorChyan 高速下載 @@ -286,8 +286,8 @@ 強制使用 GitHub MirrorChyan 切換更新源後填寫 - 偵測到軟體更新。請前往「設定-更新設定」設定 MirrorChyan CDK 或切換到全域來源。 - 偵測到資源更新: {0}。請前往「設定-更新設定-資源更新」手動更新,或設定 MirrorChayn CDK 以自動更新。 + 請前往 「設定-更新設定」 設定 MirrorChyan CDK 或切換到全域來源。 + 偵測到資源更新: {0}。請前往 「設定-更新設定-資源更新」 手動更新,或設定 MirrorChayn CDK 以自動更新。 偵測到資源更新: {0} CDK 已過期,請使用新的 CDK 進行授權。 CDK 無效,請檢查輸入是否正確。 diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index 73755c8be6..caa330ed68 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -480,12 +480,12 @@ namespace MaaWpfGui.ViewModels.UI private void HandleCheckForUpdates() { - if (!NeedToCheckForUpdates() || _isCheckingForUpdates) + if (!SettingsViewModel.VersionUpdateSettings.UpdateAutoCheck) { return; } - if (!SettingsViewModel.VersionUpdateSettings.UpdateAutoCheck) + if (!NeedToCheckForUpdates() || _isCheckingForUpdates) { return; } diff --git a/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs b/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs index d9af512635..203d8ceab9 100644 --- a/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs @@ -483,6 +483,17 @@ public class VersionUpdateViewModel : Screen if (!IsDebugVersion()) { + if (SettingsViewModel.VersionUpdateSettings.UpdateSource == "MirrorChyan" && string.IsNullOrEmpty(SettingsViewModel.VersionUpdateSettings.MirrorChyanCdk)) + { + _ = Task.Run(() => + MessageBoxHelper.Show( + LocalizationHelper.GetString("MirrorChyanSelectedButNoCdk"), + "cdk is empty!", + MessageBoxButton.OK, + MessageBoxImage.Warning, + ok: LocalizationHelper.GetString("Ok"))); + } + await VersionUpdateAndAskToRestartAsync(); await ResourceUpdater.ResourceUpdateAndReloadAsync(); } @@ -501,15 +512,15 @@ public class VersionUpdateViewModel : Screen /// Task public async Task VersionUpdateAndAskToRestartAsync() { - var ret = await CheckAndDownloadVersionUpdate(); - switch (ret) + if (SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates) { - case CheckUpdateRetT.OK: - _ = AskToRestart(); - break; - case CheckUpdateRetT.NoMirrorChyanCdk: - ToastNotification.ShowDirect(LocalizationHelper.GetString("MirrorChyanSoftwareUpdateTip")); - break; + return; + } + + var ret = await CheckAndDownloadVersionUpdate(); + if (ret == CheckUpdateRetT.OK) + { + _ = AskToRestart(); } } @@ -519,22 +530,27 @@ public class VersionUpdateViewModel : Screen /// 操作成功返回 ,反之则返回 public async Task CheckAndDownloadVersionUpdate() { - SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = true; - var (checkRet, source) = await CheckUpdate(); - if (checkRet != CheckUpdateRetT.OK) + try + { + SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = true; + + var (checkRet, source) = await CheckUpdate(); + if (checkRet != CheckUpdateRetT.OK) + { + return checkRet; + } + + return source switch + { + AppUpdateSource.MaaApi => await HandleUpdateFromMaaApi(), + AppUpdateSource.MirrorChyan => await HandleUpdateFromMirrorChyan(), + _ => CheckUpdateRetT.UnknownError, + }; + } + finally { SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = false; - return checkRet; } - - var ret = source switch - { - AppUpdateSource.MaaApi => await HandleUpdateFromMaaApi(), - AppUpdateSource.MirrorChyan => await HandleUpdateFromMirrorChyan(), - _ => CheckUpdateRetT.UnknownError, - }; - SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = false; - return ret; } private async Task HandleUpdateFromMaaApi() @@ -1172,6 +1188,7 @@ public class VersionUpdateViewModel : Screen public bool IsDebugVersion(string? version = null) { + return false; version ??= _curVersion; // match case 1: DEBUG VERSION diff --git a/src/MaaWpfGui/ViewModels/UserControl/Settings/VersionUpdateSettingsUserControlModel.cs b/src/MaaWpfGui/ViewModels/UserControl/Settings/VersionUpdateSettingsUserControlModel.cs index fb56cf1fe4..dc7d9ac0b8 100644 --- a/src/MaaWpfGui/ViewModels/UserControl/Settings/VersionUpdateSettingsUserControlModel.cs +++ b/src/MaaWpfGui/ViewModels/UserControl/Settings/VersionUpdateSettingsUserControlModel.cs @@ -20,6 +20,7 @@ using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Threading.Tasks; +using System.Windows; using MaaWpfGui.Constants; using MaaWpfGui.Extensions; using MaaWpfGui.Helper; @@ -426,6 +427,12 @@ public class VersionUpdateSettingsUserControlModel : PropertyChangedBase /// ReSharper disable once UnusedMember.Global public async Task ManualUpdate() { + if (SettingsViewModel.VersionUpdateSettings.UpdateSource == "MirrorChyan" && string.IsNullOrEmpty(SettingsViewModel.VersionUpdateSettings.MirrorChyanCdk)) + { + ToastNotification.ShowDirect(LocalizationHelper.GetString("MirrorChyanSelectedButNoCdk")); + return; + } + var ret = await Instances.VersionUpdateViewModel.CheckAndDownloadVersionUpdate(); var toastMessage = ret switch @@ -457,21 +464,20 @@ public class VersionUpdateSettingsUserControlModel : PropertyChangedBase // ReSharper disable once UnusedMember.Global public async Task ManualUpdateResource() { + if (SettingsViewModel.VersionUpdateSettings.UpdateSource == "MirrorChyan" && string.IsNullOrEmpty(SettingsViewModel.VersionUpdateSettings.MirrorChyanCdk)) + { + ToastNotification.ShowDirect(LocalizationHelper.GetString("MirrorChyanSelectedButNoCdk")); + return; + } + IsCheckingForUpdates = true; var (ret, uri, releaseNote) = await ResourceUpdater.CheckFromMirrorChyanAsync(); var toastMessage = ret switch { - VersionUpdateViewModel.CheckUpdateRetT.NoNeedToUpdate => string.Empty, - VersionUpdateViewModel.CheckUpdateRetT.NoNeedToUpdateDebugVersion => LocalizationHelper.GetString("NoNeedToUpdateDebugVersion"), VersionUpdateViewModel.CheckUpdateRetT.AlreadyLatest => LocalizationHelper.GetString("AlreadyLatest"), VersionUpdateViewModel.CheckUpdateRetT.UnknownError => LocalizationHelper.GetString("NewVersionDetectFailedTitle"), VersionUpdateViewModel.CheckUpdateRetT.NetworkError => LocalizationHelper.GetString("CheckNetworking"), - VersionUpdateViewModel.CheckUpdateRetT.FailedToGetInfo => LocalizationHelper.GetString("GetReleaseNoteFailed"), - VersionUpdateViewModel.CheckUpdateRetT.OK => string.Empty, - VersionUpdateViewModel.CheckUpdateRetT.NewVersionIsBeingBuilt => LocalizationHelper.GetString("NewVersionIsBeingBuilt"), - VersionUpdateViewModel.CheckUpdateRetT.OnlyGameResourceUpdated => LocalizationHelper.GetString("GameResourceUpdated"), - VersionUpdateViewModel.CheckUpdateRetT.NoMirrorChyanCdk => LocalizationHelper.GetString("MirrorChyanSoftwareUpdateTip"), _ => string.Empty, }; @@ -482,7 +488,7 @@ public class VersionUpdateSettingsUserControlModel : PropertyChangedBase if (ret == VersionUpdateViewModel.CheckUpdateRetT.AlreadyLatest) { - SettingsViewModel.VersionUpdateSettings.IsCheckingForUpdates = false; + IsCheckingForUpdates = false; return; }