Resolves #154 UI building refactoring

This commit is contained in:
Yegor Vialov
2018-10-25 00:05:29 +03:00
parent 24d071e2f8
commit 5338e45ddc
10 changed files with 295 additions and 347 deletions

View File

@ -14,8 +14,8 @@ class HomeAssistant {
int _subscriptionMessageId = 0;
int _configMessageId = 0;
int _userInfoMessageId = 0;
EntityCollection _entities;
ViewBuilder _viewBuilder;
EntityCollection entities;
GroupBasedUI ui;
Map _instanceConfig = {};
String _userName;
@ -38,12 +38,10 @@ class HomeAssistant {
String get locationName => _instanceConfig["location_name"] ?? "";
String get userName => _userName ?? locationName;
String get userAvatarText => userName.length > 0 ? userName[0] : "";
int get viewsCount => _entities.views.length ?? 0;
EntityCollection get entities => _entities;
int get viewsCount => entities.views.length ?? 0;
HomeAssistant() {
_entities = EntityCollection();
entities = EntityCollection();
_messageQueue = SendMessageQueue(messageExpirationTime);
}
@ -314,7 +312,7 @@ class HomeAssistant {
void _handleEntityStateChange(Map eventData) {
//TheLogger.log("Debug", "New state for ${eventData['entity_id']}");
Map data = Map.from(eventData);
_entities.updateState(data);
entities.updateState(data);
eventBus.fire(new StateChangedEvent(data["entity_id"], null, false));
}
@ -367,13 +365,65 @@ class HomeAssistant {
_statesCompleter.completeError({"errorCode": 3, "errorMessage": response["error"]["message"]});
return;
}
_entities.parse(response["result"]);
_viewBuilder = ViewBuilder(entityCollection: _entities);
entities.parse(response["result"]);
ui = GroupBasedUI();
int viewCounter = 0;
//TODO add default_view
entities.viewEntities.forEach((viewEntity) {
TheLogger.log("Debug","--View: ${viewEntity.entityId}");
HACView view = HACView(
count: viewCounter,
id: viewEntity.entityId,
name: viewEntity.displayName
);
view.linkedEntity = viewEntity;
List<HACCard> autoGeneratedCards = [];
viewEntity.childEntities.forEach((entity) {
if (entity.isBadge) {
view.badges.add(entity);
TheLogger.log("Debug","----Badge: ${entity.entityId}");
} else {
if (!entity.isGroup) {
String groupIdToAdd = "${entity.domain}.${entity.domain}$viewCounter";
if (autoGeneratedCards.every((HACCard card) => card.id != groupIdToAdd )) {
HACCard card = HACCard(
id: groupIdToAdd,
name: entity.domain
);
TheLogger.log("Debug","----Creating card: $groupIdToAdd");
card.entities.add(entity);
autoGeneratedCards.add(card);
} else {
autoGeneratedCards.firstWhere((card) => card.id == groupIdToAdd).entities.add(entity);
}
} else {
TheLogger.log("Debug","----Card: ${entity.entityId}");
HACCard card = HACCard(
name: entity.displayName,
id: entity.entityId,
linkedEntity: entity
);
card.entities.addAll(entity.childEntities);
view.cards.add(card);
}
}
});
view.cards.addAll(autoGeneratedCards);
ui.views.add(
view
);
viewCounter += 1;
});
_statesCompleter.complete();
}
Widget buildViews(BuildContext context) {
return _viewBuilder.buildWidget(context);
//return _viewBuilder.buildWidget(context);
return ui.build(context);
}
Future<List> getHistory(String entityId) async {