Still #154 default view

This commit is contained in:
Yegor Vialov 2018-10-25 00:54:20 +03:00
parent 88cfcb4382
commit 4e955e98d8
4 changed files with 82 additions and 67 deletions

View File

@ -3,21 +3,21 @@ part of 'main.dart';
class EntityCollection { class EntityCollection {
Map<String, Entity> _allEntities; Map<String, Entity> _allEntities;
Map<String, Entity> views; //Map<String, Entity> views;
bool get isEmpty => _allEntities.isEmpty; bool get isEmpty => _allEntities.isEmpty;
List<Entity> get viewEntities => _allEntities.values.where((entity) => entity.isView).toList(); List<Entity> get viewEntities => _allEntities.values.where((entity) => entity.isView).toList();
EntityCollection() { EntityCollection() {
_allEntities = {}; _allEntities = {};
views = {}; //views = {};
} }
bool get hasDefaultView => _allEntities.keys.contains("group.default_view"); bool get hasDefaultView => _allEntities.keys.contains("group.default_view");
void parse(List rawData) { void parse(List rawData) {
_allEntities.clear(); _allEntities.clear();
views.clear(); //views.clear();
TheLogger.log("Debug","Parsing ${rawData.length} Home Assistant entities"); TheLogger.log("Debug","Parsing ${rawData.length} Home Assistant entities");
rawData.forEach((rawEntityData) { rawData.forEach((rawEntityData) {
@ -27,9 +27,9 @@ class EntityCollection {
if ((entity.isGroup) && (entity.childEntityIds != null)) { if ((entity.isGroup) && (entity.childEntityIds != null)) {
entity.childEntities = getAll(entity.childEntityIds); entity.childEntities = getAll(entity.childEntityIds);
} }
if (entity.isView) { /*if (entity.isView) {
views[entityId] = entity; views[entityId] = entity;
} }*/
}); });
} }

View File

@ -79,7 +79,6 @@ class NewViewWidgetState extends State<NewViewWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
TheLogger.log("Debug", "--Building view ${widget.view.id}");
return RefreshIndicator( return RefreshIndicator(
color: Colors.amber, color: Colors.amber,
child: ListView( child: ListView(
@ -173,7 +172,6 @@ class NewCardWidget extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
TheLogger.log("Debug", "----Building card ${card.id}");
if ((card.linkedEntity!= null) && (card.linkedEntity.isHidden)) { if ((card.linkedEntity!= null) && (card.linkedEntity.isHidden)) {
return Container(width: 0.0, height: 0.0,); return Container(width: 0.0, height: 0.0,);
} }
@ -189,9 +187,6 @@ class NewCardWidget extends StatelessWidget {
var result; var result;
if ((card.name != null) && (card.name.trim().length > 0)) { if ((card.name != null) && (card.name.trim().length > 0)) {
result = new ListTile( result = new ListTile(
//leading: const Icon(Icons.device_hub),
//subtitle: Text(".."),
//trailing: Text("${data["state"]}"),
title: Text("${card.name}", title: Text("${card.name}",
textAlign: TextAlign.left, textAlign: TextAlign.left,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
@ -207,7 +202,6 @@ class NewCardWidget extends StatelessWidget {
List<Widget> result = []; List<Widget> result = [];
card.entities.forEach((Entity entity) { card.entities.forEach((Entity entity) {
if (!entity.isHidden) { if (!entity.isHidden) {
TheLogger.log("Debug", "------entity ${entity.entityId}");
result.add( result.add(
Padding( Padding(
padding: EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 10.0), padding: EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 10.0),

View File

@ -38,7 +38,7 @@ class HomeAssistant {
String get locationName => _instanceConfig["location_name"] ?? ""; String get locationName => _instanceConfig["location_name"] ?? "";
String get userName => _userName ?? locationName; String get userName => _userName ?? locationName;
String get userAvatarText => userName.length > 0 ? userName[0] : ""; String get userAvatarText => userName.length > 0 ? userName[0] : "";
int get viewsCount => entities.views.length ?? 0; //int get viewsCount => entities.views.length ?? 0;
HomeAssistant() { HomeAssistant() {
entities = EntityCollection(); entities = EntityCollection();
@ -371,6 +371,19 @@ class HomeAssistant {
ui = GroupBasedUI(); ui = GroupBasedUI();
int viewCounter = 0; int viewCounter = 0;
//TODO add default_view //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) { entities.viewEntities.forEach((viewEntity) {
TheLogger.log("Debug","--View: ${viewEntity.entityId}"); TheLogger.log("Debug","--View: ${viewEntity.entityId}");
HACView view = HACView( HACView view = HACView(
@ -379,8 +392,20 @@ class HomeAssistant {
name: viewEntity.displayName name: viewEntity.displayName
); );
view.linkedEntity = viewEntity; view.linkedEntity = viewEntity;
_createView(view, viewEntity.childEntities, viewCounter);
ui.views.add(
view
);
viewCounter += 1;
});
_statesCompleter.complete();
}
void _createView(HACView view, List<Entity> childEntities, int viewCounter) {
List<HACCard> autoGeneratedCards = []; List<HACCard> autoGeneratedCards = [];
viewEntity.childEntities.forEach((entity) { childEntities.forEach((entity) {
if (entity.isBadge) { if (entity.isBadge) {
view.badges.add(entity); view.badges.add(entity);
TheLogger.log("Debug","----Badge: ${entity.entityId}"); TheLogger.log("Debug","----Badge: ${entity.entityId}");
@ -411,14 +436,6 @@ class HomeAssistant {
} }
}); });
view.cards.addAll(autoGeneratedCards); view.cards.addAll(autoGeneratedCards);
ui.views.add(
view
);
viewCounter += 1;
});
_statesCompleter.complete();
} }
Widget buildViews(BuildContext context) { Widget buildViews(BuildContext context) {

View File

@ -85,7 +85,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver {
String _webSocketApiEndpoint; String _webSocketApiEndpoint;
String _password; String _password;
String _authType; String _authType;
int _uiViewsCount = 0; //int _uiViewsCount = 0;
String _instanceHost; String _instanceHost;
StreamSubscription _stateSubscription; StreamSubscription _stateSubscription;
StreamSubscription _settingsSubscription; StreamSubscription _settingsSubscription;
@ -155,6 +155,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver {
_subscribe() { _subscribe() {
if (_stateSubscription == null) { if (_stateSubscription == null) {
//TODO Move to homeAssistant or remove
_stateSubscription = eventBus.on<StateChangedEvent>().listen((event) { _stateSubscription = eventBus.on<StateChangedEvent>().listen((event) {
setState(() { setState(() {
if (event.localChange) { if (event.localChange) {
@ -203,8 +204,8 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver {
setState(() { setState(() {
//_instanceConfig = _homeAssistant.instanceConfig; //_instanceConfig = _homeAssistant.instanceConfig;
_entities = _homeAssistant.entities; _entities = _homeAssistant.entities;
_uiViewsCount = _homeAssistant.viewsCount; //_uiViewsCount = _homeAssistant.viewsCount;
TheLogger.log("Debug","_uiViewsCount=$_uiViewsCount"); //TheLogger.log("Debug","_uiViewsCount=$_uiViewsCount");
_isLoading = 0; _isLoading = 0;
}); });
}).catchError((e) { }).catchError((e) {
@ -238,8 +239,9 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver {
List<Tab> buildUIViewTabs() { List<Tab> buildUIViewTabs() {
List<Tab> result = []; List<Tab> result = [];
if (!_entities.isEmpty) { if (_homeAssistant.ui.views.isNotEmpty) {
if (!_entities.hasDefaultView) { _homeAssistant.ui.views.forEach((HACView view) {
if (view.linkedEntity == null) {
result.add( result.add(
Tab( Tab(
icon: icon:
@ -249,17 +251,19 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver {
) )
) )
); );
} } else {
_entities.views.forEach((viewId, groupEntity) {
result.add( result.add(
Tab( Tab(
icon: MaterialDesignIcons.createIconWidgetFromEntityData(groupEntity, 24.0, null) ?? icon: MaterialDesignIcons.createIconWidgetFromEntityData(
view.linkedEntity, 24.0, null) ??
Icon( Icon(
MaterialDesignIcons.createIconDataFromIconName("mdi:home-assistant"), MaterialDesignIcons.createIconDataFromIconName(
"mdi:home-assistant"),
size: 24.0, size: 24.0,
) )
) )
); );
}
}); });
} }
return result; return result;
@ -475,11 +479,11 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// This method is rerun every time setState is called. // This method is rerun every time setState is called.
if (_entities == null) { if (_homeAssistant.entities.isEmpty) {
return _buildScaffold(true); return _buildScaffold(true);
} else { } else {
return DefaultTabController( return DefaultTabController(
length: _uiViewsCount, length: _homeAssistant.ui.views.length,
child: _buildScaffold(false) child: _buildScaffold(false)
); );
} }