Still #154 default view
This commit is contained in:
parent
88cfcb4382
commit
4e955e98d8
@ -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;
|
||||||
}
|
}*/
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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),
|
||||||
|
@ -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) {
|
||||||
|
@ -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)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user