chore: 添加 Tencent EdgeOne 备用 CDN

This commit is contained in:
uye
2025-07-21 00:18:30 +08:00
parent 76921e4134
commit 51982dcd42
6 changed files with 49 additions and 32 deletions

View File

@@ -45,11 +45,7 @@ namespace MaaWpfGui.Constants
public const string MapPrts = "https://map.ark-nights.com/areas?coord_override=maa";
public const string MaaApi = "https://api.maa.plus/MaaAssistantArknights/api/";
public const string MaaResourceApi = "https://api.maa.plus/MaaAssistantArknights/MaaAssistantArknights/";
public const string AnnMirrorResourceApi = "https://maa-ota.annangela.cn/MaaAssistantArknights/MaaAssistantArknights/";
public const string S3ResourceApi = "https://s3.maa-org.net:25240/maaassistantarknights/MaaAssistantArknights/MaaAssistantArknights/";
public const string R2ResourceApi = "https://maa.r2.imgg.dev/MaaAssistantArknights/MaaAssistantArknights/";
public const string MaaApi2 = "https://api2.maa.plus/MaaAssistantArknights/api/";
public const string QqGroups = "https://api.maa.plus/MaaAssistantArknights/api/qqgroup/index.html";
@@ -57,6 +53,7 @@ namespace MaaWpfGui.Constants
public const string GoogleAdbDownloadUrl = "https://dl.google.com/android/repository/platform-tools-latest-windows.zip";
public const string AdbMaaMirrorDownloadUrl = "https://api.maa.plus/MaaAssistantArknights/api/binaries/adb-windows.zip";
public const string AdbMaaMirror2DownloadUrl = "https://api2.maa.plus/MaaAssistantArknights/api/binaries/adb-windows.zip";
public const string GoogleAdbFilename = "adb-windows.zip";
private static string Language => ConfigurationHelper.GetGlobalValue(ConfigurationKeys.Localization, LocalizationHelper.DefaultLanguage);

View File

@@ -43,7 +43,7 @@ namespace MaaWpfGui.Helper
}
catch (Exception e)
{
_logger.Error("Failed to save response to file: " + e.Message);
_logger.Error(e, "Failed to save response to file: ");
return false;
}
@@ -71,7 +71,7 @@ namespace MaaWpfGui.Helper
}
catch (Exception e)
{
_logger.Error("Failed to get response as stream: " + e.Message);
_logger.Error(e, "Failed to get response as stream: ");
return null;
}
}
@@ -89,7 +89,7 @@ namespace MaaWpfGui.Helper
}
catch (Exception e)
{
_logger.Error("Failed to get response as string: " + e.Message);
_logger.Error(e, "Failed to get response as string: ");
return string.Empty;
}
}

View File

