Skip to content

Commit 3278716

Browse files
committed
WIP2
1 parent eae3341 commit 3278716

File tree

1 file changed

+85
-2
lines changed

1 file changed

+85
-2
lines changed

lib/src/api/aha/models/device_list_infos.dart

Lines changed: 85 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,15 @@ class DeviceList with _$DeviceList {
1616
}) = _DeviceList;
1717

1818
factory DeviceList.fromXml(XmlElement element) {
19-
throw UnimplementedError();
19+
assert(element.name.toString() == 'devicelist');
20+
21+
return DeviceList(
22+
version: element.getAttribute('version') ?? '',
23+
fwversion: element.getAttribute('fwversion') ?? '',
24+
devices: List.unmodifiable(
25+
element.childElements.map((element) => Device.fromXml(element)),
26+
),
27+
);
2028
}
2129

2230
void toXml(XmlBuilder builder) {
@@ -26,13 +34,76 @@ class DeviceList with _$DeviceList {
2634
'version': version,
2735
'fwversion': fwversion,
2836
},
37+
nest: () {
38+
for (final device in devices) {
39+
device.toXml(builder);
40+
}
41+
},
2942
);
3043
}
3144
}
3245

3346
@freezed
3447
class Device with _$Device {
35-
const factory Device() = _Device;
48+
const factory Device({
49+
required String identifier,
50+
required String id,
51+
required int functionbitmask,
52+
required String fwversion,
53+
required String manufacturer,
54+
required String productname,
55+
required bool present,
56+
required bool txbusy,
57+
required String name,
58+
required int battery,
59+
required bool batterylow,
60+
required dynamic temperature,
61+
required dynamic hkr,
62+
}) = _Device;
63+
64+
factory Device.fromXml(XmlElement element) {
65+
assert(element.name.toString() == 'device');
66+
67+
return Device(
68+
identifier: element.getAttribute('identifier') ?? '',
69+
id: element.getAttribute('id') ?? '',
70+
functionbitmask: element.getIntAttribute('functionbitmask') ?? 0,
71+
fwversion: element.getAttribute('fwversion') ?? '',
72+
manufacturer: element.getAttribute('manufacturer') ?? '',
73+
productname: element.getAttribute('productname') ?? '',
74+
present: element.getBoolElement('present'),
75+
txbusy: element.getBoolElement('txbusy'),
76+
name: element.getElement('name')?.text ?? '',
77+
battery: element.getIntElement('battery') ?? 0,
78+
batterylow: element.getBoolElement('batterylow'),
79+
temperature: element.getElement('temperature'),
80+
hkr: element.getElement('hkr'),
81+
);
82+
}
83+
84+
void toXml(XmlBuilder builder) {
85+
builder.element(
86+
'device',
87+
attributes: {
88+
'identifier': identifier,
89+
'id': id,
90+
'functionbitmask': functionbitmask.toString(),
91+
'fwversion': fwversion,
92+
'manufacturer': manufacturer,
93+
'productname': productname,
94+
},
95+
nest: () {
96+
builder
97+
..element('present', nest: present.toXmlString())
98+
..element('txbusy', nest: txbusy.toXmlString())
99+
..element('name', nest: name)
100+
..element('battery', nest: battery)
101+
..element('batterylow', nest: batterylow.toXmlString())
102+
..element('temperature', nest: temperature)
103+
..element('hkr', nest: hkr);
104+
},
105+
);
106+
}
36107
}
37108

38109
class _DeviceListTypeConverter extends SimpleXmlTypeConverter<DeviceList> {
@@ -44,3 +115,15 @@ class _DeviceListTypeConverter extends SimpleXmlTypeConverter<DeviceList> {
44115
@override
45116
DeviceList parseXml(XmlElement element) => DeviceList.fromXml(element);
46117
}
118+
119+
extension XmlElementX on XmlElement {
120+
int? getIntAttribute(String name) => int.tryParse(getAttribute(name) ?? '');
121+
122+
bool getBoolElement(String name) => getElement(name)?.text == '1';
123+
124+
int? getIntElement(String name) => int.tryParse(getElement(name)?.text ?? '');
125+
}
126+
127+
extension BoolX on bool {
128+
String toXmlString() => this ? '1' : '0';
129+
}

0 commit comments

Comments
 (0)