mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 17:57:01 +08:00
fix: 网络连接错误的情况下读取了本地缓存也提示了获取热更成功
This commit is contained in:
@@ -83,7 +83,13 @@ namespace MaaWpfGui.Services
|
||||
}
|
||||
}
|
||||
|
||||
MergePermanentAndActivityStages(await LoadWebStages());
|
||||
var webStages = await LoadWebStages();
|
||||
if (webStages is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
MergePermanentAndActivityStages(webStages);
|
||||
|
||||
_ = Execute.OnUIThreadAsync(() =>
|
||||
{
|
||||
@@ -139,17 +145,18 @@ namespace MaaWpfGui.Services
|
||||
}
|
||||
*/
|
||||
|
||||
private static async Task<JObject> LoadWebStages()
|
||||
private static async Task<JObject?> LoadWebStages()
|
||||
{
|
||||
var clientType = GetClientType();
|
||||
|
||||
var activityTask = Instances.MaaApiService.RequestMaaApiWithCache(StageApi);
|
||||
var tasksTask = Instances.MaaApiService.RequestMaaApiWithCache(TasksApi);
|
||||
var activityTask = Instances.MaaApiService.RequestMaaApiWithCache(StageApi, false);
|
||||
var tasksTask = Instances.MaaApiService.RequestMaaApiWithCache(TasksApi, false);
|
||||
|
||||
await Task.WhenAll(activityTask, tasksTask);
|
||||
|
||||
JObject activity = await activityTask;
|
||||
JObject tasksJson = await tasksTask;
|
||||
var activityJson = await activityTask;
|
||||
var tasksJson = await tasksTask;
|
||||
JObject? globalTasksJson = null;
|
||||
if (clientType != "Official" && tasksJson != null)
|
||||
{
|
||||
var tasksPath = "resource/global/" + clientType + '/' + TasksApi;
|
||||
@@ -157,14 +164,24 @@ namespace MaaWpfGui.Services
|
||||
// Download the client specific resources only when the Official ones are successfully downloaded so that the client specific resource version is the actual version
|
||||
// TODO: There may be an issue when the CN resource is loaded from cache (e.g. network down) while global resource is downloaded (e.g. network up again)
|
||||
// var tasksJsonClient = fromWeb ? WebService.RequestMaaApiWithCache(tasksPath) : WebService.RequestMaaApiWithCache(tasksPath);
|
||||
await Instances.MaaApiService.RequestMaaApiWithCache(tasksPath);
|
||||
globalTasksJson = await Instances.MaaApiService.RequestMaaApiWithCache(tasksPath, false);
|
||||
}
|
||||
|
||||
if (activityJson is null || tasksJson is null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (clientType != "Official" && globalTasksJson is null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
await Task.Run(() =>
|
||||
{
|
||||
Instances.AsstProxy.LoadResource();
|
||||
});
|
||||
return activity;
|
||||
return activityJson;
|
||||
}
|
||||
|
||||
private void MergePermanentAndActivityStages(JObject? activity)
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace MaaWpfGui.Services.Web
|
||||
{
|
||||
public interface IMaaApiService
|
||||
{
|
||||
Task<JObject> RequestMaaApiWithCache(string api);
|
||||
Task<JObject> RequestMaaApiWithCache(string api, bool allowFallbackToCache = true);
|
||||
|
||||
JObject LoadApiCache(string api);
|
||||
}
|
||||
|
||||
@@ -26,35 +26,43 @@ namespace MaaWpfGui.Services.Web
|
||||
{
|
||||
private static readonly string CacheDir = PathsHelper.BaseDir + "/cache/";
|
||||
|
||||
public async Task<JObject?> RequestMaaApiWithCache(string api)
|
||||
public async Task<JObject?> RequestMaaApiWithCache(string api, bool allowFallbackToCache = true)
|
||||
{
|
||||
return await RequestWithFallback(api, MaaUrls.MaaApi, MaaUrls.MaaApi2);
|
||||
return await RequestWithFallback(api, MaaUrls.MaaApi, MaaUrls.MaaApi2, allowFallbackToCache);
|
||||
}
|
||||
|
||||
private async Task<JObject?> RequestWithFallback(string api, string primaryBaseUrl, string? fallbackBaseUrl = null)
|
||||
private async Task<JObject?> RequestWithFallback(string api, string primaryBaseUrl, string? fallbackBaseUrl = null, bool allowFallbackToCache = true)
|
||||
{
|
||||
var json = await TryRequest(api, primaryBaseUrl);
|
||||
var json = await TryRequest(api, primaryBaseUrl, allowFallbackToCache);
|
||||
if (json != null || string.IsNullOrEmpty(fallbackBaseUrl))
|
||||
{
|
||||
return json;
|
||||
}
|
||||
|
||||
return await TryRequest(api, fallbackBaseUrl);
|
||||
return await TryRequest(api, fallbackBaseUrl, allowFallbackToCache);
|
||||
}
|
||||
|
||||
private async Task<JObject?> TryRequest(string api, string baseUrl)
|
||||
private async Task<JObject?> TryRequest(string api, string baseUrl, bool allowFallbackToCache = true)
|
||||
{
|
||||
var url = baseUrl + api;
|
||||
var cache = CacheDir + api;
|
||||
|
||||
var response = await ETagCache.FetchResponseWithEtag(url, !File.Exists(cache));
|
||||
if (response == null ||
|
||||
response.StatusCode == System.Net.HttpStatusCode.NotModified ||
|
||||
response.StatusCode != System.Net.HttpStatusCode.OK)
|
||||
if (response == null)
|
||||
{
|
||||
return allowFallbackToCache ? LoadApiCache(api) : null;
|
||||
}
|
||||
|
||||
if (response.StatusCode == System.Net.HttpStatusCode.NotModified)
|
||||
{
|
||||
return LoadApiCache(api);
|
||||
}
|
||||
|
||||
if (response.StatusCode != System.Net.HttpStatusCode.OK)
|
||||
{
|
||||
return allowFallbackToCache ? LoadApiCache(api) : null;
|
||||
}
|
||||
|
||||
var body = await HttpResponseHelper.GetStringAsync(response);
|
||||
if (string.IsNullOrEmpty(body))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user