WIP #266 Card parsing proper error handling and toString for some fields

This commit is contained in:
Yegor Vialov
2019-01-25 22:41:26 +02:00
parent 09199d30e8
commit e82ba60c4e

View File

@ -428,66 +428,77 @@ class HomeAssistant {
List<HACard> _createLovelaceCards(List rawCards) { List<HACard> _createLovelaceCards(List rawCards) {
List<HACard> result = []; List<HACard> result = [];
rawCards.forEach((rawCard){ rawCards.forEach((rawCard){
bool isThereCardOptionsInside = rawCard["card"] != null; try {
HACard card = HACard( bool isThereCardOptionsInside = rawCard["card"] != null;
id: "card", HACard card = HACard(
name: isThereCardOptionsInside ? rawCard["card"]["title"] ?? rawCard["card"]["name"] : rawCard["title"] ?? rawCard["name"], id: "card",
type: isThereCardOptionsInside ? rawCard["card"]['type'] : rawCard['type'], name: isThereCardOptionsInside ? rawCard["card"]["title"] ??
columnsCount: isThereCardOptionsInside ? rawCard["card"]['columns'] ?? 4 : rawCard['columns'] ?? 4, rawCard["card"]["name"] : rawCard["title"] ?? rawCard["name"],
showName: isThereCardOptionsInside ? rawCard["card"]['show_name'] ?? true : rawCard['show_name'] ?? true, type: isThereCardOptionsInside
showState: isThereCardOptionsInside ? rawCard["card"]['show_state'] ?? true : rawCard['show_state'] ?? true, ? rawCard["card"]['type']
showEmpty: rawCard['show_empty'] ?? true, : rawCard['type'],
stateFilter: rawCard['state_filter'] ?? [], columnsCount: isThereCardOptionsInside
content: rawCard['content'] ? rawCard["card"]['columns'] ?? 4
); : rawCard['columns'] ?? 4,
if (rawCard["cards"] != null) { showName: isThereCardOptionsInside ? rawCard["card"]['show_name'] ??
card.childCards = _createLovelaceCards(rawCard["cards"]); true : rawCard['show_name'] ?? true,
} showState: isThereCardOptionsInside
rawCard["entities"]?.forEach((rawEntity) { ? rawCard["card"]['show_state'] ?? true
if (rawEntity is String) { : rawCard['show_state'] ?? true,
if (entities.isExist(rawEntity)) { showEmpty: rawCard['show_empty'] ?? true,
card.entities.add(EntityWrapper(entity: entities.get(rawEntity))); stateFilter: rawCard['state_filter'] ?? [],
content: rawCard['content']
);
if (rawCard["cards"] != null) {
card.childCards = _createLovelaceCards(rawCard["cards"]);
}
rawCard["entities"]?.forEach((rawEntity) {
if (rawEntity is String) {
if (entities.isExist(rawEntity)) {
card.entities.add(EntityWrapper(entity: entities.get(rawEntity)));
}
} else {
if (entities.isExist(rawEntity["entity"])) {
Entity e = entities.get(rawEntity["entity"]);
card.entities.add(
EntityWrapper(
entity: e,
displayName: rawEntity["name"].toString(),
icon: rawEntity["icon"].toString(),
uiAction: EntityUIAction(rawEntityData: rawEntity)
)
);
}
} }
} else { });
if (entities.isExist(rawEntity["entity"])) { if (rawCard["entity"] != null) {
Entity e = entities.get(rawEntity["entity"]); var en = rawCard["entity"];
card.entities.add( if (en is String) {
EntityWrapper( if (entities.isExist(en)) {
entity: e, Entity e = entities.get(en);
displayName: rawEntity["name"], card.linkedEntityWrapper = EntityWrapper(
icon: rawEntity["icon"], entity: e,
uiAction: EntityUIAction(rawEntityData: rawEntity) icon: rawCard["icon"].toString(),
) displayName: rawCard["name"].toString(),
); uiAction: EntityUIAction(rawEntityData: rawCard)
);
}
} else {
if (entities.isExist(en["entity"])) {
Entity e = entities.get(en["entity"]);
card.linkedEntityWrapper = EntityWrapper(
entity: e,
icon: en["icon"].toString(),
displayName: en["name"].toString(),
uiAction: EntityUIAction(rawEntityData: rawCard)
);
}
} }
} }
}); result.add(card);
if (rawCard["entity"] != null) { } catch (e) {
var en = rawCard["entity"]; Logger.e("There was an error parsing card: ${e.toString()}");
if (en is String) {
if (entities.isExist(en)) {
Entity e = entities.get(en);
card.linkedEntityWrapper = EntityWrapper(
entity: e,
icon: rawCard["icon"],
displayName: rawCard["name"],
uiAction: EntityUIAction(rawEntityData: rawCard)
);
}
} else {
if (entities.isExist(en["entity"])) {
Entity e = entities.get(en["entity"]);
card.linkedEntityWrapper = EntityWrapper(
entity: e,
icon: en["icon"],
displayName: en["name"],
uiAction: EntityUIAction(rawEntityData: rawCard)
);
}
}
} }
result.add(card);
}); });
return result; return result;
} }