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