From 25e19d2beb34c9a5633f518c1105daad8297b300 Mon Sep 17 00:00:00 2001 From: Justin Bassett Date: Fri, 10 Dec 2021 20:30:08 -0500 Subject: [PATCH] Fix crash when we don't have new_state or old_state in websocket. --- .../impl/IntegrationRepositoryImpl.kt | 24 ++++++++++--------- .../impl/entities/StateChangedEvent.kt | 4 ++-- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/common/src/main/java/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt b/common/src/main/java/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt index b13c549c30d..707bb836082 100644 --- a/common/src/main/java/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt +++ b/common/src/main/java/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt @@ -26,13 +26,13 @@ import io.homeassistant.companion.android.common.data.url.UrlRepository import io.homeassistant.companion.android.common.data.websocket.WebSocketRepository import io.homeassistant.companion.android.common.data.websocket.impl.entities.GetConfigResponse import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import org.json.JSONArray import java.util.regex.Pattern import javax.inject.Inject import javax.inject.Named -import kotlin.Exception class IntegrationRepositoryImpl @Inject constructor( private val integrationService: IntegrationService, @@ -464,16 +464,18 @@ class IntegrationRepositoryImpl @Inject constructor( } override suspend fun getEntityUpdates(): Flow> { - return webSocketRepository.getStateChanges().map { - Entity( - it.newState.entityId, - it.newState.state, - it.newState.attributes, - it.newState.lastChanged, - it.newState.lastUpdated, - it.newState.context - ) - } + return webSocketRepository.getStateChanges() + .filter { it.newState != null } + .map { + Entity( + it.newState!!.entityId, + it.newState.state, + it.newState.attributes, + it.newState.lastChanged, + it.newState.lastUpdated, + it.newState.context + ) + } } private suspend fun canRegisterEntityCategoryStateClass(): Boolean { diff --git a/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/impl/entities/StateChangedEvent.kt b/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/impl/entities/StateChangedEvent.kt index 9f93dfb9454..3ebe0453db9 100644 --- a/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/impl/entities/StateChangedEvent.kt +++ b/common/src/main/java/io/homeassistant/companion/android/common/data/websocket/impl/entities/StateChangedEvent.kt @@ -6,6 +6,6 @@ import io.homeassistant.companion.android.common.data.integration.Entity @JsonIgnoreProperties(ignoreUnknown = true) data class StateChangedEvent( val entityId: String, - val oldState: Entity<*>, - val newState: Entity<*> + val oldState: Entity<*>?, + val newState: Entity<*>? )