diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 70aa3550..ec9372dd 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 = 892; + CURRENT_PROJECT_VERSION = 893; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -700,7 +700,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.892; + MARKETING_VERSION = 1.0.893; 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 = 892; + CURRENT_PROJECT_VERSION = 893; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -836,7 +836,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.892; + MARKETING_VERSION = 1.0.893; 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 = 892; + CURRENT_PROJECT_VERSION = 893; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -864,7 +864,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.892; + MARKETING_VERSION = 1.0.893; 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 = 892; + CURRENT_PROJECT_VERSION = 893; 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.892; + MARKETING_VERSION = 1.0.893; 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 = 892; + CURRENT_PROJECT_VERSION = 893; 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.892; + MARKETING_VERSION = 1.0.893; 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 = 892; + CURRENT_PROJECT_VERSION = 893; 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.892; + MARKETING_VERSION = 1.0.893; 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 = 892; + CURRENT_PROJECT_VERSION = 893; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -1008,7 +1008,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.892; + MARKETING_VERSION = 1.0.893; 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 = 892; + CURRENT_PROJECT_VERSION = 893; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -1049,7 +1049,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.892; + MARKETING_VERSION = 1.0.893; 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 = 892; + CURRENT_PROJECT_VERSION = 893; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -1087,7 +1087,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.892; + MARKETING_VERSION = 1.0.893; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_NAME = ServerBox; diff --git a/lib/data/model/server/sensors.dart b/lib/data/model/server/sensors.dart index 98893bd4..089208c2 100644 --- a/lib/data/model/server/sensors.dart +++ b/lib/data/model/server/sensors.dart @@ -1,3 +1,4 @@ +import 'package:toolbox/core/extension/context/locale.dart'; import 'package:toolbox/data/res/logger.dart'; final class SensorAdaptor { @@ -26,14 +27,28 @@ final class SensorAdaptor { final class SensorItem { final String device; final SensorAdaptor adapter; - final String val; + final Map details; const SensorItem({ required this.device, required this.adapter, - required this.val, + required this.details, }); + String get toMarkdown { + final sb = StringBuffer(); + sb.writeln('| ${l10n.name} | ${l10n.content} |'); + sb.writeln('| --- | --- |'); + for (final entry in details.entries) { + sb.writeln('| ${entry.key} | ${entry.value} |'); + } + return sb.toString(); + } + + String? get summary { + return details.values.firstOrNull; + } + static List parse(String raw) { final eachSensorLines = >[[]]; final lines = raw.split('\n'); @@ -60,13 +75,23 @@ final class SensorItem { final device = sensorLines.first; final adapter = SensorAdaptor.parse(sensorLines[1].split(':').last.trim()); - final line = sensorLines[2]; - final parts = line.split(':'); - if (parts.length < 2) { - continue; + + final details = {}; + for (var idx = 2; idx < len; idx++) { + final part = sensorLines[idx]; + final detailParts = part.split(':'); + if (detailParts.length < 2) { + continue; + } + final key = detailParts[0].trim(); + final value = detailParts[1].trim(); + details[key] = value; } - final val = parts[1].trim(); - sensors.add(SensorItem(device: device, adapter: adapter, val: val)); + sensors.add(SensorItem( + device: device, + adapter: adapter, + details: details, + )); } return sensors; diff --git a/lib/data/model/server/server.ext.dart b/lib/data/model/server/server.ext.dart index 11b04f91..3c22ce02 100644 --- a/lib/data/model/server/server.ext.dart +++ b/lib/data/model/server/server.ext.dart @@ -20,8 +20,8 @@ extension ServerX on Server { if (preferTempDev != null) { final preferTemp = status.sensors .firstWhereOrNull((e) => e.device == preferTempDev) - ?.val - .split(' ') + ?.summary + ?.split(' ') .firstOrNull; if (preferTemp != null) { return double.tryParse(preferTemp.replaceFirst('°C', '')); diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 28e816e5..b802ce1a 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 = 892; + static const int build = 893; static const String engine = "3.19.6"; - static const String buildAt = "2024-05-10 12:55:39"; - static const int modifications = 3; - static const int script = 46; + static const String buildAt = "2024-05-10 20:57:55"; + static const int modifications = 8; + static const int script = 47; } diff --git a/lib/data/res/github_id.dart b/lib/data/res/github_id.dart index 7228e2d2..c54cd7b1 100644 --- a/lib/data/res/github_id.dart +++ b/lib/data/res/github_id.dart @@ -71,5 +71,6 @@ abstract final class GithubIds { 'pctoolsx', 'pgs666', 'FHU-yezi', + 'ZRY233', }; } diff --git a/lib/view/page/server/detail/view.dart b/lib/view/page/server/detail/view.dart index c384bc3f..b29167db 100644 --- a/lib/view/page/server/detail/view.dart +++ b/lib/view/page/server/detail/view.dart @@ -1,6 +1,7 @@ import 'package:extended_image/extended_image.dart'; import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:icons_plus/icons_plus.dart'; import 'package:provider/provider.dart'; import 'package:toolbox/core/extension/context/common.dart'; @@ -21,6 +22,7 @@ import 'package:toolbox/data/model/server/system.dart'; import 'package:toolbox/data/res/store.dart'; import 'package:toolbox/view/widget/expand_tile.dart'; import 'package:toolbox/view/widget/kv_row.dart'; +import 'package:toolbox/view/widget/markdown.dart'; import 'package:toolbox/view/widget/server_func_btns.dart'; import 'package:toolbox/view/widget/val_builder.dart'; @@ -755,22 +757,51 @@ class _ServerDetailPageState extends State } Widget _buildSensorItem(SensorItem si) { - if (si.val.isEmpty) return UIs.placeholder; - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 17, vertical: 7), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Row( - children: [ - Text(si.device, style: UIs.text15Bold), - const Spacer(), - Text(si.adapter.raw, style: UIs.text13Grey), - ], + if (si.summary == null) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 17, vertical: 7), + child: Text(si.device), + ); + } + return InkWell( + onTap: () { + context.showRoundDialog( + title: Text(si.device), + child: SingleChildScrollView( + child: SimpleMarkdown( + data: si.toMarkdown, + styleSheet: MarkdownStyleSheet( + tableBorder: TableBorder.all(color: Colors.grey), + tableHead: const TextStyle(fontWeight: FontWeight.bold), + ), + ), ), - Text(si.val, style: UIs.text13Grey), - ], + ); + }, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 17, vertical: 7), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Row( + children: [ + Text(si.device, style: UIs.text15Bold), + UIs.width7, + Text('(${si.adapter.raw})', style: UIs.text13Grey), + ], + ), + Text(si.summary ?? '', style: UIs.text13Grey), + ], + )), + UIs.width7, + const Icon(Icons.keyboard_arrow_right, color: Colors.grey), + ], + ), ), ); } diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index eaf54dc3..bab93041 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 = 892; + CURRENT_PROJECT_VERSION = 893; 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.892; + MARKETING_VERSION = 1.0.893; 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 = 892; + CURRENT_PROJECT_VERSION = 893; 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.892; + MARKETING_VERSION = 1.0.893; 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 = 892; + CURRENT_PROJECT_VERSION = 893; 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.892; + MARKETING_VERSION = 1.0.893; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "Server Box"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/test/sensors_test.dart b/test/sensors_test.dart index 1b388868..d722e445 100644 --- a/test/sensors_test.dart +++ b/test/sensors_test.dart @@ -26,8 +26,80 @@ Sensor 1: +45.9°C (low = -273.1°C, high = +65261.8°C) Sensor 2: +47.9°C (low = -273.1°C, high = +65261.8°C) '''; +const _sensorsRaw2 = ''' +asusec-isa-0000 +Adapter: ISA adapter +CPU Core: 1.26 V +Chipset: 2473 RPM +Chipset: +60.0°C +CPU: +36.0°C +Motherboard: +34.0°C +T_Sensor: -40.0°C +VRM: +20.0°C +CPU: 35.00 A + +nct6798-isa-0290 +Adapter: ISA adapter +in0: 1.19 V (min = +0.00 V, max = +1.74 V) +in1: 1000.00 mV (min = +0.00 V, max = +0.00 V) ALARM +in2: 3.34 V (min = +0.00 V, max = +0.00 V) ALARM +in3: 3.28 V (min = +0.00 V, max = +0.00 V) ALARM +in4: 1000.00 mV (min = +0.00 V, max = +0.00 V) ALARM +in5: 856.00 mV (min = +0.00 V, max = +0.00 V) +in6: 232.00 mV (min = +0.00 V, max = +0.00 V) ALARM +in7: 3.34 V (min = +0.00 V, max = +0.00 V) ALARM +in8: 3.23 V (min = +0.00 V, max = +0.00 V) ALARM +in9: 1.78 V (min = +0.00 V, max = +0.00 V) ALARM +in10: 848.00 mV (min = +0.00 V, max = +0.00 V) ALARM +in11: 880.00 mV (min = +0.00 V, max = +0.00 V) ALARM +in12: 1.03 V (min = +0.00 V, max = +0.00 V) ALARM +in13: 320.00 mV (min = +0.00 V, max = +0.00 V) ALARM +in14: 240.00 mV (min = +0.00 V, max = +0.00 V) ALARM +fan1: 0 RPM (min = 0 RPM) +fan2: 1764 RPM (min = 0 RPM) +fan3: 0 RPM (min = 0 RPM) +fan4: 0 RPM (min = 0 RPM) +fan5: 0 RPM (min = 0 RPM) +fan6: 0 RPM (min = 0 RPM) +SYSTIN: +34.0°C (high = +80.0°C, hyst = +75.0°C) + (crit = +125.0°C) sensor = thermistor +CPUTIN: +35.0°C (high = +80.0°C, hyst = +75.0°C) + (crit = +125.0°C) sensor = thermistor +AUXTIN0: +90.0°C (high = +80.0°C, hyst = +75.0°C) ALARM + (crit = +125.0°C) sensor = thermistor +AUXTIN1: +34.0°C (high = +80.0°C, hyst = +75.0°C) + (crit = +125.0°C) sensor = thermistor +AUXTIN2: +33.0°C (high = +80.0°C, hyst = +75.0°C) + (crit = +100.0°C) sensor = thermistor +AUXTIN3: +95.0°C (high = +80.0°C, hyst = +75.0°C) ALARM + (crit = +100.0°C) sensor = thermistor +AUXTIN4: +34.0°C (high = +80.0°C, hyst = +75.0°C) + (crit = +100.0°C) +PECI Agent 0 Calibration: +36.0°C (high = +80.0°C, hyst = +75.0°C) +PCH_CHIP_CPU_MAX_TEMP: +0.0°C +PCH_CHIP_TEMP: +0.0°C +PCH_CPU_TEMP: +0.0°C +PCH_MCH_TEMP: +0.0°C +TSI0_TEMP: +44.6°C +TSI1_TEMP: +60.0°C +intrusion0: ALARM +intrusion1: ALARM +beep_enable: disabled + +nvme-pci-0400 +Adapter: PCI adapter +Composite: +45.9°C (low = -273.1°C, high = +69.8°C) + (crit = +79.8°C) + +k10temp-pci-00c3 +Adapter: PCI adapter +Tctl: +44.9°C +Tccd1: +41.0°C +Tccd2: +38.5°C +'''; + void main() { - test('parse sensors', () { + test('parse sensors1', () { final sensors = SensorItem.parse(_sensorsRaw); expect(sensors.map((e) => e.device), [ 'coretemp-isa-0000', @@ -42,7 +114,7 @@ void main() { SensorAdaptor.pci, ]); expect( - sensors.map((e) => e.val), + sensors.map((e) => e.summary), [ '+56.0°C (high = +105.0°C, crit = +105.0°C)', '+27.8°C (crit = +119.0°C)', @@ -51,4 +123,29 @@ void main() { ], ); }); + + test('parse sensors2', () { + final sensors = SensorItem.parse(_sensorsRaw2); + expect(sensors.map((e) => e.device), [ + 'asusec-isa-0000', + 'nct6798-isa-0290', + 'nvme-pci-0400', + 'k10temp-pci-00c3', + ]); + expect(sensors.map((e) => e.adapter), [ + SensorAdaptor.isa, + SensorAdaptor.isa, + SensorAdaptor.pci, + SensorAdaptor.pci, + ]); + expect( + sensors.map((e) => e.summary), + [ + '1.26 V', + '1.19 V (min = +0.00 V, max = +1.74 V)', + '+45.9°C (low = -273.1°C, high = +69.8°C)', + '+44.9°C', + ], + ); + }); }