diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index df28cb50..4616987b 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -470,7 +470,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 406; + CURRENT_PROJECT_VERSION = 412; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -478,7 +478,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.406; + MARKETING_VERSION = 1.0.412; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -602,7 +602,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 406; + CURRENT_PROJECT_VERSION = 412; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -610,7 +610,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.406; + MARKETING_VERSION = 1.0.412; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -628,7 +628,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 406; + CURRENT_PROJECT_VERSION = 412; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -636,7 +636,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.406; + MARKETING_VERSION = 1.0.412; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -657,7 +657,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 406; + CURRENT_PROJECT_VERSION = 412; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -670,7 +670,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.406; + MARKETING_VERSION = 1.0.412; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; @@ -696,7 +696,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 406; + CURRENT_PROJECT_VERSION = 412; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -709,7 +709,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.406; + MARKETING_VERSION = 1.0.412; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -732,7 +732,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 406; + CURRENT_PROJECT_VERSION = 412; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -745,7 +745,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.406; + MARKETING_VERSION = 1.0.412; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/lib/data/model/server/disk.dart b/lib/data/model/server/disk.dart index 420fa38a..f2b3ce65 100644 --- a/lib/data/model/server/disk.dart +++ b/lib/data/model/server/disk.dart @@ -47,3 +47,26 @@ List parseDisk(String raw) { } return list; } + +/// Issue 88 +/// +/// Due to performance issues, +/// if there is no `Disk.loc == '/' || Disk.loc == '/sysroot'`, +/// return the first [Disk] of [disks]. +/// +/// If we find out the biggest [Disk] of [disks], +/// the fps may lower than 60. +Disk? findRootDisk(List disks) { + if (disks.isEmpty) return null; + final roots = disks.where((element) => element.loc == '/'); + if (roots.isEmpty) { + final sysRoots = disks.where((element) => element.loc == '/sysroot'); + if (sysRoots.isEmpty) { + return disks.first; + } else { + return sysRoots.first; + } + } else { + return roots.first; + } +} diff --git a/lib/data/provider/docker.dart b/lib/data/provider/docker.dart index 999060e1..ba099bc3 100644 --- a/lib/data/provider/docker.dart +++ b/lib/data/provider/docker.dart @@ -123,6 +123,7 @@ class DockerProvider extends BusyProvider { (element) => element.contains(item.containerId), orElse: () => '', ); + if (statsLine.isEmpty) continue; item.parseStats(statsLine); } } catch (e) { diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 364f68e4..ff437cae 100644 --- a/lib/data/res/build_data.dart +++ b/lib/data/res/build_data.dart @@ -2,8 +2,8 @@ class BuildData { static const String name = "ServerBox"; - static const int build = 406; + static const int build = 412; static const String engine = "3.10.6"; - static const String buildAt = "2023-08-02 23:34:08.619104"; - static const int modifications = 2; + static const String buildAt = "2023-08-04 22:48:00.585855"; + static const int modifications = 4; } diff --git a/lib/view/page/full_screen.dart b/lib/view/page/full_screen.dart index b17cec02..f21de76b 100644 --- a/lib/view/page/full_screen.dart +++ b/lib/view/page/full_screen.dart @@ -9,6 +9,7 @@ import 'package:get_it/get_it.dart'; import 'package:nil/nil.dart'; import 'package:provider/provider.dart'; import 'package:toolbox/core/route.dart'; +import 'package:toolbox/data/model/server/disk.dart'; import 'package:toolbox/data/provider/server.dart'; import 'package:toolbox/data/res/ui.dart'; import 'package:toolbox/data/store/setting.dart'; @@ -159,7 +160,7 @@ class _FullScreenPageState extends State with AfterLayoutMixin { ServerState cs, ServerPrivateInfo spi, ) { - final rootDisk = ss.disk.firstWhere((element) => element.loc == '/'); + final rootDisk = findRootDisk(ss.disk); return InkWell( onTap: () => AppRoute( @@ -185,8 +186,8 @@ class _FullScreenPageState extends State with AfterLayoutMixin { _buildPercentCircle(ss.mem.usedPercent * 100), _buildNet(ss), _buildIOData( - 'Total:\n${rootDisk.size}', - 'Used:\n${rootDisk.usedPercent}%', + 'Total:\n${rootDisk?.size}', + 'Used:\n${rootDisk?.usedPercent}%', ) ], ), diff --git a/lib/view/page/server/tab.dart b/lib/view/page/server/tab.dart index 65539e7d..c2927333 100644 --- a/lib/view/page/server/tab.dart +++ b/lib/view/page/server/tab.dart @@ -16,6 +16,7 @@ import 'package:toolbox/view/widget/tag/switcher.dart'; import '../../../core/route.dart'; import '../../../core/utils/ui.dart'; +import '../../../data/model/server/disk.dart'; import '../../../data/model/server/server.dart'; import '../../../data/model/server/server_private_info.dart'; import '../../../data/model/server/server_status.dart'; @@ -162,8 +163,7 @@ class _ServerPageState extends State ServerState cs, ServerPrivateInfo spi, ) { - final rootDisks = ss.disk.where((element) => element.loc == '/'); - final rootDisk = rootDisks.isNotEmpty ? rootDisks.first : ss.disk.first; + final rootDisk = findRootDisk(ss.disk); return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -177,7 +177,7 @@ class _ServerPageState extends State _buildPercentCircle(ss.mem.usedPercent * 100), _buildNet(ss), _buildIOData( - 'Total:\n${rootDisk.size}', 'Used:\n${rootDisk.usedPercent}%') + 'Total:\n${rootDisk?.size}', 'Used:\n${rootDisk?.usedPercent}%') ], ), height13, diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index de9b46c3..9b0ab3f8 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -475,9 +475,9 @@ baseConfigurationReference = C1C758C41C4E208965A68933 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 406; + CURRENT_PROJECT_VERSION = 412; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.406; + MARKETING_VERSION = 1.0.412; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -490,9 +490,9 @@ baseConfigurationReference = 15AF97DF993E8968098D6EBE /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 406; + CURRENT_PROJECT_VERSION = 412; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.406; + MARKETING_VERSION = 1.0.412; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -505,9 +505,9 @@ baseConfigurationReference = 7CFA7DE7FABA75685DFB6948 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 406; + CURRENT_PROJECT_VERSION = 412; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.406; + MARKETING_VERSION = 1.0.412; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0;