From bfd31e561ca626a17cb8c2aee6c179bf92526e2e Mon Sep 17 00:00:00 2001 From: Junyuan Feng Date: Mon, 7 Nov 2022 20:15:39 +0800 Subject: [PATCH] optimize `ping` page & `make.dart` --- ios/Runner.xcodeproj/project.pbxproj | 12 ++--- lib/data/res/build_data.dart | 4 +- lib/generated/intl/messages_en.dart | 2 + lib/generated/intl/messages_zh.dart | 1 + lib/generated/l10n.dart | 10 ++++ lib/l10n/intl_en.arb | 3 +- lib/l10n/intl_zh.arb | 3 +- lib/view/page/ping.dart | 69 ++++++++++++++++---------- macos/Runner.xcodeproj/project.pbxproj | 12 ++--- make.dart | 5 +- 10 files changed, 78 insertions(+), 43 deletions(-) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 4ee67617..02b77100 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -354,7 +354,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 158; + CURRENT_PROJECT_VERSION = 159; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; @@ -362,7 +362,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.158; + MARKETING_VERSION = 1.0.159; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -484,7 +484,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 158; + CURRENT_PROJECT_VERSION = 159; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; @@ -492,7 +492,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.158; + MARKETING_VERSION = 1.0.159; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -508,7 +508,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 158; + CURRENT_PROJECT_VERSION = 159; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; @@ -516,7 +516,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.158; + MARKETING_VERSION = 1.0.159; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 6fe7aae7..8c8da50d 100644 --- a/lib/data/res/build_data.dart +++ b/lib/data/res/build_data.dart @@ -2,9 +2,9 @@ class BuildData { static const String name = "ServerBox"; - static const int build = 158; + static const int build = 159; static const String engine = "Flutter 3.3.4 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision eb6d86ee27 (5 weeks ago) • 2022-10-04 22:31:45 -0700\nEngine • revision c08d7d5efc\nTools • Dart 2.18.2 • DevTools 2.15.0\n"; - static const String buildAt = "2022-11-07 19:16:17.058901"; + static const String buildAt = "2022-11-07 19:55:21.553007"; static const int modifications = 0; } diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index 765d39fb..6b65d286 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -122,6 +122,8 @@ class MessageLookup extends MessageLookupByLibrary { "import": MessageLookupByLibrary.simpleMessage("Import"), "importAndExport": MessageLookupByLibrary.simpleMessage("Import and Export"), + "inputDomainHere": + MessageLookupByLibrary.simpleMessage("Input Domain here"), "install": MessageLookupByLibrary.simpleMessage("install"), "installDockerWithUrl": MessageLookupByLibrary.simpleMessage( "Please https://docs.docker.com/engine/install docker first."), diff --git a/lib/generated/intl/messages_zh.dart b/lib/generated/intl/messages_zh.dart index 649c8193..a14b6bbe 100644 --- a/lib/generated/intl/messages_zh.dart +++ b/lib/generated/intl/messages_zh.dart @@ -111,6 +111,7 @@ class MessageLookup extends MessageLookupByLibrary { "httpFailedWithCode": m5, "import": MessageLookupByLibrary.simpleMessage("导入"), "importAndExport": MessageLookupByLibrary.simpleMessage("导入或导出"), + "inputDomainHere": MessageLookupByLibrary.simpleMessage("在这里输入域名"), "install": MessageLookupByLibrary.simpleMessage("安装"), "installDockerWithUrl": MessageLookupByLibrary.simpleMessage( "请先 https://docs.docker.com/engine/install docker"), diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index 58cd9f0d..226246ca 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -1340,6 +1340,16 @@ class S { args: [], ); } + + /// `Input Domain here` + String get inputDomainHere { + return Intl.message( + 'Input Domain here', + name: 'inputDomainHere', + desc: '', + args: [], + ); + } } class AppLocalizationDelegate extends LocalizationsDelegate { diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 8e49f72a..4b2b077a 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -127,5 +127,6 @@ "clickSee": "Click here", "feedback": "Feedback", "feedbackOnGithub": "If you have any questions, please feedback on Github.", - "update": "Update" + "update": "Update", + "inputDomainHere": "Input Domain here" } \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index a2e38bec..b16bde99 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -127,5 +127,6 @@ "clickSee": "点击查看", "feedback": "反馈", "feedbackOnGithub": "如果你有任何问题,请在GitHub反馈", - "update": "更新" + "update": "更新", + "inputDomainHere": "在这里输入域名" } \ No newline at end of file diff --git a/lib/view/page/ping.dart b/lib/view/page/ping.dart index 12dc5e2d..e04132bb 100644 --- a/lib/view/page/ping.dart +++ b/lib/view/page/ping.dart @@ -9,6 +9,12 @@ import 'package:toolbox/locator.dart'; import 'package:toolbox/view/widget/input_field.dart'; import 'package:toolbox/view/widget/round_rect_card.dart'; +final doaminReg = + RegExp(r'^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$'); +final ipv4Reg = + RegExp(r'^((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(\.(?!$)|$)){4}$'); +final ipv6Reg = RegExp(r'^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$'); + class PingPage extends StatefulWidget { const PingPage({Key? key}) : super(key: key); @@ -45,23 +51,25 @@ class _PingPageState extends State super.build(context); return Scaffold( body: SingleChildScrollView( - padding: const EdgeInsets.symmetric(horizontal: 7), - child: Column(children: [ - const SizedBox(height: 13), - buildInput(context, _textEditingController, - maxLines: 1, onSubmitted: (_) => doPing()), - SizedBox( - width: double.infinity, - height: _media.size.height * 0.6, - child: ListView.builder( - controller: ScrollController(), - itemCount: _results.length, - itemBuilder: (context, index) { - final result = _results[index]; - return _buildResultItem(result); - }), - ), - ])), + padding: const EdgeInsets.symmetric(horizontal: 7), + child: Column(children: [ + const SizedBox(height: 13), + buildInput(context, _textEditingController, + hint: s.inputDomainHere, + maxLines: 1, + onSubmitted: (_) => doPing()), + SizedBox( + width: double.infinity, + height: _media.size.height * 0.6, + child: ListView.builder( + controller: ScrollController(), + itemCount: _results.length, + itemBuilder: (context, index) { + final result = _results[index]; + return _buildResultItem(result); + }), + ), + ])), floatingActionButton: FloatingActionButton( child: const Icon(Icons.play_arrow), onPressed: () { @@ -118,14 +126,25 @@ class _PingPageState extends State return; } - await Future.wait(_serverProvider.servers.map((e) async { - if (e.client == null) { - return; - } - final result = await e.client!.run('ping -c 3 $target').string; - _results.add(PingResult.parse(e.info.name, result)); - setState(() {}); - })); + if (!doaminReg.hasMatch(target) && + !ipv4Reg.hasMatch(target) && + !ipv6Reg.hasMatch(target)) { + showSnackBar(context, Text(s.pingInputIP)); + return; + } + + try { + await Future.wait(_serverProvider.servers.map((e) async { + if (e.client == null) { + return; + } + final result = await e.client!.run('ping -c 3 $target').string; + _results.add(PingResult.parse(e.info.name, result)); + setState(() {}); + })); + } catch (e) { + showSnackBar(context, Text(e.toString())); + } } @override diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 76e38ccd..1451a18a 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -420,14 +420,14 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 158; + CURRENT_PROJECT_VERSION = 159; DEVELOPMENT_TEAM = BA88US33G6; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 1.0.158; + MARKETING_VERSION = 1.0.159; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -550,14 +550,14 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 158; + CURRENT_PROJECT_VERSION = 159; DEVELOPMENT_TEAM = BA88US33G6; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 1.0.158; + MARKETING_VERSION = 1.0.159; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -574,14 +574,14 @@ CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 158; + CURRENT_PROJECT_VERSION = 159; DEVELOPMENT_TEAM = BA88US33G6; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 1.0.158; + MARKETING_VERSION = 1.0.159; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; diff --git a/make.dart b/make.dart index 233c6d3c..c5cb5d18 100755 --- a/make.dart +++ b/make.dart @@ -104,8 +104,9 @@ Future flutterBuild( buildType, ]; // No sksl cache for macos - if ('macos' != buildType) { - args.add('--bundle-sksl-path=$buildType$skslFileSuffix'); + final skslPath = '$buildType$skslFileSuffix'; + if (await File(skslPath).exists()) { + args.add('--bundle-sksl-path=$skslPath'); } final isAndroid = 'apk' == buildType; // [--target-platform] only for Android