feat: Proxy Source

This commit is contained in:
xkeyC 2024-09-04 19:02:31 +08:00
parent 74fe0457f0
commit 308480095b
12 changed files with 152 additions and 77 deletions

View File

@ -1,25 +1,25 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:starcitizen_doctor/common/conf/url_conf.dart'; import 'package:starcitizen_doctor/common/conf/url_conf.dart';
import 'package:starcitizen_doctor/common/io/rs_http.dart'; import 'package:starcitizen_doctor/common/io/rs_http.dart';
import 'package:starcitizen_doctor/common/utils/log.dart'; import 'package:starcitizen_doctor/common/utils/log.dart';
class AnalyticsApi { class AnalyticsApi {
static touch(String key) async { static touch(String key) async {
if (kDebugMode || kProfileMode) { return;
dPrint("AnalyticsApi.touch === $key skip"); // if (kDebugMode || kProfileMode) {
return; // dPrint("AnalyticsApi.touch === $key skip");
} // return;
dPrint("AnalyticsApi.touch === $key start"); // }
try { // dPrint("AnalyticsApi.touch === $key start");
final r = await RSHttp.postData( // try {
"${URLConf.analyticsApiHome}/analytics/$key", // final r = await RSHttp.postData(
data: null); // "${URLConf.analyticsApiHome}/analytics/$key",
dPrint("AnalyticsApi.touch === $key over statusCode == ${r.statusCode}"); // data: null);
} catch (e) { // dPrint("AnalyticsApi.touch === $key over statusCode == ${r.statusCode}");
dPrint("AnalyticsApi.touch === $key Error:$e"); // } catch (e) {
} // dPrint("AnalyticsApi.touch === $key Error:$e");
// }
} }
static Future<Map<String, dynamic>> getAnalyticsData() async { static Future<Map<String, dynamic>> getAnalyticsData() async {

View File

@ -4,9 +4,10 @@ import 'package:starcitizen_doctor/common/utils/log.dart';
class URLConf { class URLConf {
/// HOME API /// HOME API
static String gitApiHome = "https://git.scbox.xkeyc.cn"; static String gitApiHome = "https://web-proxy.scbox.xkeyc.cn/git";
static String rssApiHome = "https://rss.scbox.xkeyc.cn"; static String rssApiHome = "https://web-proxy.scbox.xkeyc.cn/rss";
static const String analyticsApiHome = "https://scbox.org"; static const String analyticsApiHome =
"https://web-proxy.scbox.xkeyc.cn/analytics/analytics";
static bool isUrlCheckPass = false; static bool isUrlCheckPass = false;
@ -69,5 +70,4 @@ class URLConf {
} }
} }
} }
} }

View File

@ -673,8 +673,8 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Launching game for you ..."), MessageLookupByLibrary.simpleMessage("Launching game for you ..."),
"home_login_title_welcome_back": "home_login_title_welcome_back":
MessageLookupByLibrary.simpleMessage("Welcome back!"), MessageLookupByLibrary.simpleMessage("Welcome back!"),
"home_not_installed_or_failed": MessageLookupByLibrary.simpleMessage( "home_not_installed_or_failed":
"Unpacking or installation failed"), MessageLookupByLibrary.simpleMessage("Your computer"),
"home_title_app_name": "home_title_app_name":
MessageLookupByLibrary.simpleMessage("SCToolBox"), MessageLookupByLibrary.simpleMessage("SCToolBox"),
"home_title_logging_in": "home_title_logging_in":

View File