@@ -352,15 +352,15 @@ namespace MaaWpfGui.Main
if (clientType is "" or "Official" or "Bilibili")
{
// Read resources first, then read cache
MoveTasksJson(mainCache);
CopyTasksJson(mainCache);
loaded = LoadResIfExists(mainRes);
loaded &= LoadResIfExists(mainCache);
}
else
{
// Read resources first, then read cache
MoveTasksJson(mainCache);
MoveTasksJson(globalCache);
CopyTasksJson(mainCache);
CopyTasksJson(globalCache);
loaded = LoadResIfExists(mainRes) && LoadResIfExists(mainCache);
loaded &= LoadResIfExists(globalResource) && LoadResIfExists(globalCache);
}
@@ -381,7 +381,7 @@ namespace MaaWpfGui.Main
}
// 新的目录结构为 tasks/tasks.jsonapi 为了兼容,仍然存在 resource/tasks.json
static void MoveTasksJson(string oldPath)
static void CopyTasksJson(string oldPath)
{
try
{

View File

@@ -11,7 +11,8 @@
// but WITHOUT ANY WARRANTY
// </copyright>
using System;
#nullable enable
using System.IO;
using System.Threading.Tasks;
using MaaWpfGui.Constants;
@@ -25,11 +26,26 @@ namespace MaaWpfGui.Services.Web
{
private const string CacheDir = "cache/";
public async Task<JObject> RequestMaaApiWithCache(string api)
public async Task<JObject?> RequestMaaApiWithCache(string api)
{
var url = MaaUrls.MaaApi + api;
return await RequestWithFallback(api, MaaUrls.MaaApi, MaaUrls.MaaApi2);
}
private async Task<JObject?> RequestWithFallback(string api, string primaryBaseUrl, string? fallbackBaseUrl = null)
{
var json = await TryRequest(api, primaryBaseUrl);
if (json != null || string.IsNullOrEmpty(fallbackBaseUrl))
{
return json;
}
return await TryRequest(api, fallbackBaseUrl);
}
private async Task<JObject?> TryRequest(string api, string baseUrl)
{
var url = baseUrl + api;
// await Instances.HttpService.GetStringAsync(new Uri(url));
var response = await ETagCache.FetchResponseWithEtag(url);
if (response == null ||
response.StatusCode == System.Net.HttpStatusCode.NotModified ||
@@ -46,9 +62,9 @@ namespace MaaWpfGui.Services.Web
try
{
var json = (JObject)JsonConvert.DeserializeObject(body);
var json = (JObject?)JsonConvert.DeserializeObject(body);
var cache = CacheDir + api;
string directoryPath = Path.GetDirectoryName(cache);
string? directoryPath = Path.GetDirectoryName(cache);
if (!Directory.Exists(directoryPath))
{
@@ -56,7 +72,6 @@ namespace MaaWpfGui.Services.Web
}
await File.WriteAllTextAsync(cache, body);
ETagCache.Set(response, url);
return json;
@@ -67,7 +82,7 @@ namespace MaaWpfGui.Services.Web
}
}
public JObject LoadApiCache(string api)
public JObject? LoadApiCache(string api)
{
var cache = CacheDir + api;
if (!File.Exists(cache))
@@ -77,7 +92,7 @@ namespace MaaWpfGui.Services.Web
try
{
return (JObject)JsonConvert.DeserializeObject(File.ReadAllText(cache));
return (JObject?)JsonConvert.DeserializeObject(File.ReadAllText(cache));
}
catch
{

View File

@@ -175,7 +175,7 @@ public class VersionUpdateViewModel : Screen
private const string InfoRequestUrl = "repos/MaaAssistantArknights/MaaAssistantArknights/releases/tags/";
*/
private const string MaaUpdateApi = "https://api.maa.plus/MaaAssistantArknights/api/version/summary.json";
private const string MaaUpdateApi = "version/summary.json";
private JObject? _latestJson;
private JObject? _assetsObject;
@@ -868,19 +868,14 @@ public class VersionUpdateViewModel : Screen
private async Task<CheckUpdateRetT> CheckUpdateByMaaApi()
{
string? response = await Instances.HttpService.GetStringAsync(new Uri(MaaUpdateApi)).ConfigureAwait(false);
JObject json = await Instances.MaaApiService.RequestMaaApiWithCache(MaaUpdateApi);
if (string.IsNullOrEmpty(response))
if (json is null)
{
_logger.Error("Failed to get update info from Maa API.");
return CheckUpdateRetT.FailedToGetInfo;
}
if (JsonConvert.DeserializeObject(response) is not JObject json)
{
return CheckUpdateRetT.FailedToGetInfo;
}
string versionType = SettingsViewModel.VersionUpdateSettings.VersionType switch
{
VersionUpdateSettingsUserControlModel.UpdateVersionType.Beta => "beta",

View File

@@ -1058,11 +1058,21 @@ public class ConnectSettingsUserControlModel : PropertyChangedBase
if (!File.Exists(MaaUrls.GoogleAdbFilename))
{
var downloadResult = await Instances.HttpService.DownloadFileAsync(new Uri(MaaUrls.GoogleAdbDownloadUrl), MaaUrls.GoogleAdbFilename);
string[] downloadUrls =
[
MaaUrls.GoogleAdbDownloadUrl,
MaaUrls.AdbMaaMirrorDownloadUrl,
MaaUrls.AdbMaaMirror2DownloadUrl
];
if (!downloadResult)
bool downloadResult = false;
foreach (var url in downloadUrls)
{
downloadResult = await Instances.HttpService.DownloadFileAsync(new Uri(MaaUrls.AdbMaaMirrorDownloadUrl), MaaUrls.GoogleAdbFilename);
downloadResult = await Instances.HttpService.DownloadFileAsync(new(url), MaaUrls.GoogleAdbFilename);
if (downloadResult)
{
break;
}
}
if (!downloadResult)