From a0ea95b1c30940452602f9ef41a10e7642c159f5 Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Sun, 21 Apr 2024 01:04:43 +0800 Subject: [PATCH] fix & opt.: prefer temperature dev --- lib/data/model/server/custom.dart | 8 +++ lib/data/model/server/sensors.dart | 89 --------------------------- lib/data/model/server/server.dart | 1 + lib/data/model/server/server.ext.dart | 34 +++++++--- lib/data/model/server/temp.dart | 10 --- lib/data/store/setting.dart | 7 --- lib/l10n/app_de.arb | 3 +- lib/l10n/app_en.arb | 3 +- lib/l10n/app_es.arb | 3 +- lib/l10n/app_fr.arb | 3 +- lib/l10n/app_id.arb | 3 +- lib/l10n/app_ja.arb | 3 +- lib/l10n/app_nl.arb | 3 +- lib/l10n/app_pt.arb | 3 +- lib/l10n/app_ru.arb | 3 +- lib/l10n/app_zh.arb | 3 +- lib/l10n/app_zh_tw.arb | 3 +- lib/view/page/server/edit.dart | 64 ++++++++++--------- lib/view/page/server/tab.dart | 2 +- lib/view/page/setting/entry.dart | 35 ----------- lib/view/widget/tag.dart | 2 +- test/sensors_test.dart | 73 +++++++++++++++++++++- 22 files changed, 152 insertions(+), 206 deletions(-) diff --git a/lib/data/model/server/custom.dart b/lib/data/model/server/custom.dart index d3bfcf0f..91b0dc02 100644 --- a/lib/data/model/server/custom.dart +++ b/lib/data/model/server/custom.dart @@ -10,6 +10,8 @@ final class ServerCustom { final String? pveAddr; @HiveField(2, defaultValue: false) final bool pveIgnoreCert; + @HiveField(3) + final String? preferTempDev; /// {"title": "cmd"} @HiveField(3) @@ -20,6 +22,7 @@ final class ServerCustom { this.pveAddr, this.pveIgnoreCert = false, this.cmds, + this.preferTempDev, }); static ServerCustom fromJson(Map json) { @@ -27,11 +30,13 @@ final class ServerCustom { final pveAddr = json["pveAddr"] as String?; final pveIgnoreCert = json["pveIgnoreCert"] as bool; final cmds = json["cmds"] as Map?; + final preferTempDev = json["preferTempDev"] as String?; return ServerCustom( //temperature: temperature, pveAddr: pveAddr, pveIgnoreCert: pveIgnoreCert, cmds: cmds?.cast(), + preferTempDev: preferTempDev, ); } @@ -48,6 +53,9 @@ final class ServerCustom { if (cmds != null) { json["cmds"] = cmds; } + if (preferTempDev != null) { + json["preferTempDev"] = preferTempDev; + } return json; } } diff --git a/lib/data/model/server/sensors.dart b/lib/data/model/server/sensors.dart index 2aa7d209..0902cb76 100644 --- a/lib/data/model/server/sensors.dart +++ b/lib/data/model/server/sensors.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'package:toolbox/core/extension/listx.dart'; import 'package:toolbox/data/res/logger.dart'; -import 'package:toolbox/data/res/store.dart'; final class SensorAdaptor { final String raw; @@ -101,92 +100,4 @@ final class SensorItem { } return items; } - - static double? findPreferTempVal(List items) { - if (items.isEmpty) { - return null; - } - final preferTemperatureDevs = Stores.setting.preferTemperatureDevs.fetch(); - if (preferTemperatureDevs.isNotEmpty) { - for (final key in preferTemperatureDevs) { - final item = items.firstWhereOrNull((e) => e.device == key); - if (item != null) { - return item.props.values.firstOrNull?.current; - } - } - } - return items.first.props.values.firstOrNull?.current; - } - - static const sensorsRaw = ''' -{ - "coretemp-isa-0000":{ - "Adapter": "ISA adapter", - "Package id 0":{ - "temp1_input": 51.000, - "temp1_max": 105.000, - "temp1_crit": 105.000, - "temp1_crit_alarm": 0.000 - }, - "Core 0":{ - "temp2_input": 40.000, - "temp2_max": 105.000, - "temp2_crit": 105.000, - "temp2_crit_alarm": 0.000 - }, - "Core 1":{ - "temp3_input": 40.000, - "temp3_max": 105.000, - "temp3_crit": 105.000, - "temp3_crit_alarm": 0.000 - }, - "Core 2":{ - "temp4_input": 40.000, - "temp4_max": 105.000, - "temp4_crit": 105.000, - "temp4_crit_alarm": 0.000 - }, - "Core 3":{ - "temp5_input": 40.000, - "temp5_max": 105.000, - "temp5_crit": 105.000, - "temp5_crit_alarm": 0.000 - } - }, - "acpitz-acpi-0":{ - "Adapter": "ACPI interface", - "temp1":{ - "temp1_input": 27.800, - "temp1_crit": 119.000 - } - }, - "iwlwifi_1-virtual-0":{ - "Adapter": "Virtual device", - "temp1":{ -ERROR: Can't get value of subfeature temp1_input: Can't read - - } - }, - "nvme-pci-0400":{ - "Adapter": "PCI adapter", - "Composite":{ - "temp1_input": 35.850, - "temp1_max": 83.850, - "temp1_min": -273.150, - "temp1_crit": 84.850, - "temp1_alarm": 0.000 - }, - "Sensor 1":{ - "temp2_input": 35.850, - "temp2_max": 65261.850, - "temp2_min": -273.150 - }, - "Sensor 2":{ - "temp3_input": 37.850, - "temp3_max": 65261.850, - "temp3_min": -273.150 - } - } -} -'''; } diff --git a/lib/data/model/server/server.dart b/lib/data/model/server/server.dart index 04641313..b96959ee 100644 --- a/lib/data/model/server/server.dart +++ b/lib/data/model/server/server.dart @@ -1,5 +1,6 @@ import 'package:dartssh2/dartssh2.dart'; import 'package:toolbox/core/extension/context/locale.dart'; +import 'package:toolbox/core/extension/listx.dart'; import 'package:toolbox/data/model/app/shell_func.dart'; import 'package:toolbox/data/model/server/battery.dart'; import 'package:toolbox/data/model/server/conn.dart'; diff --git a/lib/data/model/server/server.ext.dart b/lib/data/model/server/server.ext.dart index b049eeaa..b337e57d 100644 --- a/lib/data/model/server/server.ext.dart +++ b/lib/data/model/server/server.ext.dart @@ -1,28 +1,42 @@ part of 'server.dart'; extension ServerX on Server { - String get topRightStr { + String getTopRightStr(ServerPrivateInfo spi) { switch (state) { case ServerState.disconnected: return l10n.disconnected; case ServerState.finished: + // Highest priority of temperature display final cmdTemp = status.customCmds['server_card_top_right']; - final temp = status.temps.first; - final sensorTemp = SensorItem.findPreferTempVal(status.sensors); final temperatureVal = () { + // Second priority + final preferTempDev = spi.custom?.preferTempDev; + if (preferTempDev != null) { + final preferTemp = status.sensors + .firstWhereOrNull( + (e) => e.device == preferTempDev, + ) + ?.props + .values + .firstOrNull + ?.current; + if (preferTemp != null) return preferTemp; + } + // Last priority + final temp = status.temps.first; if (temp != null) { return temp; } - if (sensorTemp != null) { - return sensorTemp; - } return null; }(); - final tempVal = temperatureVal != null - ? '${temperatureVal.toStringAsFixed(1)}°C' - : null; final upTime = status.more[StatusCmdType.uptime]; - final items = [tempVal ?? cmdTemp, upTime]; + final items = [ + cmdTemp ?? + (temperatureVal != null + ? '${temperatureVal.toStringAsFixed(1)}°C' + : null), + upTime + ]; final str = items.where((e) => e != null && e.isNotEmpty).join(' | '); if (str.isEmpty) return l10n.noResult; return str; diff --git a/lib/data/model/server/temp.dart b/lib/data/model/server/temp.dart index 747f910e..c31b3b5b 100644 --- a/lib/data/model/server/temp.dart +++ b/lib/data/model/server/temp.dart @@ -1,5 +1,3 @@ -import 'package:toolbox/data/res/store.dart'; - class Temperatures { final Map _map = {}; @@ -37,14 +35,6 @@ class Temperatures { if (_map.isEmpty) { return null; } - final preferTemperatureDevs = Stores.setting.preferTemperatureDevs.fetch(); - if (preferTemperatureDevs.isNotEmpty) { - for (final key in preferTemperatureDevs) { - if (_map.containsKey(key)) { - return _map[key]; - } - } - } for (final key in _cpuTemp) { if (_map.containsKey(key)) { return _map[key]; diff --git a/lib/data/store/setting.dart b/lib/data/store/setting.dart index f53d2271..50d8ff01 100644 --- a/lib/data/store/setting.dart +++ b/lib/data/store/setting.dart @@ -225,13 +225,6 @@ class SettingStore extends PersistentStore { /// Auto refresh container status late final contaienrAutoRefresh = property('contaienrAutoRefresh', true); - /// eg: - /// Available devices: ['iwlwifi','x86pkg_temp'] - /// Prefer list: ['x86pkg_temp','example'] - /// Result: use x86pkg_temp's temperature as the temperature - late final preferTemperatureDevs = - listProperty('preferTemperatureDevs', []); - /// Use double column servers page on Desktop late final doubleColumnServersPage = property( 'doubleColumnServersPage', diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 751aea7a..c6b87ba3 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -68,6 +68,7 @@ "delete": "Löschen", "deleteScripts": "Gleichzeitiges Löschen von Server-Skripten", "deleteServers": "Batch-Löschung von Servern", + "deviceName": "Gerätename", "dirEmpty": "Stelle sicher, dass der Ordner leer ist.", "disabled": "Behinderte", "disconnected": "Disconnected", @@ -206,8 +207,6 @@ "plzEnterHost": "Bitte Host eingeben.", "plzSelectKey": "Wähle einen Key.", "port": "Port", - "preferTemperatureDeviceList": "Liste mit Priorität für die Anzeige der Temperatur", - "preferTemperatureDeviceListTip": "Zum Beispiel: Geräte, die die Anzeige der Temperatur unterstützen, sind ['a', 'b'], diese Einstellung ist ['b', 'c'], daher wird die Temperatur des Geräts b angezeigt", "preview": "Vorschau", "primaryColorSeed": "Farbschema", "privateKey": "Private Key", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 09ad76ad..943c7fb7 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -68,6 +68,7 @@ "delete": "Delete", "deleteScripts": "Delete server scripts at the same time", "deleteServers": "Batch delete servers", + "deviceName": "Device name", "dirEmpty": "Make sure dir is empty.", "disabled": "Disabled", "disconnected": "Disconnected", @@ -206,8 +207,6 @@ "plzEnterHost": "Please enter host.", "plzSelectKey": "Please select a key.", "port": "Port", - "preferTemperatureDeviceList": "List prioritizing the display of temperature", - "preferTemperatureDeviceListTip": "For example: Devices supporting temperature display include ['a', 'b'], this configuration is ['b', 'c'], so display the temperature of device b", "preview": "Preview", "primaryColorSeed": "Primary color seed", "privateKey": "Private Key", diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 7ac27551..fe59a87e 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -68,6 +68,7 @@ "delete": "Eliminar", "deleteScripts": "Eliminar scripts del servidor simultáneamente", "deleteServers": "Eliminar servidores en lote", + "deviceName": "Nombre del dispositivo", "dirEmpty": "Asegúrate de que el directorio esté vacío", "disabled": "Deshabilitado", "disconnected": "Desconectado", @@ -206,8 +207,6 @@ "plzEnterHost": "Por favor, introduce el host", "plzSelectKey": "Por favor, selecciona una llave privada", "port": "Puerto", - "preferTemperatureDeviceList": "Lista de dispositivos con preferencia de temperatura", - "preferTemperatureDeviceListTip": "Por ejemplo: si los dispositivos que soportan mostrar temperatura son ['a', 'b'], y esta configuración es ['b', 'c'], entonces se mostrará la temperatura del dispositivo 'b'", "preview": "Vista previa", "primaryColorSeed": "Semilla de color primario", "privateKey": "Llave privada", diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index bf310037..52b3a414 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -68,6 +68,7 @@ "delete": "Supprimer", "deleteScripts": "Supprimer également les scripts du serveur", "deleteServers": "Suppression par lot de serveurs", + "deviceName": "Nom de l'appareil", "dirEmpty": "Assurez-vous que le répertoire est vide.", "disabled": "Désactivé", "disconnected": "Déconnecté", @@ -206,8 +207,6 @@ "plzEnterHost": "Veuillez saisir l'hôte.", "plzSelectKey": "Veuillez sélectionner une clé.", "port": "Port", - "preferTemperatureDeviceList": "Liste d'affichage prioritaire de la température", - "preferTemperatureDeviceListTip": "Par exemple : Les appareils prenant en charge l'affichage de la température sont ['a', 'b'], cette configuration est ['b', 'c'], donc afficher la température de l'appareil b", "preview": "Aperçu", "primaryColorSeed": "Graine de couleur primaire", "privateKey": "Clé privée", diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index 37fb4075..bd67104f 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -68,6 +68,7 @@ "delete": "Menghapus", "deleteScripts": "Menghapus skrip server secara bersamaan", "deleteServers": "Penghapusan server secara batch", + "deviceName": "Nama perangkat", "dirEmpty": "Pastikan dir kosong.", "disabled": "Dengan disabilitas", "disconnected": "Terputus", @@ -206,8 +207,6 @@ "plzEnterHost": "Harap masukkan host.", "plzSelectKey": "Pilih kunci.", "port": "Port", - "preferTemperatureDeviceList": "Daftar prioritas tampilan suhu", - "preferTemperatureDeviceListTip": "Contohnya: Perangkat yang mendukung tampilan suhu adalah ['a', 'b'], pengaturan ini adalah ['b', 'c'], maka tampilkan suhu perangkat b", "preview": "Pratinjau", "primaryColorSeed": "Warna utama", "privateKey": "Kunci Pribadi", diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index 5749b724..ff6bb6ee 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -68,6 +68,7 @@ "delete": "削除", "deleteScripts": "サーバースクリプトも削除", "deleteServers": "サーバーを一括削除", + "deviceName": "デバイス名", "dirEmpty": "フォルダーが空であることを確認してください", "disabled": "無効", "disconnected": "接続が切断されました", @@ -206,8 +207,6 @@ "plzEnterHost": "ホストを入力してください", "plzSelectKey": "プライベートキーを選択してください", "port": "ポート", - "preferTemperatureDeviceList": "温度表示を優先するデバイスリスト", - "preferTemperatureDeviceListTip": "例:温度表示をサポートするデバイスが['a','b']である場合、この設定が['b','c']であれば、デバイスbの温度を表示します", "preview": "プレビュー", "primaryColorSeed": "プライマリーカラーシード", "privateKey": "プライベートキー", diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index a023f6dc..31714ec0 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -68,6 +68,7 @@ "delete": "Verwijderen", "deleteScripts": "Verwijder tegelijkertijd serverscripts", "deleteServers": "Servers batchgewijs verwijderen", + "deviceName": "Apparaatnaam", "dirEmpty": "Zorg ervoor dat de map leeg is.", "disabled": "Uitgeschakeld", "disconnected": "Verbroken", @@ -205,8 +206,6 @@ "plzEnterHost": "Voer host in a.u.b.", "plzSelectKey": "Selecteer a.u.b. een sleutel.", "port": "Poort", - "preferTemperatureDeviceList": "Lijst met voorkeursweergave van temperatuur", - "preferTemperatureDeviceListTip": "Bijvoorbeeld: Apparaten die temperatuurweergave ondersteunen zijn ['a', 'b'], deze configuratie is ['b', 'c'], dus de temperatuur van apparaat b weergeven", "preview": "Voorbeeld", "primaryColorSeed": "Basis kleurzaad", "privateKey": "Privésleutel", diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 23d1548b..9e3c542b 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -68,6 +68,7 @@ "delete": "Excluir", "deleteScripts": "Excluir scripts do servidor simultaneamente", "deleteServers": "Excluir servidores em lote", + "deviceName": "Nome do dispositivo", "dirEmpty": "Certifique-se de que a pasta está vazia", "disabled": "Desativado", "disconnected": "Desconectado", @@ -206,8 +207,6 @@ "plzEnterHost": "Por favor, insira o host", "plzSelectKey": "Por favor, selecione uma chave privada", "port": "Porta", - "preferTemperatureDeviceList": "Dispositivos preferenciais para exibir temperatura", - "preferTemperatureDeviceListTip": "Por exemplo: dispositivos que suportam exibição de temperatura são ['a','b'], esta configuração é ['b','c'], então mostrará a temperatura do dispositivo b", "preview": "Pré-visualização", "primaryColorSeed": "Semente da cor primária", "privateKey": "Chave privada", diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 5d340409..f2cf0315 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -68,6 +68,7 @@ "delete": "удалить", "deleteScripts": "удалить скрипты с сервера", "deleteServers": "удалить серверы пакетно", + "deviceName": "Название устройства", "dirEmpty": "Пожалуйста, убедитесь, что папка пуста", "disabled": "отключено", "disconnected": "отключено", @@ -206,8 +207,6 @@ "plzEnterHost": "Пожалуйста, введите хост", "plzSelectKey": "Пожалуйста, выберите ключ", "port": "порт", - "preferTemperatureDeviceList": "список устройств с приоритетным отображением температуры", - "preferTemperatureDeviceListTip": "Например: если устройства, поддерживающие отображение температуры, включают ['a', 'b'], а этот параметр установлен на ['b', 'c'], то будет отображаться температура устройства b", "preview": "предпросмотр", "primaryColorSeed": "основной цветовой тон", "privateKey": "приватный ключ", diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 16788abf..ba70a4e0 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -68,6 +68,7 @@ "delete": "删除", "deleteScripts": "同时删除服务器脚本", "deleteServers": "批量删除服务器", + "deviceName": "设备名", "dirEmpty": "请确保文件夹为空", "disabled": "已禁用", "disconnected": "连接断开", @@ -206,8 +207,6 @@ "plzEnterHost": "请输入主机", "plzSelectKey": "请选择私钥", "port": "端口", - "preferTemperatureDeviceList": "优先显示温度的列表", - "preferTemperatureDeviceListTip": "例如:设备支持显示温度的设备有['a','b'],此设置为['b','c'],则显示设备b的温度", "preview": "预览", "primaryColorSeed": "主题色种子", "privateKey": "私钥", diff --git a/lib/l10n/app_zh_tw.arb b/lib/l10n/app_zh_tw.arb index 68262401..aa7e4aa7 100644 --- a/lib/l10n/app_zh_tw.arb +++ b/lib/l10n/app_zh_tw.arb @@ -68,6 +68,7 @@ "delete": "刪除", "deleteScripts": "同時刪除服務器腳本", "deleteServers": "批量刪除服務器", + "deviceName": "設備名", "dirEmpty": "請確保文件夾為空", "disabled": "已禁用", "disconnected": "連接斷開", @@ -206,8 +207,6 @@ "plzEnterHost": "請輸入主機", "plzSelectKey": "請選擇私鑰", "port": "端口", - "preferTemperatureDeviceList": "優先顯示溫度的列表", - "preferTemperatureDeviceListTip": "例如:支持顯示溫度的設備有['a', 'b'],此設置為['b', 'c'],則顯示設備b的溫度", "preview": "預覽", "primaryColorSeed": "主要色調種子", "privateKey": "私鑰", diff --git a/lib/view/page/server/edit.dart b/lib/view/page/server/edit.dart index c15c2f2e..edf82544 100644 --- a/lib/view/page/server/edit.dart +++ b/lib/view/page/server/edit.dart @@ -16,7 +16,6 @@ import 'package:toolbox/data/res/provider.dart'; import 'package:toolbox/view/widget/expand_tile.dart'; import '../../../core/route.dart'; -import '../../../data/model/server/private_key_info.dart'; import '../../../data/model/server/server_private_info.dart'; import '../../../data/provider/private_key.dart'; import '../../../data/res/ui.dart'; @@ -43,6 +42,7 @@ class _ServerEditPageState extends State { final _passwordController = TextEditingController(); final _pveAddrCtrl = TextEditingController(); final _customCmdCtrl = TextEditingController(); + final _preferTempDevCtrl = TextEditingController(); final _nameFocus = FocusNode(); final _ipFocus = FocusNode(); @@ -95,6 +95,7 @@ class _ServerEditPageState extends State { _customCmdCtrl.text = encoded; } } catch (_) {} + _preferTempDevCtrl.text = custom.preferTempDev ?? ''; } } } @@ -113,6 +114,9 @@ class _ServerEditPageState extends State { _alterUrlFocus.dispose(); _portFocus.dispose(); _usernameFocus.dispose(); + _pveAddrCtrl.dispose(); + _customCmdCtrl.dispose(); + _preferTempDevCtrl.dispose(); } @override @@ -319,7 +323,7 @@ class _ServerEditPageState extends State { final tiles = List.generate(key.pkis.length, (index) { final e = key.pkis[index]; return ListTile( - contentPadding: EdgeInsets.zero, + contentPadding: const EdgeInsets.symmetric(horizontal: 17), leading: Text( '#${index + 1}', style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 15), @@ -330,25 +334,29 @@ class _ServerEditPageState extends State { textAlign: TextAlign.start, style: UIs.textGrey, ), - trailing: _buildRadio(index, e), + trailing: Radio( + value: index, + groupValue: _keyIdx.value, + onChanged: (value) => _keyIdx.value = value, + ), + onTap: () => _keyIdx.value = index, ); }); tiles.add( ListTile( title: Text(l10n.addPrivateKey), - contentPadding: EdgeInsets.zero, + contentPadding: const EdgeInsets.symmetric(horizontal: 17), trailing: IconButton( icon: const Icon(Icons.add), - onPressed: () => AppRoute.keyEdit().go(context), + onPressed: () {}, ), + onTap: () => AppRoute.keyEdit().go(context), ), ); return CardX( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 17), - child: Column( - children: tiles, - ), + child: ListenableBuilder( + listenable: _keyIdx, + builder: (_, __) => Column(children: tiles), ), ); }, @@ -359,7 +367,6 @@ class _ServerEditPageState extends State { return ExpandTile( title: Text(l10n.more), children: [ - UIs.height7, const Text('PVE', style: UIs.text13Grey), UIs.height7, Input( @@ -406,6 +413,16 @@ class _ServerEditPageState extends State { trailing: const Icon(Icons.open_in_new, size: 17), onTap: () => openUrl(l10n.customCmdDocUrl), ).card, + UIs.height7, + Text(l10n.temperature, style: UIs.text13Grey), + UIs.height7, + Input( + controller: _preferTempDevCtrl, + type: TextInputType.text, + label: l10n.deviceName, + icon: MingCute.low_temperature_line, + hint: 'nvme-pci-0400', + ), ], ); } @@ -417,19 +434,6 @@ class _ServerEditPageState extends State { ); } - Widget _buildRadio(int index, PrivateKeyInfo pki) { - return ListenableBuilder( - listenable: _keyIdx, - builder: (_, __) => Radio( - value: index, - groupValue: _keyIdx.value, - onChanged: (value) { - _keyIdx.value = value; - }, - ), - ); - } - Widget _buildJumpServer() { return ListenableBuilder( listenable: _jumpServer, @@ -446,16 +450,16 @@ class _ServerEditPageState extends State { value: e.spi.id, onChanged: (val) => _jumpServer.value = val, ), - onTap: () { - _jumpServer.value = e.spi.id; - }, + onTap: () => _jumpServer.value = e.spi.id, + contentPadding: const EdgeInsets.symmetric(horizontal: 17), ), ) .toList(); children.add(ListTile( title: Text(l10n.clear), - trailing: const Icon(Icons.clear), + trailing: IconButton(onPressed: () {}, icon: const Icon(Icons.clear)), onTap: () => _jumpServer.value = null, + contentPadding: const EdgeInsets.symmetric(horizontal: 17), )); return CardX( child: ExpandTile( @@ -513,11 +517,11 @@ class _ServerEditPageState extends State { return null; } }(); - final pveAddr = _pveAddrCtrl.text.selfIfNotNullEmpty; final custom = ServerCustom( - pveAddr: pveAddr, + pveAddr: _pveAddrCtrl.text.selfIfNotNullEmpty, pveIgnoreCert: _pveIgnoreCert.value, cmds: customCmds, + preferTempDev: _preferTempDevCtrl.text.selfIfNotNullEmpty, ); final spi = ServerPrivateInfo( diff --git a/lib/view/page/server/tab.dart b/lib/view/page/server/tab.dart index f1e47890..b1527c59 100644 --- a/lib/view/page/server/tab.dart +++ b/lib/view/page/server/tab.dart @@ -501,7 +501,7 @@ class _ServerPageState extends State ); } return Text( - s.topRightStr, + s.getTopRightStr(s.spi), style: UIs.text13Grey, ); } diff --git a/lib/view/page/setting/entry.dart b/lib/view/page/setting/entry.dart index 788a50a0..5bc25875 100644 --- a/lib/view/page/setting/entry.dart +++ b/lib/view/page/setting/entry.dart @@ -981,47 +981,12 @@ class _SettingPageState extends State { ); } - Widget _buildPreferTemperatureDeviceList() { - void onSubmitted(String s) { - final list = s.split('\n'); - _setting.preferTemperatureDevs.put(list); - context.pop(); - } - - return ListTile( - title: Text(l10n.preferTemperatureDeviceList), - subtitle: Text(l10n.preferTemperatureDeviceListTip, style: UIs.textGrey), - trailing: const Icon(Icons.keyboard_arrow_right), - onTap: () { - final list = _setting.preferTemperatureDevs.fetch(); - final listStr = list.join('\n'); - final ctrl = TextEditingController(text: listStr); - context.showRoundDialog( - title: Text(l10n.preferTemperatureDeviceList), - child: Input( - autoFocus: true, - controller: ctrl, - maxLines: 3, - onSubmitted: onSubmitted, - ), - actions: [ - TextButton( - onPressed: () => onSubmitted(ctrl.text), - child: Text(l10n.ok), - ), - ], - ); - }, - ); - } - Widget _buildServerMore() { return ExpandTile( title: Text(l10n.more), children: [ _buildRememberPwdInMem(), _buildTextScaler(), - _buildPreferTemperatureDeviceList(), _buildKeepStatusWhenErr(), _buildDoubleColumnServersPage(), _buildUpdateInterval(), diff --git a/lib/view/widget/tag.dart b/lib/view/widget/tag.dart index 749e46d9..ec238779 100644 --- a/lib/view/widget/tag.dart +++ b/lib/view/widget/tag.dart @@ -60,7 +60,7 @@ class _TagEditorState extends State { child: ListTile( // Align the place of TextField.prefixIcon leading: const Padding( - padding: EdgeInsets.only(left: 6), + padding: EdgeInsets.only(left: 10), child: Icon(Icons.tag), ), title: _buildTags(widget.tags), diff --git a/test/sensors_test.dart b/test/sensors_test.dart index ab49ba88..251b40f7 100644 --- a/test/sensors_test.dart +++ b/test/sensors_test.dart @@ -3,7 +3,78 @@ import 'package:toolbox/data/model/server/sensors.dart'; void main() { test('parse sensors', () { - final sensors = SensorItem.parse(SensorItem.sensorsRaw); + const sensorsRaw = ''' +{ + "coretemp-isa-0000":{ + "Adapter": "ISA adapter", + "Package id 0":{ + "temp1_input": 51.000, + "temp1_max": 105.000, + "temp1_crit": 105.000, + "temp1_crit_alarm": 0.000 + }, + "Core 0":{ + "temp2_input": 40.000, + "temp2_max": 105.000, + "temp2_crit": 105.000, + "temp2_crit_alarm": 0.000 + }, + "Core 1":{ + "temp3_input": 40.000, + "temp3_max": 105.000, + "temp3_crit": 105.000, + "temp3_crit_alarm": 0.000 + }, + "Core 2":{ + "temp4_input": 40.000, + "temp4_max": 105.000, + "temp4_crit": 105.000, + "temp4_crit_alarm": 0.000 + }, + "Core 3":{ + "temp5_input": 40.000, + "temp5_max": 105.000, + "temp5_crit": 105.000, + "temp5_crit_alarm": 0.000 + } + }, + "acpitz-acpi-0":{ + "Adapter": "ACPI interface", + "temp1":{ + "temp1_input": 27.800, + "temp1_crit": 119.000 + } + }, + "iwlwifi_1-virtual-0":{ + "Adapter": "Virtual device", + "temp1":{ +ERROR: Can't get value of subfeature temp1_input: Can't read + + } + }, + "nvme-pci-0400":{ + "Adapter": "PCI adapter", + "Composite":{ + "temp1_input": 35.850, + "temp1_max": 83.850, + "temp1_min": -273.150, + "temp1_crit": 84.850, + "temp1_alarm": 0.000 + }, + "Sensor 1":{ + "temp2_input": 35.850, + "temp2_max": 65261.850, + "temp2_min": -273.150 + }, + "Sensor 2":{ + "temp3_input": 37.850, + "temp3_max": 65261.850, + "temp3_min": -273.150 + } + } +} +'''; + final sensors = SensorItem.parse(sensorsRaw); expect(sensors.map((e) => e.device), [ 'coretemp-isa-0000', 'acpitz-acpi-0',