@ -607,7 +607,7 @@ class MessageLookup extends MessageLookupByLibrary {
"home_login_title_welcome_back": "home_login_title_welcome_back":
MessageLookupByLibrary.simpleMessage("欢迎回来!"), MessageLookupByLibrary.simpleMessage("欢迎回来!"),
"home_not_installed_or_failed": "home_not_installed_or_failed":
MessageLookupByLibrary.simpleMessage("未安装 或 安装失败"), MessageLookupByLibrary.simpleMessage("您的电脑"),
"home_title_app_name": MessageLookupByLibrary.simpleMessage("SC汉化盒子"), "home_title_app_name": MessageLookupByLibrary.simpleMessage("SC汉化盒子"),
"home_title_logging_in": MessageLookupByLibrary.simpleMessage("登录中..."), "home_title_logging_in": MessageLookupByLibrary.simpleMessage("登录中..."),
"lobby_invitation_to_participate": "lobby_invitation_to_participate":

View File

@ -608,7 +608,7 @@ class MessageLookup extends MessageLookupByLibrary {
"home_login_title_welcome_back": "home_login_title_welcome_back":
MessageLookupByLibrary.simpleMessage("歡迎回來!"), MessageLookupByLibrary.simpleMessage("歡迎回來!"),
"home_not_installed_or_failed": "home_not_installed_or_failed":
MessageLookupByLibrary.simpleMessage("未安裝 或 安裝失敗"), MessageLookupByLibrary.simpleMessage("您的電腦"),
"home_title_app_name": MessageLookupByLibrary.simpleMessage("SC工具箱"), "home_title_app_name": MessageLookupByLibrary.simpleMessage("SC工具箱"),
"home_title_logging_in": "home_title_logging_in":
MessageLookupByLibrary.simpleMessage("正在登入..."), MessageLookupByLibrary.simpleMessage("正在登入..."),

View File

@ -1230,10 +1230,10 @@ class S {
); );
} }
/// `Unpacking or installation failed` /// `Your computer`
String get home_not_installed_or_failed { String get home_not_installed_or_failed {
return Intl.message( return Intl.message(
'Unpacking or installation failed', 'Your computer',
name: 'home_not_installed_or_failed', name: 'home_not_installed_or_failed',
desc: '', desc: '',
args: [], args: [],

View File

@ -237,7 +237,7 @@
"@doctor_action_view_details": {}, "@doctor_action_view_details": {},
"home_install_location": "Installation location:", "home_install_location": "Installation location:",
"@home_install_location": {}, "@home_install_location": {},
"home_not_installed_or_failed": "Unpacking or installation failed", "home_not_installed_or_failed": "Your computer",
"@home_not_installed_or_failed": {}, "@home_not_installed_or_failed": {},
"home_action_star_citizen_website_localization": "SC Official Localization", "home_action_star_citizen_website_localization": "SC Official Localization",
"@home_action_star_citizen_website_localization": {}, "@home_action_star_citizen_website_localization": {},

View File

@ -236,7 +236,7 @@
"@doctor_action_view_details": {}, "@doctor_action_view_details": {},
"home_install_location": "安装位置:", "home_install_location": "安装位置:",
"@home_install_location": {}, "@home_install_location": {},
"home_not_installed_or_failed": "未安装 或 安装失败", "home_not_installed_or_failed": "您的电脑",
"@home_not_installed_or_failed": {}, "@home_not_installed_or_failed": {},
"home_action_star_citizen_website_localization": "星际公民官网汉化", "home_action_star_citizen_website_localization": "星际公民官网汉化",
"@home_action_star_citizen_website_localization": {}, "@home_action_star_citizen_website_localization": {},

View File

@ -236,7 +236,7 @@
"@doctor_action_view_details": {}, "@doctor_action_view_details": {},
"home_install_location": "安裝位置:", "home_install_location": "安裝位置:",
"@home_install_location": {}, "@home_install_location": {},
"home_not_installed_or_failed": "未安裝 或 安裝失敗", "home_not_installed_or_failed": "您的電腦",
"@home_not_installed_or_failed": {}, "@home_not_installed_or_failed": {},
"home_action_star_citizen_website_localization": "星際公民官網", "home_action_star_citizen_website_localization": "星際公民官網",
"@home_action_star_citizen_website_localization": {}, "@home_action_star_citizen_website_localization": {},

View File

@ -115,6 +115,75 @@ class HomeUI extends HookConsumerWidget {
), ),
], ],
), ),
const SizedBox(height: 24),
Padding(
padding: const EdgeInsets.only(left: 24, right: 24),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(S.current.home_install_location),
const SizedBox(width: 6),
Expanded(
child: ComboBox<String>(
value: homeState.scInstalledPath,
isExpanded: true,
items: [
ComboBoxItem(
value: "not_install",
child: Text(S.current.home_not_installed_or_failed),
),
for (final path in homeState.scInstallPaths)
ComboBoxItem(
value: path,
child: Row(
children: [Text(path)],
),
)
],
onChanged: model.onChangeInstallPath,
),
),
const SizedBox(width: 12),
Button(
onPressed: homeState.webLocalizationVersionsData == null
? null
: () => model.launchRSI(context),
style: homeState.isCurGameRunning
? null
: ButtonStyle(
backgroundColor:
WidgetStateProperty.resolveWith(_getRunButtonColor),
),
child: Padding(
padding: const EdgeInsets.all(6),
child: Icon(
homeState.isCurGameRunning
? FluentIcons.stop_solid
: FluentIcons.play_solid,
color: homeState.isCurGameRunning
? Colors.red.withOpacity(.8)
: Colors.white,
),
)),
const SizedBox(width: 12),
Button(
onPressed: () {},
child: const Padding(
padding: EdgeInsets.all(6),
child: Icon(FluentIcons.folder_open),
),
),
const SizedBox(width: 12),
Button(
onPressed: model.reScanPath,
child: const Padding(
padding: EdgeInsets.all(6),
child: Icon(FluentIcons.refresh),
),
),
],
),
),
const SizedBox(height: 8), const SizedBox(height: 8),
Text(homeState.lastScreenInfo, maxLines: 1), Text(homeState.lastScreenInfo, maxLines: 1),
makeIndexActionLists(context, model, homeState, ref), makeIndexActionLists(context, model, homeState, ref),

