diff --git a/lib/entity_collection.class.dart b/lib/entity_collection.class.dart index 54cae1d..8480b83 100644 --- a/lib/entity_collection.class.dart +++ b/lib/entity_collection.class.dart @@ -152,39 +152,12 @@ class EntityCollection { return _allEntities[entityId] != null; } - List getByDomains({List domains, List stateFiler}) { + List getByDomains({List includeDomains: const [], List excludeDomains: const [], List stateFiler}) { return _allEntities.values.where((entity) { - return domains.contains(entity.domain) && - ((stateFiler != null && stateFiler.contains(entity.state)) || stateFiler == null); + return + (excludeDomains.isEmpty || !excludeDomains.contains(entity.domain)) && + (includeDomains.isEmpty || includeDomains.contains(entity.domain)) && + ((stateFiler != null && stateFiler.contains(entity.state)) || stateFiler == null); }).toList(); } - - List filterEntitiesForDefaultView() { - List result = []; - List groups = []; - List nonGroupEntities = []; - _allEntities.forEach((id, entity){ - if (entity.isGroup && (entity.attributes['auto'] == null || (entity.attributes['auto'] && !entity.isHidden)) && (!entity.isView)) { - groups.add(entity); - } - if (!entity.isGroup) { - nonGroupEntities.add(entity); - } - }); - - nonGroupEntities.forEach((entity) { - bool foundInGroup = false; - groups.forEach((groupEntity) { - if (groupEntity.childEntityIds.contains(entity.entityId)) { - foundInGroup = true; - } - }); - if (!foundInGroup) { - result.add(entity); - } - }); - result.insertAll(0, groups); - - return result; - } } \ No newline at end of file diff --git a/lib/home_assistant.class.dart b/lib/home_assistant.class.dart index 62794ac..961a93b 100644 --- a/lib/home_assistant.class.dart +++ b/lib/home_assistant.class.dart @@ -37,9 +37,9 @@ class HomeAssistant { String get locationName { if (!autoUi) { - return ui?.title ?? ""; + return ui?.title ?? "Home"; } else { - return _instanceConfig["location_name"] ?? ""; + return _instanceConfig["location_name"] ?? "Home"; } } String get userName => _userName ?? locationName; @@ -202,6 +202,7 @@ class HomeAssistant { }).catchError((e) { if ("$e" == "config_not_found") { autoUi = true; + _rawLovelaceData = null; completer.complete(); } else { completer.completeError(HAError("Error getting lovelace config: $e")); @@ -324,22 +325,18 @@ class HomeAssistant { } void _createUI() { - if (!autoUi && (_rawLovelaceData != null)) { - Logger.d("Creating Lovelace UI"); - ui = HomeAssistantUI(_rawLovelaceData); - if (isServiceExist('zha_map')) { - panels.add( - Panel( - id: 'haclient_zha', - componentName: 'haclient_zha', - title: 'ZHA', - urlPath: '/haclient_zha', - icon: 'mdi:zigbee' - ) - ); - } - } else { - Logger.e("No lovelace config!!!!"); + Logger.d("Creating Lovelace UI"); + ui = HomeAssistantUI(rawLovelaceConfig: _rawLovelaceData); + if (isServiceExist('zha_map')) { + panels.add( + Panel( + id: 'haclient_zha', + componentName: 'haclient_zha', + title: 'ZHA', + urlPath: '/haclient_zha', + icon: 'mdi:zigbee' + ) + ); } } } diff --git a/lib/pages/main/main.page.dart b/lib/pages/main/main.page.dart index ef34eb0..6c4c01f 100644 --- a/lib/pages/main/main.page.dart +++ b/lib/pages/main/main.page.dart @@ -636,7 +636,7 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker Widget mediaMenuIcon; int playersCount = 0; if (!empty && !HomeAssistant().entities.isEmpty) { - List activePlayers = HomeAssistant().entities.getByDomains(domains: ["media_player"], stateFiler: [EntityState.paused, EntityState.playing, EntityState.idle]); + List activePlayers = HomeAssistant().entities.getByDomains(includeDomains: ["media_player"], stateFiler: [EntityState.paused, EntityState.playing, EntityState.idle]); playersCount = activePlayers.length; mediaMenuItems.addAll( activePlayers.map((entity) => PopupMenuItem( diff --git a/lib/pages/play_media.page.dart b/lib/pages/play_media.page.dart index e87d23e..e1c170d 100644 --- a/lib/pages/play_media.page.dart +++ b/lib/pages/play_media.page.dart @@ -59,7 +59,7 @@ class _PlayMediaPageState extends State { } else { _isMediaExtractorExist = HomeAssistant().isServiceExist("media_extractor"); //_useMediaExtractor = _isMediaExtractorExist; - _players = HomeAssistant().entities.getByDomains(domains: ["media_player"]); + _players = HomeAssistant().entities.getByDomains(includeDomains: ["media_player"]); setState(() { if (_players.isNotEmpty) { _loaded = true; diff --git a/lib/ui.dart b/lib/ui.dart index 292138f..277556d 100644 --- a/lib/ui.dart +++ b/lib/ui.dart @@ -33,7 +33,22 @@ class HomeAssistantUI { Map result = {}; result['title'] = 'Home'; result['views'] = [ - + { + 'icon': 'mdi:home', + 'badges': HomeAssistant().entities.getByDomains( + includeDomains: ['sensor', 'binary_sensor', 'device_tracker', 'person', 'sun'] + ).map( + (en) => en.entityId + ).toList(), + 'cards': [{ + 'type': 'entities', + 'entities': HomeAssistant().entities.getByDomains( + excludeDomains: ['sensor','binary_sensor', 'device_tracker', 'person', 'sun'] + ).map( + (en) => en.entityId + ).toList() + }] + } ]; return result; } diff --git a/lib/viewWidget.widget.dart b/lib/viewWidget.widget.dart index 8c78023..61bb93d 100644 --- a/lib/viewWidget.widget.dart +++ b/lib/viewWidget.widget.dart @@ -17,15 +17,21 @@ class ViewWidget extends StatelessWidget { child: _buildPanelChild(context), ); } else { + Widget cardsContainer; + if (this.view.cards.isNotEmpty) { + cardsContainer = DynamicMultiColumnLayout( + minColumnWidth: Sizes.minViewColumnWidth, + children: this.view.cards.map((card) => card.build(context)).toList(), + ); + } else { + cardsContainer = Container(); + } return ListView( shrinkWrap: true, padding: EdgeInsets.all(0), children: [ _buildBadges(context), - DynamicMultiColumnLayout( - minColumnWidth: Sizes.minViewColumnWidth, - children: this.view.cards.map((card) => card.build(context)).toList(), - ) + cardsContainer ] ); }