import 'dart:convert'; import 'package:hive/hive.dart'; import 'package:starcitizen_doctor/common/conf/url_conf.dart'; import 'package:starcitizen_doctor/common/io/rs_http.dart'; import 'package:starcitizen_doctor/data/app_placard_data.dart'; import 'package:starcitizen_doctor/data/app_torrent_data.dart'; import 'package:starcitizen_doctor/data/app_version_data.dart'; import 'package:starcitizen_doctor/data/countdown_festival_item_data.dart'; import 'package:starcitizen_doctor/data/input_method_api_data.dart'; import 'package:starcitizen_doctor/data/sc_localization_data.dart'; class Api { static Future getAppVersion() async { return AppVersionData.fromJson( await getRepoJson("sc_doctor", "version.json")); } static Future getAppPlacard() async { return AppPlacardData.fromJson( await getRepoJson("sc_doctor", "placard.json")); } static Future> getFestivalCountdownList() async { List l = []; final r = json.decode(await getRepoData("sc_doctor", "countdown.json")); if (r is List) { for (var element in r) { l.add(CountdownFestivalItemData.fromJson(element)); } } l.sort((a, b) => (a.time ?? 0) - (b.time ?? 0)); return l; } static Future> getAppReleaseDataByVersionName( String version) async { final r = await RSHttp.getText( "${URLConf.gitlabApiPath}repos/SCToolBox/Release/releases/tags/$version"); return json.decode(r); } static Future> getScLocalizationData( String lang) async { final data = json.decode(await getRepoData("localizations", "$lang.json")); List l = []; if (data is List) { for (var element in data) { l.add(ScLocalizationData.fromJson(element)); } } return l; } static Future getCommunityInputMethodIndexData() async { final data = await getCommunityInputMethodData("index.json"); return InputMethodApiData.fromJson(json.decode(data)); } static Future getCommunityInputMethodData(String file) async { return getRepoData("input_method", file); } static Future> getAppTorrentDataList() async { final data = await getRepoData("sc_doctor", "torrent.json"); final dataJson = json.decode(data); List l = []; if (dataJson is List) { for (var value in dataJson) { l.add(AppTorrentData.fromJson(value)); } } return l; } static Future getTorrentTrackerList() async { final data = await getRepoData("sc_doctor", "tracker.list"); return data; } static Future getScServerStatus() async { final r = await RSHttp.getText( "https://status.robertsspaceindustries.com/index.json"); final map = json.decode(r); return map["systems"]; } static Future> getRepoJson( String dir, String name) async { final data = await getRepoData(dir, name); return json.decode(data); } static Future getRepoData(String dir, String name) async { final r = await RSHttp.getText("${URLConf.apiRepoPath}/$dir/$name", withCustomDns: await isUseInternalDNS()); return r; } static Future doGoogleTranslate(String input) async { final out = await RSHttp.getText( "${URLConf.googleTranslateApiUrl}/translate_a/single?client=gtx&dt=t&sl=auto&tl=en&q=${Uri.encodeComponent(input)}"); // [[["Hello","你好",null,null,10]],null,"zh-CN",null,null,null,1,[],[["zh-CN"],null,[1],["zh-CN"]]] final list = json.decode(out); if (list is List && list.isNotEmpty) { final data = list.first; if (data is List && data.isNotEmpty) { final text = data.first; if (text is List && text.isNotEmpty) { return text.first; } } } return null; } static Future isUseInternalDNS() async { final userBox = await Hive.openBox("app_conf"); final isUseInternalDNS = userBox.get("isUseInternalDNS", defaultValue: false); return isUseInternalDNS; } }