app/lib/common/conf/url_conf.dart

114 lines
3.6 KiB
Dart
Raw Normal View History

2024-11-03 16:42:39 +08:00
import 'package:starcitizen_doctor/api/api.dart';
import 'package:starcitizen_doctor/common/io/doh_client.dart';
2024-02-07 22:19:43 +08:00
import 'package:starcitizen_doctor/common/io/rs_http.dart';
import 'package:starcitizen_doctor/common/rust/http_package.dart';
2024-03-01 20:59:43 +08:00
import 'package:starcitizen_doctor/common/utils/log.dart';
2024-02-03 12:28:15 +08:00
2024-01-29 20:44:00 +08:00
class URLConf {
2024-02-03 12:28:15 +08:00
/// HOME API
2024-07-13 10:09:24 +08:00
static String gitApiHome = "https://git.scbox.xkeyc.cn";
static String rssApiHome = "https://rss.scbox.xkeyc.cn";
2024-02-17 11:30:01 +08:00
static const String analyticsApiHome = "https://scbox.org";
2024-01-29 20:44:00 +08:00
2024-02-07 22:19:43 +08:00
static bool isUrlCheckPass = false;
2024-01-29 20:44:00 +08:00
2024-02-03 12:28:15 +08:00
/// URLS
2024-02-07 22:19:43 +08:00
static String get giteaAttachmentsUrl => "$gitApiHome/SCToolBox/Release";
static String get gitlabLocalizationUrl =>
2024-02-03 12:28:15 +08:00
"$gitApiHome/SCToolBox/LocalizationData";
2024-01-29 20:44:00 +08:00
2024-05-01 13:48:37 +08:00
static String get gitApiRSILauncherEnhanceUrl =>
"$gitApiHome/SCToolBox/RSILauncherEnhance";
2024-02-07 22:46:18 +08:00
static String get apiRepoPath => "$gitApiHome/SCToolBox/api/raw/branch/main";
2024-02-07 22:19:43 +08:00
2024-02-07 23:14:02 +08:00
static String get gitlabApiPath => "$gitApiHome/api/v1/";
2024-01-29 20:44:00 +08:00
2024-02-07 22:19:43 +08:00
static String get webTranslateHomeUrl =>
2024-02-03 12:28:15 +08:00
"$gitApiHome/SCToolBox/ScWeb_Chinese_Translate/raw/branch/main/json/locales";
2024-01-29 20:44:00 +08:00
2024-02-07 22:19:43 +08:00
static String get rssVideoUrl =>
2024-02-03 12:28:15 +08:00
"$rssApiHome/bilibili/user/channel/27976358/290653";
2024-01-29 20:44:00 +08:00
2024-02-07 22:19:43 +08:00
static String get rssTextUrl2 =>
2024-02-03 12:28:15 +08:00
"$rssApiHome/baidu/tieba/user/%E7%81%AC%E7%81%ACG%E7%81%AC%E7%81%AC&";
2024-11-23 21:51:36 +08:00
static const String googleTranslateApiUrl =
"https://translate-g-proxy.xkeyc.com";
2024-11-23 21:55:23 +08:00
static const feedbackUrl = "https://support.citizenwiki.cn/all";
static const feedbackFAQUrl = "https://support.citizenwiki.cn/t/sc-toolbox";
2024-02-03 12:28:15 +08:00
2024-02-07 22:19:43 +08:00
static String get devReleaseUrl => "$gitApiHome/SCToolBox/Release/releases";
static Future<bool> checkHost() async {
// 使用 DNS 获取可用列表
2024-11-03 16:42:39 +08:00
final gitApiList = _genFinalList(await dnsLookupTxt("git.dns.scbox.org"));
2024-02-07 22:19:43 +08:00
dPrint("DNS gitApiList ==== $gitApiList");
final fasterGit = await getFasterUrl(gitApiList);
dPrint("gitApiList.Faster ==== $fasterGit");
if (fasterGit != null) {
gitApiHome = fasterGit;
}
2024-11-03 16:42:39 +08:00
final rssApiList = _genFinalList(await dnsLookupTxt("rss.dns.scbox.org"));
2024-02-07 22:19:43 +08:00
final fasterRss = await getFasterUrl(rssApiList);
dPrint("DNS rssApiList ==== $rssApiList");
dPrint("rssApiList.Faster ==== $fasterRss");
if (fasterRss != null) {
rssApiHome = fasterRss;
}
isUrlCheckPass = fasterGit != null && fasterRss != null;
return isUrlCheckPass;
}
2024-11-03 16:42:39 +08:00
static Future<List<String>> dnsLookupTxt(String host) async {
if (await Api.isUseInternalDNS()) {
dPrint("[URLConf] use internal DNS LookupTxt $host");
return RSHttp.dnsLookupTxt(host);
}
dPrint("[URLConf] use DOH LookupTxt $host");
return (await DohClient.resolveTXT(host)) ?? [];
}
2024-02-07 22:19:43 +08:00
static Future<String?> getFasterUrl(List<String> urls) async {
String firstUrl = "";
int callLen = 0;
void onCall(RustHttpResponse? response, String url) {
callLen++;
if (response != null && response.statusCode == 200 && firstUrl.isEmpty) {
firstUrl = url;
2024-02-03 12:28:15 +08:00
}
}
2024-02-07 22:19:43 +08:00
for (var value in urls) {
RSHttp.head(value).then((resp) => onCall(resp, value), onError: (err) {
callLen++;
dPrint("RSHttp.head error $err");
});
}
while (true) {
await Future.delayed(const Duration(milliseconds: 16));
if (firstUrl.isNotEmpty) {
return firstUrl;
}
if (callLen == urls.length && firstUrl.isEmpty) {
return null;
2024-02-03 12:28:15 +08:00
}
}
2024-02-07 22:19:43 +08:00
}
2024-02-03 12:28:15 +08:00
2024-02-07 22:19:43 +08:00
static List<String> _genFinalList(List<String> sList) {
List<String> list = [];
for (var ll in sList) {
final ssList = ll.split(",");
for (var value in ssList) {
list.add(value);
}
2024-02-03 12:28:15 +08:00
}
2024-02-07 22:19:43 +08:00
return list;
2024-02-03 12:28:15 +08:00
}
2024-01-29 20:44:00 +08:00
}