feat: 更新检查更新逻辑

This commit is contained in:
zzyyyl
2022-10-30 22:45:30 +08:00
parent 3e4efddd0c
commit 2968ec6552

View File

@@ -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