diff --git a/.gitignore b/.gitignore index d270852d..04c35875 100644 --- a/.gitignore +++ b/.gitignore @@ -57,7 +57,7 @@ test.dart # Linux release linux.AppDir -ServerBox-x86_64.AppImage +**/*.AppImage untranlated.json diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index bf3fa19f..2e54e59e 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -690,7 +690,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -700,7 +700,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -826,7 +826,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -836,7 +836,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -854,7 +854,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -864,7 +864,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -885,7 +885,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -898,7 +898,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; @@ -924,7 +924,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -937,7 +937,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -960,7 +960,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -973,7 +973,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -996,7 +996,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -1008,7 +1008,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; @@ -1037,7 +1037,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -1049,7 +1049,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_NAME = ServerBox; @@ -1075,7 +1075,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -1087,7 +1087,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_NAME = ServerBox; diff --git a/lib/data/model/container/ps.dart b/lib/data/model/container/ps.dart index 30d639dd..3cc620f6 100644 --- a/lib/data/model/container/ps.dart +++ b/lib/data/model/container/ps.dart @@ -143,7 +143,6 @@ final class DockerPs implements ContainerPs { @override bool get running { if (state?.contains('Exited') == true) return false; - if (state?.contains('Up') == true) return true; return true; } @@ -162,9 +161,9 @@ final class DockerPs implements ContainerPs { final parts = raw.split(Miscs.multiBlankreg); return DockerPs( id: parts[0], - names: parts[1], - image: parts[2], - state: parts[3].trim(), + state: parts[1], + names: parts[2], + image: parts[3].trim(), ); } } diff --git a/lib/data/provider/container.dart b/lib/data/provider/container.dart index 2371906c..4541a485 100644 --- a/lib/data/provider/container.dart +++ b/lib/data/provider/container.dart @@ -276,9 +276,13 @@ enum ContainerCmdType { return switch (this) { ContainerCmdType.version => '$prefix version $_jsonFmt', ContainerCmdType.ps => switch (type) { + /// TODO: Rollback to json format when permformance recovers. /// Use [_jsonFmt] in Docker will cause the operation to slow down. ContainerType.docker => '$prefix ps -a --format "table {{printf \\"' - '%-15.15s ${"%-30.30s " * 3}\\" .ID .Names .Image .Status}}"', + '%-15.15s ' + '%-30.30s ' + '${"%-50.50s " * 2}\\"' + ' .ID .Status .Names .Image}}"', ContainerType.podman => '$prefix ps -a $_jsonFmt', }, ContainerCmdType.stats => diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 364932ed..adfe5a89 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 = 941; + static const int build = 943; static const String engine = "3.22.1"; - static const String buildAt = "2024-06-07 23:57:38"; - static const int modifications = 4; + static const String buildAt = "2024-06-08 19:28:01"; + static const int modifications = 7; static const int script = 48; } diff --git a/lib/data/res/rebuild.dart b/lib/data/res/rebuild.dart index e37453a0..71c4019f 100644 --- a/lib/data/res/rebuild.dart +++ b/lib/data/res/rebuild.dart @@ -3,4 +3,4 @@ import 'package:fl_lib/fl_lib.dart'; abstract final class RNodes { static final app = RNode(); static final dark = false.vn; -} \ No newline at end of file +} diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index bbc20434..fb05ea71 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -471,7 +471,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_TEAM = BA88US33G6; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "Server Box"; @@ -481,7 +481,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.15; - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "Server Box"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -608,7 +608,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_TEAM = BA88US33G6; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "Server Box"; @@ -618,7 +618,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.15; - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "Server Box"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -638,7 +638,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 941; + CURRENT_PROJECT_VERSION = 943; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=macosx*]" = BA88US33G6; INFOPLIST_FILE = Runner/Info.plist; @@ -649,7 +649,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.15; - MARKETING_VERSION = 1.0.941; + MARKETING_VERSION = 1.0.943; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "Server Box"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/test/container_test.dart b/test/container_test.dart new file mode 100644 index 00000000..16a355af --- /dev/null +++ b/test/container_test.dart @@ -0,0 +1,32 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:toolbox/data/model/container/ps.dart'; + +void main() { + test('docker ps parse', () { + const raw = ''' +CONTAINER ID STATUS NAMES IMAGE +0e9e2ef860d2 Up 2 hours hbbs rustdesk/rustdesk-server:latest +9a4df3ed340c Up 41 minutes hbbr rustdesk/rustdesk-server:latest +fa1215b4be74 Up 12 hours firefly uusec/firefly:latest +'''; + final lines = raw.split('\n'); + const ids = ['0e9e2ef860d2', '9a4df3ed340c', 'fa1215b4be74']; + const names = ['hbbs', 'hbbr', 'firefly']; + const images = [ + 'rustdesk/rustdesk-server:latest', + 'rustdesk/rustdesk-server:latest', + 'uusec/firefly:latest' + ]; + const states = ['Up 2 hours', 'Up 41 minutes', 'Up 12 hours']; + for (var idx = 1; idx < lines.length; idx++) { + final raw = lines[idx]; + if (raw.isEmpty) continue; + final ps = DockerPs.parse(raw); + expect(ps.id, ids[idx - 1]); + expect(ps.names, names[idx - 1]); + expect(ps.image, images[idx - 1]); + expect(ps.state, states[idx - 1]); + expect(ps.running, true); + } + }); +}