diff --git a/lib/common/conf/app_conf.dart b/lib/common/conf/app_conf.dart index 4e3a1a8..9216028 100644 --- a/lib/common/conf/app_conf.dart +++ b/lib/common/conf/app_conf.dart @@ -17,8 +17,8 @@ import 'package:window_manager/window_manager.dart'; import '../../base/ui.dart'; class AppConf { - static const String appVersion = "2.11.0 Beta"; - static const int appVersionCode = 35; + static const String appVersion = "2.10.2 Beta"; + static const int appVersionCode = 37; static const String appVersionDate = "2024-01-07"; static const gameChannels = ["LIVE", "PTU", "EPTU"]; diff --git a/lib/data/app_version_data.dart b/lib/data/app_version_data.dart index 3dcf76d..c52bdf7 100644 --- a/lib/data/app_version_data.dart +++ b/lib/data/app_version_data.dart @@ -9,14 +9,15 @@ class AppVersionData { AppVersionData({ - this.lastVersion, - this.lastVersionCode, - this.minVersionCode, - this.mSELastVersion, - this.mSELastVersionCode, - this.mSEMinVersionCode, - this.p4kDownloadUrl, - this.activityColors,}); + this.lastVersion, + this.lastVersionCode, + this.minVersionCode, + this.mSELastVersion, + this.mSELastVersionCode, + this.mSEMinVersionCode, + this.p4kDownloadUrl, + this.activityColors, + }); AppVersionData.fromJson(dynamic json) { lastVersion = json['lastVersion']; @@ -26,8 +27,12 @@ class AppVersionData { mSELastVersionCode = json['MSE_lastVersionCode']; mSEMinVersionCode = json['MSE_minVersionCode']; p4kDownloadUrl = json['p4kDownloadUrl']; - activityColors = json['activityColors'] != null ? ActivityColors.fromJson(json['activityColors']) : null; + activityColors = json['activityColors'] != null + ? ActivityColors.fromJson(json['activityColors']) + : null; + webMirrors = json["web_mirrors"]; } + String? lastVersion; num? lastVersionCode; num? minVersionCode; @@ -36,6 +41,7 @@ class AppVersionData { num? mSEMinVersionCode; String? p4kDownloadUrl; ActivityColors? activityColors; + Map? webMirrors; Map toJson() { final map = {}; @@ -49,9 +55,9 @@ class AppVersionData { if (activityColors != null) { map['activityColors'] = activityColors?.toJson(); } + map["web_mirrors"] = webMirrors; return map; } - } /// enable : true @@ -63,12 +69,13 @@ class AppVersionData { class ActivityColors { ActivityColors({ - this.enable, - this.startTime, - this.endTime, - this.background, - this.menu, - this.mica,}); + this.enable, + this.startTime, + this.endTime, + this.background, + this.menu, + this.mica, + }); ActivityColors.fromJson(dynamic json) { enable = json['enable']; @@ -78,6 +85,7 @@ class ActivityColors { menu = json['menu']; mica = json['mica']; } + bool? enable; int? startTime; int? endTime; @@ -95,5 +103,4 @@ class ActivityColors { map['mica'] = mica; return map; } - -} \ No newline at end of file +} diff --git a/lib/ui/home/home_ui.dart b/lib/ui/home/home_ui.dart index f46a1a9..5496035 100644 --- a/lib/ui/home/home_ui.dart +++ b/lib/ui/home/home_ui.dart @@ -223,7 +223,7 @@ class HomeUI extends BaseUI { ), name: "UEX 汉化", webTitle: "UEX 汉化", - webURL: "https://uexcorp.space", + webURL: "https://uexcorp.space/", info: "采矿、精炼、贸易计算器、价格、船信息", useLocalization: true, width: width, diff --git a/lib/ui/home/webview/webview.dart b/lib/ui/home/webview/webview.dart index 536394d..9aba312 100644 --- a/lib/ui/home/webview/webview.dart +++ b/lib/ui/home/webview/webview.dart @@ -39,6 +39,8 @@ class WebViewModel { bool enableCapture = false; + bool isEnableToolSiteMirrors = false; + Map? _curReplaceWords; Map? get curReplaceWords => _curReplaceWords; @@ -52,6 +54,9 @@ class WebViewModel { initWebView({String title = ""}) async { try { + final userBox = await Hive.openBox("app_conf"); + isEnableToolSiteMirrors = + userBox.get("isEnableToolSiteMirrors", defaultValue: false); webview = await WebviewWindow.create( configuration: CreateConfiguration( windowWidth: loginMode ? 960 : 1920, @@ -62,9 +67,8 @@ class WebViewModel { // webview.openDevToolsWindow(); webview.isNavigating.addListener(() async { if (!webview.isNavigating.value && localizationResource.isNotEmpty) { - final uri = Uri.parse(url); - dPrint("webview Navigating uri === $uri"); - if (uri.host.contains("robertsspaceindustries.com")) { + dPrint("webview Navigating url === $url"); + if (url.startsWith("https://robertsspaceindustries.com")) { // SC 官网 dPrint("load script"); await Future.delayed(const Duration(milliseconds: 100)); @@ -129,7 +133,8 @@ class WebViewModel { webview.evaluateJavaScript( "getRSILauncherToken(\"$loginChannel\");"); } - } else if (uri.host.contains("www.erkul.games")) { + } else if (url + .startsWith(await _handleMirrorsUrl("https://www.erkul.games"))) { dPrint("load script"); await Future.delayed(const Duration(milliseconds: 100)); await webview.evaluateJavaScript(localizationScript); @@ -137,7 +142,8 @@ class WebViewModel { final replaceWords = _getLocalizationResource("DPS"); await webview.evaluateJavaScript( "WebLocalizationUpdateReplaceWords(${json.encode(replaceWords)},$enableCapture)"); - } else if (uri.host.contains("uexcorp.space")) { + } else if (url + .startsWith(await _handleMirrorsUrl("https://uexcorp.space"))) { dPrint("load script"); await Future.delayed(const Duration(milliseconds: 100)); await webview.evaluateJavaScript(localizationScript); @@ -173,8 +179,20 @@ class WebViewModel { } } + Future _handleMirrorsUrl(String url) async { + var finalUrl = url; + if (isEnableToolSiteMirrors) { + for (var kv in AppConf.networkVersionData!.webMirrors!.entries) { + if (url.startsWith(kv.key)) { + finalUrl = url.replaceFirst(kv.key, kv.value); + } + } + } + return finalUrl; + } + launch(String url) async { - webview.launch(url); + webview.launch(await _handleMirrorsUrl(url)); } initLocalization(AppWebLocalizationVersionsData v) async { diff --git a/lib/ui/settings/settings_ui.dart b/lib/ui/settings/settings_ui.dart index f5fb15b..8ac59fd 100644 --- a/lib/ui/settings/settings_ui.dart +++ b/lib/ui/settings/settings_ui.dart @@ -51,13 +51,26 @@ class SettingUI extends BaseUI { subTitle: "缓存大小 ${(model.locationCacheSize / 1024 / 1024).toStringAsFixed(2)}MB,清理盒子下载的汉化文件缓存,不会影响已安装的汉化", onTap: model.cleanLocationCache), + const SizedBox(height: 12), + makeSettingsItem( + const Icon(FluentIcons.internet_sharing, size: 20), "工具站访问加速", + onTap: () => + model.onChangeToolSiteMirror(!model.isEnableToolSiteMirrors), + subTitle: + "使用镜像服务器加速访问 DPS UEX 等工具网站,若访问异常请关闭该功能。 为保护账户安全,任何情况下都不会加速RSI官网。", + onSwitch: model.onChangeToolSiteMirror, + switchStatus: model.isEnableToolSiteMirrors), ], ), ); } Widget makeSettingsItem(Widget icon, String title, - {String? subTitle, VoidCallback? onTap, VoidCallback? onDel}) { + {String? subTitle, + VoidCallback? onTap, + VoidCallback? onDel, + void Function(bool? b)? onSwitch, + bool switchStatus = false}) { return Button( onPressed: onTap, child: Padding( @@ -94,8 +107,11 @@ class SettingUI extends BaseUI { padding: EdgeInsets.all(6), child: Icon(FluentIcons.delete), )), - const SizedBox(width: 12), ], + if (onSwitch != null) ...[ + ToggleSwitch(checked: switchStatus, onChanged: onSwitch), + ], + const SizedBox(width: 12), const Icon(FluentIcons.chevron_right), ], ), diff --git a/lib/ui/settings/settings_ui_model.dart b/lib/ui/settings/settings_ui_model.dart index 46eda1c..2c62c8d 100644 --- a/lib/ui/settings/settings_ui_model.dart +++ b/lib/ui/settings/settings_ui_model.dart @@ -15,6 +15,7 @@ class SettingUIModel extends BaseUIModel { String autoLoginEmail = "-"; bool isEnableAutoLogin = false; bool isEnableAutoLoginPwd = false; + bool isEnableToolSiteMirrors = false; String inputGameLaunchECore = "0"; String? customLauncherPath; @@ -34,6 +35,7 @@ class SettingUIModel extends BaseUIModel { } _loadCustomPath(); _loadLocationCacheSize(); + _loadToolSiteMirrorState(); } Future onResetAutoLogin() async { @@ -174,4 +176,18 @@ class SettingUIModel extends BaseUIModel { await Process.run(SystemHelper.powershellPath, [script]); showToast(context!, "创建完毕,请返回桌面查看"); } + + _loadToolSiteMirrorState() async { + final userBox = await Hive.openBox("app_conf"); + isEnableToolSiteMirrors = + userBox.get("isEnableToolSiteMirrors", defaultValue: false); + notifyListeners(); + } + + void onChangeToolSiteMirror(bool? b) async { + final userBox = await Hive.openBox("app_conf"); + isEnableToolSiteMirrors = b == true; + await userBox.put("isEnableToolSiteMirrors", isEnableToolSiteMirrors); + notifyListeners(); + } }