diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 252f56ac..7444d91e 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -586,7 +586,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 645; + CURRENT_PROJECT_VERSION = 646; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -596,7 +596,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.645; + MARKETING_VERSION = 1.0.646; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -720,7 +720,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 645; + CURRENT_PROJECT_VERSION = 646; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -730,7 +730,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.645; + MARKETING_VERSION = 1.0.646; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -748,7 +748,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 645; + CURRENT_PROJECT_VERSION = 646; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -758,7 +758,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.645; + MARKETING_VERSION = 1.0.646; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -779,7 +779,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 645; + CURRENT_PROJECT_VERSION = 646; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -792,7 +792,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.645; + MARKETING_VERSION = 1.0.646; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; @@ -818,7 +818,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 645; + CURRENT_PROJECT_VERSION = 646; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -831,7 +831,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.645; + MARKETING_VERSION = 1.0.646; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -854,7 +854,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 645; + CURRENT_PROJECT_VERSION = 646; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -867,7 +867,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.645; + MARKETING_VERSION = 1.0.646; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -890,7 +890,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 645; + CURRENT_PROJECT_VERSION = 646; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -902,7 +902,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.645; + MARKETING_VERSION = 1.0.646; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; @@ -931,7 +931,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 645; + CURRENT_PROJECT_VERSION = 646; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -943,7 +943,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.645; + MARKETING_VERSION = 1.0.646; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_NAME = ServerBox; @@ -969,7 +969,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 645; + CURRENT_PROJECT_VERSION = 646; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -981,7 +981,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.645; + MARKETING_VERSION = 1.0.646; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_NAME = ServerBox; diff --git a/lib/data/model/app/shell_func.dart b/lib/data/model/app/shell_func.dart index ec23e04c..6c737fb2 100644 --- a/lib/data/model/app/shell_func.dart +++ b/lib/data/model/app/shell_func.dart @@ -239,7 +239,8 @@ enum DockerCmdType { } } - static final execAll = values.map((e) => e.exec).join(' && echo $seperator && '); + static final execAll = + values.map((e) => e.exec).join(' && echo $seperator && '); } enum BSDStatusCmdType { diff --git a/lib/data/provider/docker.dart b/lib/data/provider/docker.dart index 2e623954..f086d3a7 100644 --- a/lib/data/provider/docker.dart +++ b/lib/data/provider/docker.dart @@ -137,7 +137,12 @@ class DockerProvider extends ChangeNotifier { Future start(String id) async => await run('docker start $id'); - Future delete(String id) async => await run('docker rm $id'); + Future delete(String id, bool force) async { + if (force) { + return await run('docker rm -f $id'); + } + return await run('docker rm $id'); + } Future restart(String id) async => await run('docker restart $id'); diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 2e4dd566..e187ceb0 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 = 645; + static const int build = 646; static const String engine = "3.16.0"; - static const String buildAt = "2023-11-20 16:47:25"; - static const int modifications = 5; - static const int script = 27; + static const String buildAt = "2023-11-23 00:07:00"; + static const int modifications = 7; + static const int script = 28; } diff --git a/lib/view/page/docker.dart b/lib/view/page/docker.dart index 3023045b..109d2018 100644 --- a/lib/view/page/docker.dart +++ b/lib/view/page/docker.dart @@ -358,18 +358,38 @@ class _DockerManagePageState extends State { onSelected: (item) async { switch (item) { case DockerMenuType.rm: + var force = false; context.showRoundDialog( title: Text(l10n.attention), - child: Text(l10n.askContinue( - '${l10n.delete} Container(${dItem.name})', - )), + child: Column( + children: [ + Text(l10n.askContinue( + '${l10n.delete} Container(${dItem.name})', + )), + StatefulBuilder(builder: (_, setState) { + return Checkbox( + value: force, + onChanged: (val) => setState(() => force = val ?? false), + ); + }), + ], + ), actions: [ TextButton( onPressed: () async { context.pop(); context.showLoadingDialog(); - await Pros.docker.delete(dItem.containerId); + final result = await Pros.docker.delete( + dItem.containerId, + force, + ); context.pop(); + if (result != null) { + context.showRoundDialog( + title: Text(l10n.error), + child: Text(result.message ?? l10n.unknownError), + ); + } }, child: Text(l10n.ok), ) @@ -378,18 +398,36 @@ class _DockerManagePageState extends State { break; case DockerMenuType.start: context.showLoadingDialog(); - await Pros.docker.start(dItem.containerId); + final result = await Pros.docker.start(dItem.containerId); context.pop(); + if (result != null) { + context.showRoundDialog( + title: Text(l10n.error), + child: Text(result.message ?? l10n.unknownError), + ); + } break; case DockerMenuType.stop: context.showLoadingDialog(); - await Pros.docker.stop(dItem.containerId); + final result = await Pros.docker.stop(dItem.containerId); context.pop(); + if (result != null) { + context.showRoundDialog( + title: Text(l10n.error), + child: Text(result.message ?? l10n.unknownError), + ); + } break; case DockerMenuType.restart: context.showLoadingDialog(); - await Pros.docker.restart(dItem.containerId); + final result = await Pros.docker.restart(dItem.containerId); context.pop(); + if (result != null) { + context.showRoundDialog( + title: Text(l10n.error), + child: Text(result.message ?? l10n.unknownError), + ); + } break; case DockerMenuType.logs: AppRoute.ssh( diff --git a/lib/view/page/ssh/tab.dart b/lib/view/page/ssh/tab.dart index d93e98a2..b289b787 100644 --- a/lib/view/page/ssh/tab.dart +++ b/lib/view/page/ssh/tab.dart @@ -34,6 +34,7 @@ class _SSHTabPageState extends State controller: _tabController, tabs: _tabIds.keys.map(_buildTabItem).toList(), isScrollable: true, + dividerColor: Colors.transparent, ), body: _buildBody(), );