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 {
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;
}
}*/
});
}

View File

@ -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),

View File

@ -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);

View File

@ -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)
);
}