From f093853d21f0904d8b89b5040761f6a07af7f84b Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Mon, 20 Nov 2023 00:28:17 -0600 Subject: [PATCH] fix: `docker` (#162 #167) --- ios/Runner.xcodeproj/project.pbxproj | 36 +++++++++---------- lib/data/model/app/shell_func.dart | 52 ++++++++++++++++------------ lib/data/provider/docker.dart | 15 ++++---- lib/data/res/build_data.dart | 6 ++-- lib/view/page/docker.dart | 4 +-- lib/view/page/server/edit.dart | 21 +++++------ 6 files changed, 73 insertions(+), 61 deletions(-) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 1855f6d9..c3081c1b 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 = 643; + CURRENT_PROJECT_VERSION = 644; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -596,7 +596,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.643; + MARKETING_VERSION = 1.0.644; 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 = 643; + CURRENT_PROJECT_VERSION = 644; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -730,7 +730,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.643; + MARKETING_VERSION = 1.0.644; 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 = 643; + CURRENT_PROJECT_VERSION = 644; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -758,7 +758,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.643; + MARKETING_VERSION = 1.0.644; 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 = 643; + CURRENT_PROJECT_VERSION = 644; 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.643; + MARKETING_VERSION = 1.0.644; 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 = 643; + CURRENT_PROJECT_VERSION = 644; 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.643; + MARKETING_VERSION = 1.0.644; 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 = 643; + CURRENT_PROJECT_VERSION = 644; 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.643; + MARKETING_VERSION = 1.0.644; 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 = 643; + CURRENT_PROJECT_VERSION = 644; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -902,7 +902,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.643; + MARKETING_VERSION = 1.0.644; 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 = 643; + CURRENT_PROJECT_VERSION = 644; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -943,7 +943,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.643; + MARKETING_VERSION = 1.0.644; 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 = 643; + CURRENT_PROJECT_VERSION = 644; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -981,7 +981,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.643; + MARKETING_VERSION = 1.0.644; 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 3d9d975f..3db42baa 100644 --- a/lib/data/model/app/shell_func.dart +++ b/lib/data/model/app/shell_func.dart @@ -9,7 +9,7 @@ const _homeVar = '\$HOME'; enum ShellFunc { status, - docker, + //docker, process, shutdown, reboot, @@ -45,8 +45,8 @@ chmod +x $_installShellPath switch (this) { case ShellFunc.status: return 's'; - case ShellFunc.docker: - return 'd'; + // case ShellFunc.docker: + // return 'd'; case ShellFunc.process: return 'p'; case ShellFunc.shutdown: @@ -64,10 +64,10 @@ chmod +x $_installShellPath switch (this) { case ShellFunc.status: return 'status'; - case ShellFunc.docker: - // `dockeR` -> avoid conflict with `docker` command - // 以防止循环递归 - return 'dockeR'; + // case ShellFunc.docker: + // // `dockeR` -> avoid conflict with `docker` command + // // 以防止循环递归 + // return 'dockeR'; case ShellFunc.process: return 'process'; case ShellFunc.shutdown: @@ -88,14 +88,14 @@ if [ "\$macSign" = "" ] && [ "\$bsdSign" = "" ]; then else \t${_bsdStatusCmd.join(_cmdDivider)} fi'''; - case ShellFunc.docker: - return ''' -result=\$(docker version 2>&1 | grep "permission denied") -if [ "\$result" != "" ]; then -\t${_dockerCmds.join(_cmdDivider)} -else -\t${_dockerCmds.map((e) => "sudo -S $e").join(_cmdDivider)} -fi'''; +// case ShellFunc.docker: +// return ''' +// result=\$(docker version 2>&1 | grep "permission denied") +// if [ "\$result" != "" ]; then +// \t${_dockerCmds.join(_cmdDivider)} +// else +// \t${_dockerCmds.map((e) => "sudo -S $e").join(_cmdDivider)} +// fi'''; case ShellFunc.process: return ''' if [ "\$macSign" = "" ] && [ "\$bsdSign" = "" ]; then @@ -225,14 +225,22 @@ enum DockerCmdType { //stats, images, ; -} -const _dockerCmds = [ - 'docker version', - 'docker ps -a', - //'docker stats --no-stream', - 'docker image ls', -]; + String get exec { + switch (this) { + case DockerCmdType.version: + return 'docker version'; + case DockerCmdType.ps: + return 'docker ps -a'; + // case DockerCmdType.stats: + // return 'docker stats --no-stream'; + case DockerCmdType.images: + return 'docker image ls'; + } + } + + static final execAll = values.map((e) => e.exec).join(_cmdDivider); +} enum BSDStatusCmdType { echo, diff --git a/lib/data/provider/docker.dart b/lib/data/provider/docker.dart index 312fcf33..bd0aed26 100644 --- a/lib/data/provider/docker.dart +++ b/lib/data/provider/docker.dart @@ -48,8 +48,8 @@ class DockerProvider extends ChangeNotifier { Future refresh() async { var raw = ''; - await client!.execWithPwd( - ShellFunc.docker.exec, + await client?.execWithPwd( + _wrap(DockerCmdType.execAll), context: context, onStdout: (data, _) => raw = '$raw$data', ); @@ -171,13 +171,16 @@ class DockerProvider extends ChangeNotifier { return null; } - // judge whether to use DOCKER_HOST + // wrap cmd with `docker host & sudo` String _wrap(String cmd) { final dockerHost = Stores.docker.fetch(hostId!); - cmd = 'export LANG=en_US.UTF-8 && $cmd'; if (dockerHost == null || dockerHost.isEmpty) { - return cmd; + if (userName != 'root') { + return 'sudo $cmd'; + } + } else { + cmd = 'export DOCKER_HOST=$dockerHost && $cmd'; } - return 'export DOCKER_HOST=$dockerHost && $cmd'; + return 'export LANG=en_US.UTF-8 && $cmd'; } } diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 93b407e7..6d782f92 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 = 643; + static const int build = 644; static const String engine = "3.16.0"; - static const String buildAt = "2023-11-19 14:47:41"; - static const int modifications = 1; + static const String buildAt = "2023-11-20 11:49:47"; + static const int modifications = 4; static const int script = 26; } diff --git a/lib/view/page/docker.dart b/lib/view/page/docker.dart index 8bcb8a72..5948636f 100644 --- a/lib/view/page/docker.dart +++ b/lib/view/page/docker.dart @@ -355,7 +355,7 @@ class _DockerManagePageState extends State { Widget _buildMoreBtn(DockerPsItem dItem) { return PopupMenu( items: DockerMenuType.items(dItem.running).map((e) => e.widget).toList(), - onSelected: (DockerMenuType item) async { + onSelected: (item) async { switch (item) { case DockerMenuType.rm: context.showRoundDialog( @@ -464,7 +464,7 @@ class _DockerManagePageState extends State { await context.showRoundDialog( title: Text(l10n.dockerEditHost), child: Input( - maxLines: 1, + maxLines: 2, controller: ctrl, onSubmitted: _onSaveDockerHost, ), diff --git a/lib/view/page/server/edit.dart b/lib/view/page/server/edit.dart index afa6acec..54dce858 100644 --- a/lib/view/page/server/edit.dart +++ b/lib/view/page/server/edit.dart @@ -126,17 +126,18 @@ class _ServerEditPageState extends State { '${l10n.delete} ${l10n.server}(${widget.spi!.name})', )), UIs.height13, - if (widget.spi?.server?.canViewDetails ?? false) Row( - children: [ - Checkbox( - value: delScripts, - onChanged: (_) => setState( - () => delScripts = !delScripts, + if (widget.spi?.server?.canViewDetails ?? false) + Row( + children: [ + Checkbox( + value: delScripts, + onChanged: (_) => setState( + () => delScripts = !delScripts, + ), ), - ), - Text(l10n.deleteScripts), - ], - ) + Text(l10n.deleteScripts), + ], + ) ], ); }),