From 5ced01463f87b74ab9f287df2b109a023aaa07b5 Mon Sep 17 00:00:00 2001 From: Yegor Vialov Date: Thu, 19 Mar 2020 23:16:59 +0000 Subject: [PATCH] Resolves #526 Subscribe to Lovelace update events --- lib/home_assistant.class.dart | 9 +++++++++ lib/managers/connection_manager.class.dart | 16 ++++++++++++++++ lib/pages/main/main.page.dart | 2 +- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/home_assistant.class.dart b/lib/home_assistant.class.dart index 33b6dfd..3c6d400 100644 --- a/lib/home_assistant.class.dart +++ b/lib/home_assistant.class.dart @@ -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) { diff --git a/lib/managers/connection_manager.class.dart b/lib/managers/connection_manager.class.dart index 35b8b9f..dc554bb 100644 --- a/lib/managers/connection_manager.class.dart +++ b/lib/managers/connection_manager.class.dart @@ -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"]); diff --git a/lib/pages/main/main.page.dart b/lib/pages/main/main.page.dart index 2b670b7..b2cbf89 100644 --- a/lib/pages/main/main.page.dart +++ b/lib/pages/main/main.page.dart @@ -153,7 +153,7 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker if (_stateSubscription == null) { _stateSubscription = eventBus.on().listen((event) { if (event.needToRebuildUI) { - Logger.d("New entity. Need to rebuild UI"); + Logger.d("Need to rebuild UI"); _quickLoad(); } else { setState(() {});