diff --git a/src/MaaWpfGui/Constants/Enums.cs b/src/MaaWpfGui/Constants/Enums.cs
new file mode 100644
index 0000000000..e203726a81
--- /dev/null
+++ b/src/MaaWpfGui/Constants/Enums.cs
@@ -0,0 +1,76 @@
+//
+// MaaWpfGui - A part of the MaaCoreArknights project
+// Copyright (C) 2021 MistEO and Contributors
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License v3.0 only as published by
+// the Free Software Foundation, either version 3 of the License, or
+// any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY
+//
+
+namespace MaaWpfGui.Constants
+{
+ public static class Enums
+ {
+ public enum MirrorChyanErrorCode
+ {
+ ///
+ /// 请求成功
+ ///
+ Success = 0,
+
+ ///
+ /// 参数不正确,请参考集成文档
+ ///
+ InvalidParams = 1001,
+
+ ///
+ /// CDK 已过期
+ ///
+ KeyExpired = 7001,
+
+ ///
+ /// CDK 错误
+ ///
+ KeyInvalid = 7002,
+
+ ///
+ /// CDK 今日下载次数已达上限
+ ///
+ ResourceQuotaExhausted = 7003,
+
+ ///
+ /// CDK 类型和待下载的资源不匹配
+ ///
+ KeyMismatched = 7004,
+
+ ///
+ /// 对应架构和系统下的资源不存在
+ ///
+ ResourceNotFound = 8001,
+
+ ///
+ /// 错误的系统参数
+ ///
+ InvalidOs = 8002,
+
+ ///
+ /// 错误的架构参数
+ ///
+ InvalidArch = 8003,
+
+ ///
+ /// 错误的更新通道参数
+ ///
+ InvalidChannel = 8004,
+
+ ///
+ /// 未区分的业务错误,以响应体 JSON 的 msg 为准
+ ///
+ Undivided = 1,
+ }
+ }
+}
diff --git a/src/MaaWpfGui/Models/ResourceUpdater.cs b/src/MaaWpfGui/Models/ResourceUpdater.cs
index f82758cd19..7a6d506e4d 100644
--- a/src/MaaWpfGui/Models/ResourceUpdater.cs
+++ b/src/MaaWpfGui/Models/ResourceUpdater.cs
@@ -147,9 +147,33 @@ namespace MaaWpfGui.Models
return (CheckUpdateRetT.UnknownError, null, null);
}
- if (data["code"]?.ToString() != "0")
+ var errorCode = data["code"]?.ToObject() ?? Enums.MirrorChyanErrorCode.Undivided;
+ if (errorCode != Enums.MirrorChyanErrorCode.Success)
{
- ToastNotification.ShowDirect(data["msg"]?.ToString() ?? LocalizationHelper.GetString("GameResourceFailed"));
+ switch (errorCode)
+ {
+ case Enums.MirrorChyanErrorCode.KeyExpired:
+ ToastNotification.ShowDirect(LocalizationHelper.GetString("MirrorChyanCdkExpired"));
+ break;
+ case Enums.MirrorChyanErrorCode.KeyInvalid:
+ ToastNotification.ShowDirect(LocalizationHelper.GetString("MirrorChyanCdkInvalid"));
+ break;
+ case Enums.MirrorChyanErrorCode.ResourceQuotaExhausted:
+ ToastNotification.ShowDirect(LocalizationHelper.GetString("MirrorChyanCdkQuotaExhausted"));
+ break;
+ case Enums.MirrorChyanErrorCode.KeyMismatched:
+ ToastNotification.ShowDirect(LocalizationHelper.GetString("MirrorChyanCdkMismatched"));
+ break;
+ case Enums.MirrorChyanErrorCode.InvalidParams:
+ case Enums.MirrorChyanErrorCode.ResourceNotFound:
+ case Enums.MirrorChyanErrorCode.InvalidOs:
+ case Enums.MirrorChyanErrorCode.InvalidArch:
+ case Enums.MirrorChyanErrorCode.InvalidChannel:
+ case Enums.MirrorChyanErrorCode.Undivided:
+ ToastNotification.ShowDirect(data["msg"]?.ToString() ?? LocalizationHelper.GetString("GameResourceFailed"));
+ break;
+ }
+
return (CheckUpdateRetT.UnknownError, null, null);
}
diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml
index 1f318a31ba..849067eb52 100644
--- a/src/MaaWpfGui/Res/Localizations/en-us.xaml
+++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml
@@ -255,6 +255,10 @@ You can cancel this popup by clicking the Settings - About Us - Issue Reporting
Fill after switching source
Software update detected. 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.
+ The CDK has expired. Please use a new CDK for authorization.
+ The CDK is invalid. Please check if the input is correct.
+ The CDK has reached the maximum download limit for today. Please try again tomorrow.
+ The CDK type does not match the resource to be downloaded. Please check the CDK's applicable scope.
New Version Found
Downloading from 「Global Source」...
Downloading from 「MirrorChyan」...
diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
index f8fbd304b9..326b7d79eb 100644
--- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
@@ -255,6 +255,10 @@
更新ソース切替後入力
ソフトウェア更新が検出されました。「設定 - 更新設定」に移動して MirrorChyan CDK を設定するか、グローバル ソースに切り替えてください。
リソース更新 {0} が検出されました。「設定 - 更新設定 - リソース更新」に移動して手動で更新するか、MirrorChayn CDK を入力して自動的に更新してください。
+ CDK の有効期限が切れました。新しい CDK を使用して認証してください。
+ CDK が無効です。入力が正しいか確認してください。
+ CDK の本日のダウンロード回数が上限に達しました。明日もう一度お試しください。
+ CDK の種類がダウンロード対象のリソースと一致しません。CDK の適用範囲を確認してください。
新しいバージョンが見つかりました
「Global Source」からダウンロード中...
「MirrorChyan」からダウンロード中...
diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
index 74c49da878..ea8a050ec5 100644
--- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
@@ -255,6 +255,10 @@
소스 전환 후 입력
소프트웨어 업데이트가 감지되었습니다. 「설정 - 업데이트 설정」으로 이동하여 MirrorChyan CDK를 구성하거나 글로벌 소스로 전환하세요.
리소스 업데이트 {0}이 감지되었습니다. 「설정 - 업데이트 설정 - 리소스 업데이트」로 이동하여 수동으로 업데이트하거나 MirrorChayn CDK를 입력하여 자동으로 업데이트하세요.
+ CDK가 만료되었습니다. 새 CDK를 사용하여 인증하세요.
+ CDK가 유효하지 않습니다. 입력이 올바른지 확인하세요.
+ CDK의 오늘 다운로드 횟수가 제한에 도달했습니다. 내일 다시 시도하세요.
+ CDK 유형이 다운로드할 리소스와 일치하지 않습니다. CDK의 적용 범위를 확인하세요.
새로운 버전 확인
「Global Source」에서 다운로드 중...
「MirrorChyan」에서 다운로드 중...
diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
index c9d8917870..e0f3c00527 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
@@ -255,6 +255,10 @@
切换更新源后填写
检测到软件更新。请前往「设置-更新设置」配置 Mirror酱 CDK 或切换海外源。
检测到资源更新{0}。请前往「设置-更新设置-资源更新」手动更新,或配置 Mirror酱 CDK 以自动更新。
+ CDK 已过期,请使用新的 CDK 进行授权。
+ CDK 无效,请检查输入是否正确。
+ CDK 今日下载次数已达上限,请明日再试。
+ CDK 类型与待下载的资源不匹配,请检查 CDK 适用范围。
检测到新版本
正在使用「海外源」下载……
正在使用「Mirror酱」下载……
diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
index a01d88d3dd..c0ccf0fe63 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
@@ -255,6 +255,10 @@
切換更新源後填寫
偵測到軟體更新。請前往「設定-更新設定」設定 MirrorChyan CDK 或切換到全域來源。
偵測到資源更新{0}。請前往「設定-更新設定-資源更新」手動更新,或設定 MirrorChayn CDK 以自動更新。
+ CDK 已過期,請使用新的 CDK 進行授權。
+ CDK 無效,請檢查輸入是否正確。
+ CDK 今日下載次數已達上限,請明日再試。
+ CDK 類型與待下載的資源不匹配,請檢查 CDK 適用範圍。
檢測到新版本
正在使用「全域來源」下載…
正在使用「MirrorChyan」下載…
diff --git a/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs b/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs
index 64d43b101c..d1593bf61a 100644
--- a/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs
+++ b/src/MaaWpfGui/ViewModels/UI/VersionUpdateViewModel.cs
@@ -686,15 +686,10 @@ public class VersionUpdateViewModel : Screen
using var toast = new ToastNotification((otaFound ? LocalizationHelper.GetString("NewVersionFoundTitle") : LocalizationHelper.GetString("NewVersionFoundButNoPackageTitle")) + " : " + UpdateTag);
if (goDownload)
{
- OutputDownloadProgress(downloading: false, output: LocalizationHelper.GetString("NewVersionDownloadPreparing"));
- if (globalSource)
- {
- toast.AppendContentText(LocalizationHelper.GetString("NewVersionFoundDescDownloadingWithGlobalSource"));
- }
- else
- {
- toast.AppendContentText(LocalizationHelper.GetString("NewVersionFoundDescDownloadingWithMirrorChyan"));
- }
+ OutputDownloadProgress(LocalizationHelper.GetString("NewVersionDownloadPreparing"), false, globalSource);
+ toast.AppendContentText(globalSource
+ ? LocalizationHelper.GetString("NewVersionFoundDescDownloadingWithGlobalSource")
+ : LocalizationHelper.GetString("NewVersionFoundDescDownloadingWithMirrorChyan"));
}
if (!otaFound)
@@ -1092,17 +1087,21 @@ public class VersionUpdateViewModel : Screen
OutputDownloadProgress(progress + $" {speedDisplay}");
}
- private static void OutputDownloadProgress(string output, bool downloading = true, bool globalSource = true)
+ private static bool _globalSource = true;
+
+ private static void OutputDownloadProgress(string output, bool downloading = true, bool? globalSource = null)
{
+ globalSource ??= _globalSource;
+ _globalSource = globalSource.Value;
if (_logItemViewModels == null)
{
return;
}
- string fullText = string.Empty;
+ string fullText;
if (downloading)
{
- string key = globalSource ? "NewVersionFoundDescDownloadingWithGlobalSource" : "NewVersionFoundDescDownloadingWithMirrorChyan";
+ string key = globalSource.Value ? "NewVersionFoundDescDownloadingWithGlobalSource" : "NewVersionFoundDescDownloadingWithMirrorChyan";
fullText = LocalizationHelper.GetString(key) + "\n" + output;
}
else