View File

@ -76,7 +76,12 @@ class HomeUIModel extends _$HomeUIModel {
for (var node in h.body!.nodes) { for (var node in h.body!.nodes) {
if (node is html_dom.Element) { if (node is html_dom.Element) {
if (node.localName == "img") { if (node.localName == "img") {
return node.attributes["src"]?.trim() ?? ""; var image = node.attributes["src"]?.trim() ?? "";
var updatedImage = image.replaceAllMapped(
RegExp(r'http(s)?://i(\d+)\.hdslb\.com/bfs/'),
(match) => 'https://web-proxy.scbox.xkeyc.cn/bfs${match[2]}/bfs/'
);
return updatedImage;
} }
} }
} }

View File

@ -22,61 +22,62 @@ class IndexUI extends HookConsumerWidget {
final globalState = ref.watch(appGlobalModelProvider); final globalState = ref.watch(appGlobalModelProvider);
final curIndex = useState(0); final curIndex = useState(0);
return Container( return Stack(
decoration: BoxDecoration( children: [
image: DecorationImage( ExtendedImage.asset(
image: width: double.infinity,
ExtendedAssetImageProvider(globalState.backgroundImageAssetsPath), height: double.infinity,
globalState.backgroundImageAssetsPath,
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
), Center(
child: Center( child: ClipRRect(
child: ClipRRect( borderRadius: BorderRadius.circular(12),
borderRadius: BorderRadius.circular(12), child: BlurOvalWidget(
child: BlurOvalWidget( child: Container(
child: Container( constraints:
constraints: const BoxConstraints(maxWidth: 1440, maxHeight: 920),
const BoxConstraints(maxWidth: 1440, maxHeight: 1000), child: NavigationView(
child: NavigationView( appBar: NavigationAppBar(
appBar: NavigationAppBar( automaticallyImplyLeading: false,
automaticallyImplyLeading: false, title: () {
title: () { return Align(
return Align( alignment: AlignmentDirectional.centerStart,
alignment: AlignmentDirectional.centerStart, child: Row(
child: Row( children: [
children: [ Image.asset(
Image.asset( "assets/app_logo_mini.png",
"assets/app_logo_mini.png", width: 20,
width: 20, height: 20,
height: 20, fit: BoxFit.cover,
fit: BoxFit.cover, ),
), const SizedBox(width: 12),
const SizedBox(width: 12), Text(S.current.app_index_version_info(
Text(S.current.app_index_version_info( ConstConf.appVersion,
ConstConf.appVersion, ConstConf.isMSE ? "" : " Dev")),
ConstConf.isMSE ? "" : " Dev")), ],
], ),
), );
); }(),
}(), ),
pane: NavigationPane(
key: Key("NavigationPane_${S.current.app_language_code}"),
selected: curIndex.value,
items: getNavigationPaneItems(curIndex),
size: NavigationPaneSize(
openWidth: S.current.app_language_code.startsWith("zh")
? 64
: 74),
),
paneBodyBuilder: (item, child) {
return item!.body;
},
), ),
pane: NavigationPane(
key: Key("NavigationPane_${S.current.app_language_code}"),
selected: curIndex.value,
items: getNavigationPaneItems(curIndex),
size: NavigationPaneSize(
openWidth: S.current.app_language_code.startsWith("zh")
? 64
: 74),
),
paneBodyBuilder: (item, child) {
return item!.body;
},
), ),
), ),
), ),
), )
), ],
); );
} }