Resolves #526 Subscribe to Lovelace update events

This commit is contained in:
Yegor Vialov 2020-03-19 23:16:59 +00:00
parent a3548455eb
commit 5ced01463f
3 changed files with 26 additions and 1 deletions

View File

@ -49,6 +49,7 @@ class HomeAssistant {
HomeAssistant._internal() {
ConnectionManager().onStateChangeCallback = _handleEntityStateChange;
ConnectionManager().onLovelaceUpdatedCallback = _handleLovelaceUpdate;
DeviceInfoManager().loadDeviceInfo();
}
@ -296,6 +297,14 @@ class HomeAssistant {
return completer.future;
}
void _handleLovelaceUpdate() {
if (_fetchCompleter != null && _fetchCompleter.isCompleted) {
eventBus.fire(new StateChangedEvent(
needToRebuildUI: true
));
}
}
void _handleEntityStateChange(Map eventData) {
//TheLogger.debug( "New state for ${eventData['entity_id']}");
if (_fetchCompleter != null && _fetchCompleter.isCompleted) {

View File

@ -28,6 +28,7 @@ class ConnectionManager {
bool isConnected = false;
var onStateChangeCallback;
var onLovelaceUpdatedCallback;
IOWebSocketChannel _socket;
@ -150,6 +151,10 @@ class ConnectionManager {
} else if (data["type"] == "auth_ok") {
Logger.d("[Received] <== ${data.toString()}");
Logger.d("[Connection] Subscribing to events");
sendSocketMessage(
type: "subscribe_events",
additionalData: {"event_type": "lovelace_updated"},
);
sendSocketMessage(
type: "subscribe_events",
additionalData: {"event_type": "state_changed"},
@ -212,6 +217,17 @@ class ConnectionManager {
}
_messageResolver.remove("${data["id"]}");
} else if (data["type"] == "event") {
if (data["event"] != null) {
if (data["event"]["event_type"] == "state_changed") {
Logger.d("[Received] <== ${data['type']}.${data["event"]["event_type"]}: ${data["event"]["data"]["entity_id"]}");
onStateChangeCallback(data["event"]["data"]);
} else if (data["event"]["event_type"] == "lovelace_updated") {
Logger.d("[Received] <== ${data['type']}.${data["event"]["event_type"]}: $data");
onLovelaceUpdatedCallback();
}
}
if ((data["event"] != null) && (data["event"]["event_type"] == "state_changed")) {
Logger.d("[Received] <== ${data['type']}.${data["event"]["event_type"]}: ${data["event"]["data"]["entity_id"]}");
onStateChangeCallback(data["event"]["data"]);

View File

@ -153,7 +153,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
if (_stateSubscription == null) {
_stateSubscription = eventBus.on<StateChangedEvent>().listen((event) {
if (event.needToRebuildUI) {
Logger.d("New entity. Need to rebuild UI");
Logger.d("Need to rebuild UI");
_quickLoad();
} else {
setState(() {});