Still #154 default view
This commit is contained in:
		| @@ -3,21 +3,21 @@ part of 'main.dart'; | ||||
| class EntityCollection { | ||||
|  | ||||
|   Map<String, Entity> _allEntities; | ||||
|   Map<String, Entity> views; | ||||
|   //Map<String, Entity> views; | ||||
|  | ||||
|   bool get isEmpty => _allEntities.isEmpty; | ||||
|   List<Entity> 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; | ||||
|       } | ||||
|       }*/ | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -79,7 +79,6 @@ class NewViewWidgetState extends State<NewViewWidget> { | ||||
|  | ||||
|   @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<Widget> 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), | ||||
|   | ||||
| @@ -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<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); | ||||
|       _createView(view, viewEntity.childEntities, viewCounter); | ||||
|       ui.views.add( | ||||
|         view | ||||
|       ); | ||||
| @@ -421,6 +403,41 @@ class HomeAssistant { | ||||
|     _statesCompleter.complete(); | ||||
|   } | ||||
|  | ||||
|   void _createView(HACView view, List<Entity> childEntities, int viewCounter) { | ||||
|     List<HACCard> 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); | ||||
|   | ||||
| @@ -85,7 +85,7 @@ class _MainPageState extends State<MainPage> 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<MainPage> with WidgetsBindingObserver { | ||||
|  | ||||
|   _subscribe() { | ||||
|     if (_stateSubscription == null) { | ||||
|       //TODO Move to homeAssistant or remove | ||||
|       _stateSubscription = eventBus.on<StateChangedEvent>().listen((event) { | ||||
|         setState(() { | ||||
|           if (event.localChange) { | ||||
| @@ -203,8 +204,8 @@ class _MainPageState extends State<MainPage> 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<MainPage> with WidgetsBindingObserver { | ||||
|  | ||||
|   List<Tab> buildUIViewTabs() { | ||||
|     List<Tab> 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<MainPage> 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) | ||||
|       ); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user