feat: Windows compatibility (#836)
* feat: win compatibility * fix * fix: uptime parse * opt.: linux uptime accuracy * fix: windows temperature fetching * opt. * opt.: powershell exec * refactor: address PR review feedback and improve code quality ### Major Improvements: - **Refactored Windows status parsing**: Broke down large `_getWindowsStatus` method into 13 smaller, focused helper methods for better maintainability and readability - **Extracted system detection logic**: Created dedicated `SystemDetector` helper class to separate OS detection concerns from ServerProvider - **Improved concurrency handling**: Implemented proper synchronization for server updates using Future-based locks to prevent race conditions ### Bug Fixes: - **Fixed CPU percentage parsing**: Removed incorrect '*100' multiplication in BSD CPU parsing (values were already percentages) - **Enhanced memory parsing**: Added validation and error handling to BSD memory fallback parsing with proper logging - **Improved uptime parsing**: Added support for multiple Windows date formats and robust error handling with validation - **Fixed division by zero**: Added safety checks in Swap.usedPercent getter ### Code Quality Enhancements: - **Added comprehensive documentation**: Documented Windows CPU counter limitations and approach - **Strengthened error handling**: Added detailed logging and validation throughout parsing methods - **Improved robustness**: Enhanced BSD CPU parsing with percentage validation and warnings - **Better separation of concerns**: Each parsing method now has single responsibility ### Files Changed: - `lib/data/helper/system_detector.dart` (new): System detection helper - `lib/data/model/server/cpu.dart`: Fixed percentage parsing and added validation - `lib/data/model/server/memory.dart`: Enhanced fallback parsing and division-by-zero protection - `lib/data/model/server/server_status_update_req.dart`: Refactored into 13 focused parsing methods - `lib/data/provider/server.dart`: Improved synchronization and extracted system detection 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: parse & shell fn struct --------- Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,7 @@ import 'package:server_box/data/model/server/custom.dart';
|
||||
import 'package:server_box/data/model/server/private_key_info.dart';
|
||||
import 'package:server_box/data/model/server/server_private_info.dart';
|
||||
import 'package:server_box/data/model/server/snippet.dart';
|
||||
import 'package:server_box/data/model/server/system.dart';
|
||||
import 'package:server_box/data/model/server/wol_cfg.dart';
|
||||
import 'package:server_box/data/model/ssh/virtual_key.dart';
|
||||
|
||||
@@ -17,5 +18,6 @@ import 'package:server_box/data/model/ssh/virtual_key.dart';
|
||||
AdapterSpec<ServerFuncBtn>(),
|
||||
AdapterSpec<ServerCustom>(),
|
||||
AdapterSpec<WakeOnLanCfg>(),
|
||||
AdapterSpec<SystemType>(),
|
||||
])
|
||||
part 'hive_adapters.g.dart';
|
||||
|
||||
@@ -111,13 +111,14 @@ class SpiAdapter extends TypeAdapter<Spi> {
|
||||
wolCfg: fields[11] as WakeOnLanCfg?,
|
||||
envs: (fields[12] as Map?)?.cast<String, String>(),
|
||||
id: fields[13] == null ? '' : fields[13] as String,
|
||||
customSystemType: fields[14] as SystemType?,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, Spi obj) {
|
||||
writer
|
||||
..writeByte(14)
|
||||
..writeByte(15)
|
||||
..writeByte(0)
|
||||
..write(obj.name)
|
||||
..writeByte(1)
|
||||
@@ -145,7 +146,9 @@ class SpiAdapter extends TypeAdapter<Spi> {
|
||||
..writeByte(12)
|
||||
..write(obj.envs)
|
||||
..writeByte(13)
|
||||
..write(obj.id);
|
||||
..write(obj.id)
|
||||
..writeByte(14)
|
||||
..write(obj.customSystemType);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -557,3 +560,44 @@ class WakeOnLanCfgAdapter extends TypeAdapter<WakeOnLanCfg> {
|
||||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
||||
|
||||
class SystemTypeAdapter extends TypeAdapter<SystemType> {
|
||||
@override
|
||||
final typeId = 9;
|
||||
|
||||
@override
|
||||
SystemType read(BinaryReader reader) {
|
||||
switch (reader.readByte()) {
|
||||
case 0:
|
||||
return SystemType.linux;
|
||||
case 1:
|
||||
return SystemType.bsd;
|
||||
case 2:
|
||||
return SystemType.windows;
|
||||
default:
|
||||
return SystemType.linux;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, SystemType obj) {
|
||||
switch (obj) {
|
||||
case SystemType.linux:
|
||||
writer.writeByte(0);
|
||||
case SystemType.bsd:
|
||||
writer.writeByte(1);
|
||||
case SystemType.windows:
|
||||
writer.writeByte(2);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => typeId.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is SystemTypeAdapter &&
|
||||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Generated by Hive CE
|
||||
# Manual modifications may be necessary for certain migrations
|
||||
# Check in to version control
|
||||
nextTypeId: 9
|
||||
nextTypeId: 10
|
||||
types:
|
||||
PrivateKeyInfo:
|
||||
typeId: 1
|
||||
@@ -27,7 +27,7 @@ types:
|
||||
index: 4
|
||||
Spi:
|
||||
typeId: 3
|
||||
nextIndex: 14
|
||||
nextIndex: 15
|
||||
fields:
|
||||
name:
|
||||
index: 0
|
||||
@@ -57,6 +57,8 @@ types:
|
||||
index: 12
|
||||
id:
|
||||
index: 13
|
||||
customSystemType:
|
||||
index: 14
|
||||
VirtKey:
|
||||
typeId: 4
|
||||
nextIndex: 45
|
||||
@@ -207,3 +209,13 @@ types:
|
||||
index: 1
|
||||
pwd:
|
||||
index: 2
|
||||
SystemType:
|
||||
typeId: 9
|
||||
nextIndex: 3
|
||||
fields:
|
||||
linux:
|
||||
index: 0
|
||||
bsd:
|
||||
index: 1
|
||||
windows:
|
||||
index: 2
|
||||
|
||||
@@ -13,6 +13,7 @@ extension HiveRegistrar on HiveInterface {
|
||||
registerAdapter(ServerFuncBtnAdapter());
|
||||
registerAdapter(SnippetAdapter());
|
||||
registerAdapter(SpiAdapter());
|
||||
registerAdapter(SystemTypeAdapter());
|
||||
registerAdapter(VirtKeyAdapter());
|
||||
registerAdapter(WakeOnLanCfgAdapter());
|
||||
}
|
||||
@@ -26,6 +27,7 @@ extension IsolatedHiveRegistrar on IsolatedHiveInterface {
|
||||
registerAdapter(ServerFuncBtnAdapter());
|
||||
registerAdapter(SnippetAdapter());
|
||||
registerAdapter(SpiAdapter());
|
||||
registerAdapter(SystemTypeAdapter());
|
||||
registerAdapter(VirtKeyAdapter());
|
||||
registerAdapter(WakeOnLanCfgAdapter());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user