From 4e955e98d8ced18adc61a272a8d06f74d95e4674 Mon Sep 17 00:00:00 2001 From: Yegor Vialov Date: Thu, 25 Oct 2018 00:54:20 +0300 Subject: [PATCH] Still #154 default view --- lib/entity_collection.class.dart | 10 ++-- lib/group_based_ui.dart | 6 --- lib/home_assistant.class.dart | 83 +++++++++++++++++++------------- lib/main.dart | 50 ++++++++++--------- 4 files changed, 82 insertions(+), 67 deletions(-) diff --git a/lib/entity_collection.class.dart b/lib/entity_collection.class.dart index c01c49c..95320cf 100644 --- a/lib/entity_collection.class.dart +++ b/lib/entity_collection.class.dart @@ -3,21 +3,21 @@ part of 'main.dart'; class EntityCollection { Map _allEntities; - Map views; + //Map views; bool get isEmpty => _allEntities.isEmpty; List get viewEntities => _allEntities.values.where((entity) => entity.isView).toList(); EntityCollection() { _allEntities = {}; - views = {}; + //views = {}; } bool get hasDefaultView => _allEntities.keys.contains("group.default_view"); void parse(List rawData) { _allEntities.clear(); - views.clear(); + //views.clear(); TheLogger.log("Debug","Parsing ${rawData.length} Home Assistant entities"); rawData.forEach((rawEntityData) { @@ -27,9 +27,9 @@ class EntityCollection { if ((entity.isGroup) && (entity.childEntityIds != null)) { entity.childEntities = getAll(entity.childEntityIds); } - if (entity.isView) { + /*if (entity.isView) { views[entityId] = entity; - } + }*/ }); } diff --git a/lib/group_based_ui.dart b/lib/group_based_ui.dart index 596f2cc..745923f 100644 --- a/lib/group_based_ui.dart +++ b/lib/group_based_ui.dart @@ -79,7 +79,6 @@ class NewViewWidgetState extends State { @override Widget build(BuildContext context) { - TheLogger.log("Debug", "--Building view ${widget.view.id}"); return RefreshIndicator( color: Colors.amber, child: ListView( @@ -173,7 +172,6 @@ class NewCardWidget extends StatelessWidget { @override Widget build(BuildContext context) { - TheLogger.log("Debug", "----Building card ${card.id}"); if ((card.linkedEntity!= null) && (card.linkedEntity.isHidden)) { return Container(width: 0.0, height: 0.0,); } @@ -189,9 +187,6 @@ class NewCardWidget extends StatelessWidget { var result; if ((card.name != null) && (card.name.trim().length > 0)) { result = new ListTile( - //leading: const Icon(Icons.device_hub), - //subtitle: Text(".."), - //trailing: Text("${data["state"]}"), title: Text("${card.name}", textAlign: TextAlign.left, overflow: TextOverflow.ellipsis, @@ -207,7 +202,6 @@ class NewCardWidget extends StatelessWidget { List result = []; card.entities.forEach((Entity entity) { if (!entity.isHidden) { - TheLogger.log("Debug", "------entity ${entity.entityId}"); result.add( Padding( padding: EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 10.0), diff --git a/lib/home_assistant.class.dart b/lib/home_assistant.class.dart index 119d4ea..73d418f 100644 --- a/lib/home_assistant.class.dart +++ b/lib/home_assistant.class.dart @@ -38,7 +38,7 @@ 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; + //int get viewsCount => entities.views.length ?? 0; HomeAssistant() { entities = EntityCollection(); @@ -371,6 +371,19 @@ class HomeAssistant { ui = GroupBasedUI(); int viewCounter = 0; //TODO add default_view + if (!entities.hasDefaultView) { + TheLogger.log("Debug","--Default view"); + HACView view = HACView( + count: viewCounter, + id: "group.default_view", + name: "Home" + ); + _createView(view, entities.filterEntitiesForDefaultView(), viewCounter); + ui.views.add( + view + ); + viewCounter+=1; + } entities.viewEntities.forEach((viewEntity) { TheLogger.log("Debug","--View: ${viewEntity.entityId}"); HACView view = HACView( @@ -379,38 +392,7 @@ class HomeAssistant { name: viewEntity.displayName ); view.linkedEntity = viewEntity; - List 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); + _createView(view, viewEntity.childEntities, viewCounter); ui.views.add( view ); @@ -421,6 +403,41 @@ class HomeAssistant { _statesCompleter.complete(); } + void _createView(HACView view, List childEntities, int viewCounter) { + List autoGeneratedCards = []; + 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); + } + Widget buildViews(BuildContext context) { //return _viewBuilder.buildWidget(context); return ui.build(context); diff --git a/lib/main.dart b/lib/main.dart index 8175caf..fc59324 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -85,7 +85,7 @@ class _MainPageState extends State with WidgetsBindingObserver { String _webSocketApiEndpoint; String _password; String _authType; - int _uiViewsCount = 0; + //int _uiViewsCount = 0; String _instanceHost; StreamSubscription _stateSubscription; StreamSubscription _settingsSubscription; @@ -155,6 +155,7 @@ class _MainPageState extends State with WidgetsBindingObserver { _subscribe() { if (_stateSubscription == null) { + //TODO Move to homeAssistant or remove _stateSubscription = eventBus.on().listen((event) { setState(() { if (event.localChange) { @@ -203,8 +204,8 @@ class _MainPageState extends State with WidgetsBindingObserver { setState(() { //_instanceConfig = _homeAssistant.instanceConfig; _entities = _homeAssistant.entities; - _uiViewsCount = _homeAssistant.viewsCount; - TheLogger.log("Debug","_uiViewsCount=$_uiViewsCount"); + //_uiViewsCount = _homeAssistant.viewsCount; + //TheLogger.log("Debug","_uiViewsCount=$_uiViewsCount"); _isLoading = 0; }); }).catchError((e) { @@ -238,28 +239,31 @@ class _MainPageState extends State with WidgetsBindingObserver { List buildUIViewTabs() { List result = []; - if (!_entities.isEmpty) { - if (!_entities.hasDefaultView) { - result.add( - Tab( - icon: + if (_homeAssistant.ui.views.isNotEmpty) { + _homeAssistant.ui.views.forEach((HACView view) { + if (view.linkedEntity == null) { + result.add( + Tab( + icon: Icon( MaterialDesignIcons.createIconDataFromIconName("mdi:home-assistant"), size: 24.0, ) - ) - ); - } - _entities.views.forEach((viewId, groupEntity) { - result.add( - Tab( - icon: MaterialDesignIcons.createIconWidgetFromEntityData(groupEntity, 24.0, null) ?? - Icon( - MaterialDesignIcons.createIconDataFromIconName("mdi:home-assistant"), - size: 24.0, - ) - ) - ); + ) + ); + } else { + result.add( + Tab( + icon: MaterialDesignIcons.createIconWidgetFromEntityData( + view.linkedEntity, 24.0, null) ?? + Icon( + MaterialDesignIcons.createIconDataFromIconName( + "mdi:home-assistant"), + size: 24.0, + ) + ) + ); + } }); } return result; @@ -475,11 +479,11 @@ class _MainPageState extends State with WidgetsBindingObserver { @override Widget build(BuildContext context) { // This method is rerun every time setState is called. - if (_entities == null) { + if (_homeAssistant.entities.isEmpty) { return _buildScaffold(true); } else { return DefaultTabController( - length: _uiViewsCount, + length: _homeAssistant.ui.views.length, child: _buildScaffold(false) ); }