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;
}