mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2026-10-25 17:17:56 +00:00
all_devices and Restrict_user
This commit is contained in:
@@ -10,6 +10,9 @@ class DeviceModel {
|
||||
String? model;
|
||||
String? name;
|
||||
String? icon;
|
||||
String? categoryName;
|
||||
bool? toggleStatus = false;
|
||||
|
||||
String? type;
|
||||
bool? isOnline;
|
||||
List<StatusModel> status = [];
|
||||
@@ -21,6 +24,8 @@ class DeviceModel {
|
||||
DeviceType? productType;
|
||||
bool isSelected = false;
|
||||
late List<FunctionModel> functions;
|
||||
DeviceSubspace? subspace;
|
||||
|
||||
DeviceModel(
|
||||
{this.activeTime,
|
||||
this.productUuid,
|
||||
@@ -34,6 +39,9 @@ class DeviceModel {
|
||||
this.updateTime,
|
||||
this.uuid,
|
||||
this.productType,
|
||||
this.categoryName,
|
||||
this.subspace,
|
||||
this.toggleStatus,
|
||||
this.icon,
|
||||
this.type}) {
|
||||
functions = getFunctions(productType!);
|
||||
@@ -87,23 +95,74 @@ class DeviceModel {
|
||||
} else {
|
||||
tempIcon = Assets.assetsIconsLogo;
|
||||
}
|
||||
// Step 1: Parse `status` as before
|
||||
final statusList = (json['status'] as List<dynamic>?)
|
||||
?.map((st) => StatusModel.fromJson(st as Map<String, dynamic>))
|
||||
.toList();
|
||||
|
||||
// Step 2: Check whether ANY status means "off"
|
||||
final anyOff = statusList?.any((s) {
|
||||
final code = s.code;
|
||||
if (code == null) return false;
|
||||
|
||||
// 1) Handle "switch" or "switch_x"
|
||||
if (code == 'switch' || code.startsWith('switch_')) {
|
||||
// If it's false, we consider that "off"
|
||||
return s.value == false;
|
||||
}
|
||||
|
||||
// 2) If code == "control" and value == "stop", consider "off"
|
||||
if (s.value == 'open') {
|
||||
return true;
|
||||
}
|
||||
|
||||
// 3) If code == "percent_control" and value == 0, maybe "off"
|
||||
if (code == 'percent_control' && s.value == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Add more conditions for other codes as needed
|
||||
|
||||
// Default: if none of the above apply, it's not "off"
|
||||
return false;
|
||||
});
|
||||
|
||||
// Step 3: Decide final toggleStatus (true = fully "on", false = partially/fully "off")
|
||||
bool computedToggleStatus = !(anyOff ?? false);
|
||||
|
||||
return DeviceModel(
|
||||
icon: tempIcon,
|
||||
activeTime: json['activeTime'],
|
||||
// id: json['id'],
|
||||
localKey: json['localKey'],
|
||||
model: json['model'],
|
||||
name: json['name'],
|
||||
isOnline: json['online'],
|
||||
productName: json['productName'],
|
||||
timeZone: json['timeZone'],
|
||||
updateTime: json['updateTime'],
|
||||
uuid: json['uuid'],
|
||||
productType: type,
|
||||
type: json['productType'],
|
||||
status: [],
|
||||
productUuid: json['productUuid']);
|
||||
icon: tempIcon,
|
||||
activeTime: json['activeTime'],
|
||||
categoryName: json['categoryName'],
|
||||
localKey: json['localKey'],
|
||||
model: json['model'],
|
||||
name: json['name'],
|
||||
isOnline: json['online'],
|
||||
productName: json['productName'],
|
||||
timeZone: json['timeZone'],
|
||||
updateTime: json['updateTime'],
|
||||
uuid: json['uuid'],
|
||||
productType: type,
|
||||
type: json['productType'],
|
||||
|
||||
// Use the newly computed toggleStatus:
|
||||
toggleStatus: computedToggleStatus,
|
||||
|
||||
// Or if you prefer to use the value returned by the backend when available:
|
||||
// toggleStatus: json['toggleStatus'] ?? computedToggleStatus,
|
||||
|
||||
status: statusList ?? [],
|
||||
subspace: json['subspace'] != null
|
||||
? DeviceSubspace.fromJson(json['subspace'])
|
||||
: DeviceSubspace(
|
||||
createdAt: null,
|
||||
disabled: false,
|
||||
subspaceName: '',
|
||||
updatedAt: null,
|
||||
uuid: '',
|
||||
),
|
||||
productUuid: json['productUuid'],
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
@@ -118,9 +177,50 @@ class DeviceModel {
|
||||
'updateTime': updateTime,
|
||||
'uuid': uuid,
|
||||
'productType': productType,
|
||||
'subspace': subspace?.toJson(), // serialize subspace
|
||||
};
|
||||
}
|
||||
|
||||
List<FunctionModel> getFunctions(DeviceType type) =>
|
||||
devicesFunctionsMap[productType] ?? [];
|
||||
}
|
||||
|
||||
class DeviceSubspace {
|
||||
String? uuid;
|
||||
DateTime? createdAt;
|
||||
DateTime? updatedAt;
|
||||
String? subspaceName;
|
||||
bool? disabled;
|
||||
|
||||
DeviceSubspace({
|
||||
this.uuid,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.subspaceName,
|
||||
this.disabled,
|
||||
});
|
||||
|
||||
factory DeviceSubspace.fromJson(Map<String, dynamic> json) {
|
||||
return DeviceSubspace(
|
||||
uuid: json['uuid'],
|
||||
createdAt: json['createdAt'] != null
|
||||
? DateTime.tryParse(json['createdAt'])
|
||||
: null,
|
||||
updatedAt: json['updatedAt'] != null
|
||||
? DateTime.tryParse(json['updatedAt'])
|
||||
: null,
|
||||
subspaceName: json['subspaceName'],
|
||||
disabled: json['disabled'],
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'uuid': uuid,
|
||||
'createdAt': createdAt?.toIso8601String(),
|
||||
'updatedAt': updatedAt?.toIso8601String(),
|
||||
'subspaceName': subspaceName,
|
||||
'disabled': disabled,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user