Initial UI generation if no lovelace config
This commit is contained in:
parent
d8df32f140
commit
d0b7cc1929
@ -152,39 +152,12 @@ class EntityCollection {
|
|||||||
return _allEntities[entityId] != null;
|
return _allEntities[entityId] != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Entity> getByDomains({List<String> domains, List<String> stateFiler}) {
|
List<Entity> getByDomains({List<String> includeDomains: const [], List<String> excludeDomains: const [], List<String> stateFiler}) {
|
||||||
return _allEntities.values.where((entity) {
|
return _allEntities.values.where((entity) {
|
||||||
return domains.contains(entity.domain) &&
|
return
|
||||||
|
(excludeDomains.isEmpty || !excludeDomains.contains(entity.domain)) &&
|
||||||
|
(includeDomains.isEmpty || includeDomains.contains(entity.domain)) &&
|
||||||
((stateFiler != null && stateFiler.contains(entity.state)) || stateFiler == null);
|
((stateFiler != null && stateFiler.contains(entity.state)) || stateFiler == null);
|
||||||
}).toList();
|
}).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Entity> filterEntitiesForDefaultView() {
|
|
||||||
List<Entity> result = [];
|
|
||||||
List<Entity> groups = [];
|
|
||||||
List<Entity> 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;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -37,9 +37,9 @@ class HomeAssistant {
|
|||||||
|
|
||||||
String get locationName {
|
String get locationName {
|
||||||
if (!autoUi) {
|
if (!autoUi) {
|
||||||
return ui?.title ?? "";
|
return ui?.title ?? "Home";
|
||||||
} else {
|
} else {
|
||||||
return _instanceConfig["location_name"] ?? "";
|
return _instanceConfig["location_name"] ?? "Home";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String get userName => _userName ?? locationName;
|
String get userName => _userName ?? locationName;
|
||||||
@ -202,6 +202,7 @@ class HomeAssistant {
|
|||||||
}).catchError((e) {
|
}).catchError((e) {
|
||||||
if ("$e" == "config_not_found") {
|
if ("$e" == "config_not_found") {
|
||||||
autoUi = true;
|
autoUi = true;
|
||||||
|
_rawLovelaceData = null;
|
||||||
completer.complete();
|
completer.complete();
|
||||||
} else {
|
} else {
|
||||||
completer.completeError(HAError("Error getting lovelace config: $e"));
|
completer.completeError(HAError("Error getting lovelace config: $e"));
|
||||||
@ -324,9 +325,8 @@ class HomeAssistant {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _createUI() {
|
void _createUI() {
|
||||||
if (!autoUi && (_rawLovelaceData != null)) {
|
|
||||||
Logger.d("Creating Lovelace UI");
|
Logger.d("Creating Lovelace UI");
|
||||||
ui = HomeAssistantUI(_rawLovelaceData);
|
ui = HomeAssistantUI(rawLovelaceConfig: _rawLovelaceData);
|
||||||
if (isServiceExist('zha_map')) {
|
if (isServiceExist('zha_map')) {
|
||||||
panels.add(
|
panels.add(
|
||||||
Panel(
|
Panel(
|
||||||
@ -338,9 +338,6 @@ class HomeAssistant {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
Logger.e("No lovelace config!!!!");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -636,7 +636,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
|
|||||||
Widget mediaMenuIcon;
|
Widget mediaMenuIcon;
|
||||||
int playersCount = 0;
|
int playersCount = 0;
|
||||||
if (!empty && !HomeAssistant().entities.isEmpty) {
|
if (!empty && !HomeAssistant().entities.isEmpty) {
|
||||||
List<Entity> activePlayers = HomeAssistant().entities.getByDomains(domains: ["media_player"], stateFiler: [EntityState.paused, EntityState.playing, EntityState.idle]);
|
List<Entity> activePlayers = HomeAssistant().entities.getByDomains(includeDomains: ["media_player"], stateFiler: [EntityState.paused, EntityState.playing, EntityState.idle]);
|
||||||
playersCount = activePlayers.length;
|
playersCount = activePlayers.length;
|
||||||
mediaMenuItems.addAll(
|
mediaMenuItems.addAll(
|
||||||
activePlayers.map((entity) => PopupMenuItem<String>(
|
activePlayers.map((entity) => PopupMenuItem<String>(
|
||||||
|
@ -59,7 +59,7 @@ class _PlayMediaPageState extends State<PlayMediaPage> {
|
|||||||
} else {
|
} else {
|
||||||
_isMediaExtractorExist = HomeAssistant().isServiceExist("media_extractor");
|
_isMediaExtractorExist = HomeAssistant().isServiceExist("media_extractor");
|
||||||
//_useMediaExtractor = _isMediaExtractorExist;
|
//_useMediaExtractor = _isMediaExtractorExist;
|
||||||
_players = HomeAssistant().entities.getByDomains(domains: ["media_player"]);
|
_players = HomeAssistant().entities.getByDomains(includeDomains: ["media_player"]);
|
||||||
setState(() {
|
setState(() {
|
||||||
if (_players.isNotEmpty) {
|
if (_players.isNotEmpty) {
|
||||||
_loaded = true;
|
_loaded = true;
|
||||||
|
17
lib/ui.dart
17
lib/ui.dart
@ -33,7 +33,22 @@ class HomeAssistantUI {
|
|||||||
Map result = {};
|
Map result = {};
|
||||||
result['title'] = 'Home';
|
result['title'] = 'Home';
|
||||||
result['views'] = [
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -17,15 +17,21 @@ class ViewWidget extends StatelessWidget {
|
|||||||
child: _buildPanelChild(context),
|
child: _buildPanelChild(context),
|
||||||
);
|
);
|
||||||
} else {
|
} 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(
|
return ListView(
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
padding: EdgeInsets.all(0),
|
padding: EdgeInsets.all(0),
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
_buildBadges(context),
|
_buildBadges(context),
|
||||||
DynamicMultiColumnLayout(
|
cardsContainer
|
||||||
minColumnWidth: Sizes.minViewColumnWidth,
|
|
||||||
children: this.view.cards.map((card) => card.build(context)).toList(),
|
|
||||||
)
|
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user