From 48bc6da7b5111ea7659c57fb18af6ff4a9ba3dff Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Mon, 18 Dec 2023 17:43:38 +0800 Subject: [PATCH] new: battery (#235) --- .dart_tool/flutter_gen/gen_l10n/l10n.dart | 12 +++++++ .dart_tool/flutter_gen/gen_l10n/l10n_de.dart | 6 ++++ .dart_tool/flutter_gen/gen_l10n/l10n_en.dart | 6 ++++ .dart_tool/flutter_gen/gen_l10n/l10n_id.dart | 6 ++++ .dart_tool/flutter_gen/gen_l10n/l10n_zh.dart | 12 +++++++ ios/Runner.xcodeproj/project.pbxproj | 36 +++++++++---------- lib/core/extension/status_cmd_type.dart | 12 +++++++ lib/data/model/app/shell_func.dart | 4 ++- lib/data/model/server/server.dart | 6 ++-- .../server/server_status_update_req.dart | 32 +++++++++++++---- lib/data/res/build_data.dart | 6 ++-- lib/data/res/status.dart | 2 -- lib/l10n/app_de.arb | 1 + lib/l10n/app_en.arb | 2 ++ lib/l10n/app_id.arb | 1 + lib/l10n/app_zh.arb | 2 ++ lib/l10n/app_zh_tw.arb | 2 ++ lib/view/page/full_screen.dart | 3 +- lib/view/page/server/detail.dart | 35 +++++++++--------- lib/view/page/server/tab.dart | 2 +- lib/view/widget/server_func_btns.dart | 7 +++- 21 files changed, 141 insertions(+), 54 deletions(-) create mode 100644 lib/core/extension/status_cmd_type.dart diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n.dart b/.dart_tool/flutter_gen/gen_l10n/l10n.dart index adfd04e4..0b078269 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n.dart @@ -230,6 +230,12 @@ abstract class S { /// **'Backup version is not match.'** String get backupVersionNotMatch; + /// No description provided for @battery. + /// + /// In en, this message translates to: + /// **'Battery'** + String get battery; + /// No description provided for @bgRun. /// /// In en, this message translates to: @@ -1514,6 +1520,12 @@ abstract class S { /// **'Upside Down'** String get upsideDown; + /// No description provided for @uptime. + /// + /// In en, this message translates to: + /// **'Uptime'** + String get uptime; + /// No description provided for @urlOrJson. /// /// In en, this message translates to: diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart index da93796d..0cb6b7ee 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart @@ -72,6 +72,9 @@ class SDe extends S { @override String get backupVersionNotMatch => 'Die Backup-Version stimmt nicht überein.'; + @override + String get battery => 'Batterie'; + @override String get bgRun => 'Hintergrundaktualisierung'; @@ -746,6 +749,9 @@ class SDe extends S { @override String get upsideDown => 'Upside Down'; + @override + String get uptime => 'Uptime'; + @override String get urlOrJson => 'URL oder JSON'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart index 357c2821..f0af7af9 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart @@ -72,6 +72,9 @@ class SEn extends S { @override String get backupVersionNotMatch => 'Backup version is not match.'; + @override + String get battery => 'Battery'; + @override String get bgRun => 'Run in backgroud'; @@ -746,6 +749,9 @@ class SEn extends S { @override String get upsideDown => 'Upside Down'; + @override + String get uptime => 'Uptime'; + @override String get urlOrJson => 'URL or JSON'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart index 33cbace9..fe294940 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart @@ -72,6 +72,9 @@ class SId extends S { @override String get backupVersionNotMatch => 'Versi cadangan tidak cocok.'; + @override + String get battery => 'Baterai'; + @override String get bgRun => 'Jalankan di Backgroud'; @@ -746,6 +749,9 @@ class SId extends S { @override String get upsideDown => 'Terbalik'; + @override + String get uptime => 'Uptime'; + @override String get urlOrJson => 'URL atau JSON'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart index 12367d09..27c6d032 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart @@ -72,6 +72,9 @@ class SZh extends S { @override String get backupVersionNotMatch => '备份版本不匹配,无法恢复'; + @override + String get battery => '电池'; + @override String get bgRun => '后台运行'; @@ -746,6 +749,9 @@ class SZh extends S { @override String get upsideDown => '上下交换'; + @override + String get uptime => '启动时长'; + @override String get urlOrJson => '链接或JSON'; @@ -870,6 +876,9 @@ class SZhTw extends SZh { @override String get backupVersionNotMatch => '備份版本不匹配,無法還原'; + @override + String get battery => '電池'; + @override String get bgRun => '背景運行'; @@ -1544,6 +1553,9 @@ class SZhTw extends SZh { @override String get upsideDown => '上下交換'; + @override + String get uptime => '啟動時長'; + @override String get urlOrJson => '鏈接或JSON'; diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 9bfea105..5c0d59e0 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 = 674; + CURRENT_PROJECT_VERSION = 678; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -596,7 +596,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.674; + MARKETING_VERSION = 1.0.678; 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 = 674; + CURRENT_PROJECT_VERSION = 678; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -730,7 +730,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.674; + MARKETING_VERSION = 1.0.678; 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 = 674; + CURRENT_PROJECT_VERSION = 678; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -758,7 +758,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.674; + MARKETING_VERSION = 1.0.678; 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 = 674; + CURRENT_PROJECT_VERSION = 678; 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.674; + MARKETING_VERSION = 1.0.678; 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 = 674; + CURRENT_PROJECT_VERSION = 678; 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.674; + MARKETING_VERSION = 1.0.678; 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 = 674; + CURRENT_PROJECT_VERSION = 678; 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.674; + MARKETING_VERSION = 1.0.678; 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 = 674; + CURRENT_PROJECT_VERSION = 678; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -902,7 +902,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.674; + MARKETING_VERSION = 1.0.678; 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 = 674; + CURRENT_PROJECT_VERSION = 678; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -943,7 +943,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.674; + MARKETING_VERSION = 1.0.678; 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 = 674; + CURRENT_PROJECT_VERSION = 678; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -981,7 +981,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.674; + MARKETING_VERSION = 1.0.678; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_NAME = ServerBox; diff --git a/lib/core/extension/status_cmd_type.dart b/lib/core/extension/status_cmd_type.dart new file mode 100644 index 00000000..3b45dd3c --- /dev/null +++ b/lib/core/extension/status_cmd_type.dart @@ -0,0 +1,12 @@ +import 'package:toolbox/core/extension/context/locale.dart'; +import 'package:toolbox/data/model/app/shell_func.dart'; + +extension StatusCmdTypeX on StatusCmdType { + String get i18n => switch (this) { + StatusCmdType.sys => l10n.system, + StatusCmdType.host => l10n.host, + StatusCmdType.uptime => l10n.uptime, + StatusCmdType.battery => l10n.battery, + final val => val.name, + }; +} diff --git a/lib/data/model/app/shell_func.dart b/lib/data/model/app/shell_func.dart index 4405ce23..4ab1f816 100644 --- a/lib/data/model/app/shell_func.dart +++ b/lib/data/model/app/shell_func.dart @@ -200,7 +200,8 @@ enum StatusCmdType { tempVal, host, diskio, - nvdia, + battery, + nvidia, ; } @@ -219,6 +220,7 @@ const _statusCmds = [ 'cat /sys/class/thermal/thermal_zone*/temp', 'hostname', 'cat /proc/diskstats', + 'cat /sys/class/power_supply/*/capacity', 'nvidia-smi -q -x', ]; diff --git a/lib/data/model/server/server.dart b/lib/data/model/server/server.dart index 7aa2fedf..10bac765 100644 --- a/lib/data/model/server/server.dart +++ b/lib/data/model/server/server.dart @@ -1,4 +1,5 @@ import 'package:dartssh2/dartssh2.dart'; +import 'package:toolbox/data/model/app/shell_func.dart'; import 'package:toolbox/data/model/server/conn.dart'; import 'package:toolbox/data/model/server/cpu.dart'; import 'package:toolbox/data/model/server/disk.dart'; @@ -47,8 +48,6 @@ class ServerStatus { Cpus cpu; Memory mem; Swap swap; - String sysVer; - String uptime; List disk; Conn tcp; NetSpeed netSpeed; @@ -57,6 +56,7 @@ class ServerStatus { String? err; DiskIO diskIO; List? nvidia; + final Map more = {}; /// Whether is connectting, parsing and etc. bool _isBusy = false; @@ -64,8 +64,6 @@ class ServerStatus { ServerStatus({ required this.cpu, required this.mem, - required this.sysVer, - required this.uptime, required this.disk, required this.tcp, required this.netSpeed, diff --git a/lib/data/model/server/server_status_update_req.dart b/lib/data/model/server/server_status_update_req.dart index eb58a850..6c614744 100644 --- a/lib/data/model/server/server_status_update_req.dart +++ b/lib/data/model/server/server_status_update_req.dart @@ -49,10 +49,18 @@ Future _getLinuxStatus(ServerStatusUpdateReq req) async { try { final sys = _parseSysVer( StatusCmdType.sys.find(segments), - StatusCmdType.host.find(segments), ); if (sys != null) { - req.ss.sysVer = sys; + req.ss.more[StatusCmdType.sys] = sys; + } + } catch (e, s) { + Loggers.parse.warning(e, s); + } + + try { + final host = StatusCmdType.host.find(segments); + if (host.isNotEmpty) { + req.ss.more[StatusCmdType.host] = host; } } catch (e, s) { Loggers.parse.warning(e, s); @@ -93,7 +101,7 @@ Future _getLinuxStatus(ServerStatusUpdateReq req) async { try { final uptime = _parseUpTime(StatusCmdType.uptime.find(segments)); if (uptime != null) { - req.ss.uptime = uptime; + req.ss.more[StatusCmdType.uptime] = uptime; } } catch (e, s) { Loggers.parse.warning(e, s); @@ -118,6 +126,16 @@ Future _getLinuxStatus(ServerStatusUpdateReq req) async { } catch (e, s) { Loggers.parse.warning(e, s); } + + try { + final battery = StatusCmdType.battery.find(segments); + if (battery.isNotEmpty && !battery.contains('No such')) { + req.ss.more[StatusCmdType.battery] = battery; + } + } catch (e, s) { + Loggers.parse.warning(e, s); + } + return req.ss; } @@ -134,7 +152,7 @@ Future _getBsdStatus(ServerStatusUpdateReq req) async { } try { - req.ss.sysVer = BSDStatusCmdType.sys.find(segments); + req.ss.more[StatusCmdType.sys] = BSDStatusCmdType.sys.find(segments); } catch (e, s) { Loggers.parse.warning(e, s); } @@ -154,7 +172,7 @@ Future _getBsdStatus(ServerStatusUpdateReq req) async { try { final uptime = _parseUpTime(BSDStatusCmdType.uptime.find(segments)); if (uptime != null) { - req.ss.uptime = uptime; + req.ss.more[StatusCmdType.uptime] = uptime; } } catch (e, s) { Loggers.parse.warning(e, s); @@ -181,10 +199,10 @@ String? _parseUpTime(String raw) { return null; } -String? _parseSysVer(String raw, String hostname) { +String? _parseSysVer(String raw) { final s = raw.split('='); if (s.length == 2) { return s[1].replaceAll('"', '').replaceFirst('\n', ''); } - return hostname.isEmpty ? null : hostname; + return null; } diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 50e57324..25e7b208 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 = 674; + static const int build = 678; static const String engine = "3.16.3"; - static const String buildAt = "2023-12-12 18:14:36"; - static const int modifications = 29; + static const String buildAt = "2023-12-17 18:43:29"; + static const int modifications = 8; static const int script = 31; } diff --git a/lib/data/res/status.dart b/lib/data/res/status.dart index 4d9a02a9..98b7e9be 100644 --- a/lib/data/res/status.dart +++ b/lib/data/res/status.dart @@ -40,8 +40,6 @@ abstract final class InitStatus { free: 1, avail: 1, ), - sysVer: 'Loading...', - uptime: '', disk: [ const Disk( dev: '/', diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index fbe57621..264a6632 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -22,6 +22,7 @@ "backupAndRestore": "Backup und Wiederherstellung", "backupTip": "Das Backup wird nur einfach verschlüsselt.\nBitte bewahre die Datei sicher auf.", "backupVersionNotMatch": "Die Backup-Version stimmt nicht überein.", + "battery": "Batterie", "bgRun": "Hintergrundaktualisierung", "bioAuth": "Biozertifizierung", "canPullRefresh": "Danach: herunterziehen zum Aktualisieren", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 619bed87..690055df 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -22,6 +22,7 @@ "backupAndRestore": "Backup and Restore", "backupTip": "The exported data is simply encrypted. \nPlease keep it safe.", "backupVersionNotMatch": "Backup version is not match.", + "battery": "Battery", "bgRun": "Run in backgroud", "bioAuth": "Biometric auth", "canPullRefresh": "You can pull to refresh.", @@ -236,6 +237,7 @@ "updateTipTooLow": "Current version is too low, please update to v1.0.{newest}", "upload": "Upload", "upsideDown": "Upside Down", + "uptime": "Uptime", "urlOrJson": "URL or JSON", "useNoPwd": "No password will be used.", "user": "User", diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index faaa1f16..33682af1 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -22,6 +22,7 @@ "backupAndRestore": "Cadangan dan Pulihkan", "backupTip": "Data yang diekspor hanya dienkripsi.\nTolong jaga keamanannya.", "backupVersionNotMatch": "Versi cadangan tidak cocok.", + "battery": "Baterai", "bgRun": "Jalankan di Backgroud", "bioAuth": "Biosertifikasi", "canPullRefresh": "Anda dapat menarik untuk menyegarkan.", diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index ec0b95a2..44a769a9 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -22,6 +22,7 @@ "backupAndRestore": "备份和恢复", "backupTip": "导出的数据仅进行了简单加密,请妥善保管。", "backupVersionNotMatch": "备份版本不匹配,无法恢复", + "battery": "电池", "bgRun": "后台运行", "bioAuth": "生物认证", "canPullRefresh": "可以下拉刷新", @@ -236,6 +237,7 @@ "updateTipTooLow": "当前版本过低,请升级至 v1.0.{newest}", "upload": "上传", "upsideDown": "上下交换", + "uptime": "启动时长", "urlOrJson": "链接或JSON", "useNoPwd": "将会使用无密码。", "user": "用户", diff --git a/lib/l10n/app_zh_tw.arb b/lib/l10n/app_zh_tw.arb index ff95fe20..31745fdd 100644 --- a/lib/l10n/app_zh_tw.arb +++ b/lib/l10n/app_zh_tw.arb @@ -22,6 +22,7 @@ "backupAndRestore": "備份和還原", "backupTip": "導出的數據僅進行了簡單加密,請妥善保管。", "backupVersionNotMatch": "備份版本不匹配,無法還原", + "battery": "電池", "bgRun": "背景運行", "bioAuth": "生物認證", "canPullRefresh": "可以下拉更新", @@ -236,6 +237,7 @@ "updateTipTooLow": "當前版本過低,請升級至 v1.0.{newest}", "upload": "上傳", "upsideDown": "上下交換", + "uptime": "啟動時長", "urlOrJson": "鏈接或JSON", "useNoPwd": "将使用無密碼。", "user": "用戶", diff --git a/lib/view/page/full_screen.dart b/lib/view/page/full_screen.dart index 26dc0a1d..2069537f 100644 --- a/lib/view/page/full_screen.dart +++ b/lib/view/page/full_screen.dart @@ -8,6 +8,7 @@ import 'package:get_it/get_it.dart'; import 'package:provider/provider.dart'; import 'package:toolbox/core/extension/context/locale.dart'; import 'package:toolbox/core/route.dart'; +import 'package:toolbox/data/model/app/shell_func.dart'; import 'package:toolbox/data/model/server/disk.dart'; import 'package:toolbox/data/provider/server.dart'; import 'package:toolbox/data/res/provider.dart'; @@ -239,7 +240,7 @@ class _FullScreenPageState extends State with AfterLayoutMixin { final topRightStr = _getTopRightStr( cs, ss.temps.first, - ss.uptime, + ss.more[StatusCmdType.uptime] ?? '', ss.err, ); return Text( diff --git a/lib/view/page/server/detail.dart b/lib/view/page/server/detail.dart index 97e6a16a..2680bd34 100644 --- a/lib/view/page/server/detail.dart +++ b/lib/view/page/server/detail.dart @@ -4,6 +4,7 @@ import 'package:toolbox/core/extension/context/common.dart'; import 'package:toolbox/core/extension/context/dialog.dart'; import 'package:toolbox/core/extension/context/locale.dart'; import 'package:toolbox/core/extension/order.dart'; +import 'package:toolbox/core/extension/status_cmd_type.dart'; import 'package:toolbox/core/extension/widget.dart'; import 'package:toolbox/data/model/server/cpu.dart'; import 'package:toolbox/data/model/server/disk.dart'; @@ -203,23 +204,25 @@ class _ServerDetailPageState extends State Widget _buildUpTimeAndSys(ServerStatus ss) { return CardX( - child: Padding( - padding: UIs.roundRectCardPadding, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - ss.sysVer, - style: UIs.textSize11, - textScaler: _textFactor, - ), - Text( - ss.uptime, - style: UIs.textSize11, - textScaler: _textFactor, - ), - ], + child: ExpandTile( + leading: const Icon(Icons.computer), + initiallyExpanded: ss.more.entries.length < 7, + title: Text(l10n.about), + childrenPadding: const EdgeInsets.symmetric( + horizontal: 17, + vertical: 7, ), + children: ss.more.entries + .map( + (e) => Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(e.key.i18n, style: UIs.textSize13), + Text(e.value, style: UIs.textSize11Grey) + ], + ).padding(const EdgeInsets.symmetric(vertical: 1)), + ) + .toList(), ), ); } diff --git a/lib/view/page/server/tab.dart b/lib/view/page/server/tab.dart index d3fdbd5a..ebe0a8a0 100644 --- a/lib/view/page/server/tab.dart +++ b/lib/view/page/server/tab.dart @@ -370,7 +370,7 @@ class _ServerPageState extends State final topRightStr = _getTopRightStr( cs, ss.temps.first, - ss.uptime, + ss.more[StatusCmdType.uptime] ?? '', ss.err, ); if (cs == ServerState.failed && ss.err != null) { diff --git a/lib/view/widget/server_func_btns.dart b/lib/view/widget/server_func_btns.dart index 1766bbcf..d3cf8cee 100644 --- a/lib/view/widget/server_func_btns.dart +++ b/lib/view/widget/server_func_btns.dart @@ -9,6 +9,7 @@ import 'package:toolbox/core/extension/ssh_client.dart'; import 'package:toolbox/core/extension/uint8list.dart'; import 'package:toolbox/core/utils/platform/base.dart'; import 'package:toolbox/core/utils/platform/path.dart'; +import 'package:toolbox/data/model/app/shell_func.dart'; import 'package:toolbox/data/model/pkg/manager.dart'; import 'package:toolbox/data/model/server/dist.dart'; import 'package:toolbox/data/res/path.dart'; @@ -238,7 +239,11 @@ Future _onPkg(BuildContext context, ServerPrivateInfo spi) async { context.showSnackBar(l10n.noClient); return; } - final sys = server.status.sysVer; + final sys = server.status.more[StatusCmdType.sys]; + if (sys == null) { + context.showSnackBar(l10n.noResult); + return; + } final pkg = PkgManager.fromDist(sys.dist); // Update pkg list