Fix #77 Skip non existing entities in view

This commit is contained in:
estevez 2018-09-24 20:28:17 +03:00
parent 94f43ded6f
commit 94bcc30421

View File

@ -272,57 +272,64 @@ class HassioDataModel {
int viewCounter = 0; int viewCounter = 0;
uiGroups.forEach((viewId) { //Each view uiGroups.forEach((viewId) { //Each view
try { try {
Map viewGroupStructure = {}; Map viewStructure = {};
viewCounter += 1; viewCounter += 1;
var viewGroup = _entitiesData[viewId]; var viewGroupData = _entitiesData[viewId];
if (viewGroup != null) { if ((viewGroupData != null) && (viewGroupData["attributes"] != null)) {
viewGroupStructure["groups"] = {}; viewStructure["groups"] = {};
viewGroupStructure["state"] = "on"; viewStructure["state"] = "on";
viewGroupStructure["entity_id"] = viewGroup["entity_id"]; viewStructure["entity_id"] = viewGroupData["entity_id"];
viewGroupStructure["badges"] = {"children": []}; viewStructure["badges"] = {"children": []};
viewGroupStructure["attributes"] = viewGroup["attributes"] != null ? { viewStructure["attributes"] = {
"icon": viewGroup["attributes"]["icon"] "icon": viewGroupData["attributes"]["icon"]
} : {"icon": "none"}; };
viewGroupData["attributes"]["entity_id"].forEach((
viewGroup["attributes"]["entity_id"].forEach((
entityId) { //Each entity or group in view entityId) { //Each entity or group in view
Map newGroup = {}; Map newGroup = {};
String domain = _entitiesData[entityId]["domain"]; if (_entitiesData[entityId] != null) {
if (domain != "group") { Map cardOrEntityData = _entitiesData[entityId];
if (_topBadgeDomains.contains(domain)) { String domain = cardOrEntityData["domain"];
viewGroupStructure["badges"]["children"].add(entityId); if (domain != "group") {
} else { if (_topBadgeDomains.contains(domain)) {
String autoGroupID = "$domain.$domain$viewCounter"; viewStructure["badges"]["children"].add(entityId);
if (viewGroupStructure["groups"]["$autoGroupID"] == null) {
newGroup["entity_id"] = "$domain.$domain$viewCounter";
newGroup["friendly_name"] = "$domain";
newGroup["children"] = [];
newGroup["children"].add(entityId);
viewGroupStructure["groups"]["$autoGroupID"] =
Map.from(newGroup);
} else { } else {
viewGroupStructure["groups"]["$autoGroupID"]["children"].add( String autoGroupID = "$domain.$domain$viewCounter";
entityId); if (viewStructure["groups"]["$autoGroupID"] == null) {
newGroup["entity_id"] = "$domain.$domain$viewCounter";
newGroup["friendly_name"] = "$domain";
newGroup["children"] = [];
newGroup["children"].add(entityId);
viewStructure["groups"]["$autoGroupID"] =
Map.from(newGroup);
} else {
viewStructure["groups"]["$autoGroupID"]["children"].add(
entityId);
}
} }
} else {
newGroup["entity_id"] = entityId;
newGroup["friendly_name"] =
(cardOrEntityData['attributes'] != null)
? (cardOrEntityData['attributes']['friendly_name'] ??
"")
: "";
newGroup["children"] = List<String>();
cardOrEntityData["attributes"]["entity_id"].forEach((
groupedEntityId) {
newGroup["children"].add(groupedEntityId);
});
viewStructure["groups"]["$entityId"] = Map.from(newGroup);
} }
} else { } else {
newGroup["entity_id"] = entityId; TheLogger.log("Warning", "Unknown entity inside view: $entityId");
newGroup["friendly_name"] =
(_entitiesData[entityId]['attributes'] != null)
? (_entitiesData[entityId]['attributes']['friendly_name'] ??
"")
: "";
newGroup["children"] = List<String>();
_entitiesData[entityId]["attributes"]["entity_id"].forEach((
groupedEntityId) {
newGroup["children"].add(groupedEntityId);
});
viewGroupStructure["groups"]["$entityId"] = Map.from(newGroup);
} }
}); });
_uiStructure[viewId.split(".")[1]] = viewStructure;
} else {
TheLogger.log("Warning", "No state or attributes found for view: $viewId");
} }
_uiStructure[viewId.split(".")[1]] = viewGroupStructure;
} catch (error) { } catch (error) {
TheLogger.log("Error","Error parsing view: $viewId"); TheLogger.log("Error","Error parsing view: $viewId");
} }