mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-19 10:32:19 +08:00
feat: 更新检查更新逻辑
This commit is contained in:
@@ -166,6 +166,8 @@ namespace MeoAsstGui
|
||||
}
|
||||
|
||||
private const string RequestUrl = "https://api.github.com/repos/MaaAssistantArknights/MaaRelease/releases";
|
||||
private const string StableRequestUrl = "https://api.github.com/repos/MaaAssistantArknights/MaaAssistantArknights/releases/latest";
|
||||
private const string MaaReleaseRequestUrlByTag = "https://api.github.com/repos/MaaAssistantArknights/MaaRelease/releases/tags/";
|
||||
private const string InfoRequestUrl = "https://api.github.com/repos/MaaAssistantArknights/MaaAssistantArknights/releases/tags/";
|
||||
private const string RequestUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.76";
|
||||
private JObject _latestJson;
|
||||
@@ -420,42 +422,56 @@ namespace MeoAsstGui
|
||||
}
|
||||
|
||||
// 开发版不检查更新
|
||||
if (!settings.UpdateNightly && !force && !isStableVersion())
|
||||
if (!(settings.UpdateNightly && isCVersion()) && !force && !isStableVersion())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
const int RequestRetryMaxTimes = 5;
|
||||
var response = RequestApi(RequestUrl);
|
||||
for (int i = 0; response.Length == 0 && i < RequestRetryMaxTimes; i++)
|
||||
{
|
||||
response = RequestApi(RequestUrl);
|
||||
}
|
||||
|
||||
if (response.Length == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var releaseArray = JsonConvert.DeserializeObject(response) as JArray;
|
||||
|
||||
_latestJson = null;
|
||||
foreach (var item in releaseArray)
|
||||
if (!settings.UpdateBeta && !settings.UpdateNightly)
|
||||
{
|
||||
if (!settings.UpdateNightly && isStableVersion(item["tag_name"].ToString()))
|
||||
// 稳定版更新使用主仓库 /latest 接口
|
||||
// 直接使用 MaaRelease 的话,我怕默认的 30 个都找不到稳定版,因为有可能 Nightly 发了很多
|
||||
var stableResponse = RequestApi(StableRequestUrl, RequestRetryMaxTimes);
|
||||
if (stableResponse.Length == 0)
|
||||
{
|
||||
continue;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!settings.UpdateNightly && !settings.UpdateBeta && (bool)item["prerelease"])
|
||||
_latestJson = JsonConvert.DeserializeObject(stableResponse) as JObject;
|
||||
_latestVersion = _latestJson["tag_name"].ToString();
|
||||
stableResponse = RequestApi(MaaReleaseRequestUrlByTag + _latestVersion, RequestRetryMaxTimes);
|
||||
if (stableResponse.Length == 0)
|
||||
{
|
||||
continue;
|
||||
return false;
|
||||
}
|
||||
|
||||
_latestJson = item as JObject;
|
||||
break;
|
||||
_latestJson = JsonConvert.DeserializeObject(stableResponse) as JObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 非稳定版更新使用 MaaRelease/releases 接口
|
||||
var response = RequestApi(RequestUrl, RequestRetryMaxTimes);
|
||||
if (response.Length == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var releaseArray = JsonConvert.DeserializeObject(response) as JArray;
|
||||
|
||||
_latestJson = null;
|
||||
foreach (var item in releaseArray)
|
||||
{
|
||||
if (!settings.UpdateNightly && isStableVersion(item["tag_name"].ToString()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
_latestJson = item as JObject;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_latestJson == null)
|
||||
@@ -464,6 +480,7 @@ namespace MeoAsstGui
|
||||
}
|
||||
|
||||
_latestVersion = _latestJson["tag_name"].ToString();
|
||||
var releaseAssets = _latestJson["assets"] as JArray;
|
||||
if (ViewStatusStorage.Get("VersionUpdate.Ignore", string.Empty) == _latestVersion)
|
||||
{
|
||||
return false;
|
||||
@@ -493,28 +510,19 @@ namespace MeoAsstGui
|
||||
}
|
||||
}
|
||||
|
||||
if (!_latestJson.ContainsKey("assets") || (_latestJson["assets"] as JArray).Count == 0)
|
||||
// 非稳定版本只能是Nightly下载的,这玩意主仓库没有,就不必再次请求主仓库的信息了
|
||||
if (isStableVersion(_latestVersion))
|
||||
{
|
||||
return false;
|
||||
var infoResponse = RequestApi(InfoRequestUrl + _latestVersion, RequestRetryMaxTimes);
|
||||
if (infoResponse.Length == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
_latestJson = JsonConvert.DeserializeObject(infoResponse) as JObject;
|
||||
}
|
||||
|
||||
var releaseAssets = _latestJson["assets"] as JArray;
|
||||
_assetsObject = null;
|
||||
|
||||
var infoRequestUrl = InfoRequestUrl + _latestVersion;
|
||||
var infoResponse = RequestApi(infoRequestUrl);
|
||||
for (int i = 0; infoResponse.Length == 0 && i < RequestRetryMaxTimes; i++)
|
||||
{
|
||||
infoResponse = RequestApi(infoRequestUrl);
|
||||
}
|
||||
|
||||
if (infoResponse.Length == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
_latestJson = JsonConvert.DeserializeObject(infoResponse) as JObject;
|
||||
|
||||
foreach (var curAssets in releaseAssets)
|
||||
{
|
||||
string name = curAssets["name"].ToString().ToLower();
|
||||
@@ -581,6 +589,17 @@ namespace MeoAsstGui
|
||||
}
|
||||
}
|
||||
|
||||
private string RequestApi(string url, int retryTimes)
|
||||
{
|
||||
string response;
|
||||
do
|
||||
{
|
||||
response = RequestApi(url);
|
||||
}
|
||||
while (response.Length == 0 && retryTimes-- > 0);
|
||||
return response;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取 GitHub Assets 对象对应的文件
|
||||
/// </summary>
|
||||
@@ -714,6 +733,16 @@ namespace MeoAsstGui
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool isCVersion(string version = null)
|
||||
{
|
||||
if (version == null)
|
||||
{
|
||||
version = _curVersion;
|
||||
}
|
||||
|
||||
return version.StartsWith("c");
|
||||
}
|
||||
|
||||
private bool isStableVersion(string version = null)
|
||||
{
|
||||
// 正式版:vX.X.X
|
||||
|
||||
Reference in New Issue
Block a user