From 2b47155b5e0c74481a3f68a860c4a62a4b7e3d44 Mon Sep 17 00:00:00 2001 From: HLCaptain Date: Sat, 18 Nov 2023 16:46:02 +0100 Subject: [PATCH] Not sending concrete data values unless it is no longer loading. --- .../datasource/SensorFirestoreDataSource.kt | 2 +- .../nest/planty/manager/PlantManager.kt | 2 +- .../nest/planty/manager/SensorManager.kt | 2 +- .../planty/repository/BrokerRepository.kt | 27 ++++++++----------- .../nest/planty/repository/PlantRepository.kt | 9 +++++-- .../planty/repository/SensorRepository.kt | 14 +++++----- .../PlantSensorEditScreenModel.kt | 2 +- 7 files changed, 30 insertions(+), 28 deletions(-) diff --git a/planty-client/common/src/commonMain/kotlin/nest/planty/data/firestore/datasource/SensorFirestoreDataSource.kt b/planty-client/common/src/commonMain/kotlin/nest/planty/data/firestore/datasource/SensorFirestoreDataSource.kt index 2841056..dee178e 100644 --- a/planty-client/common/src/commonMain/kotlin/nest/planty/data/firestore/datasource/SensorFirestoreDataSource.kt +++ b/planty-client/common/src/commonMain/kotlin/nest/planty/data/firestore/datasource/SensorFirestoreDataSource.kt @@ -14,7 +14,7 @@ class SensorFirestoreDataSource( private val firestore: FirebaseFirestore, ) : SensorNetworkDataSource { override fun fetch(uuid: String): Flow { - Napier.d("Fetching sensors") + Napier.d("Fetching sensor $uuid") return firestore .collection(FirestoreSensor.COLLECTION_NAME) .document(uuid) diff --git a/planty-client/common/src/commonMain/kotlin/nest/planty/manager/PlantManager.kt b/planty-client/common/src/commonMain/kotlin/nest/planty/manager/PlantManager.kt index b58b2f8..2969dc7 100644 --- a/planty-client/common/src/commonMain/kotlin/nest/planty/manager/PlantManager.kt +++ b/planty-client/common/src/commonMain/kotlin/nest/planty/manager/PlantManager.kt @@ -29,7 +29,7 @@ class PlantManager( sensorRepository.getSensor(sensorUUID).firstOrNull() } ?: emptyList() Napier.d("Plant is $plant") - plant?.let { send(plant.toDomainModel(sensors.filterNotNull())) } + send(plant?.toDomainModel(sensors.filterNotNull())) } }.flowOn(dispatcherIO) diff --git a/planty-client/common/src/commonMain/kotlin/nest/planty/manager/SensorManager.kt b/planty-client/common/src/commonMain/kotlin/nest/planty/manager/SensorManager.kt index 5c31713..81794a5 100644 --- a/planty-client/common/src/commonMain/kotlin/nest/planty/manager/SensorManager.kt +++ b/planty-client/common/src/commonMain/kotlin/nest/planty/manager/SensorManager.kt @@ -40,7 +40,7 @@ class SensorManager( fun getSensorsForPlant(plantUUID: String) = plantManager .getPlant(plantUUID) - .map { it.sensors } + .map { it?.sensors } suspend fun unassignSensorFromPlant(sensorUUID: String, plantUUID: String) { plantRepository.getPlant(plantUUID).firstOrNull()?.let { plant -> diff --git a/planty-client/common/src/commonMain/kotlin/nest/planty/repository/BrokerRepository.kt b/planty-client/common/src/commonMain/kotlin/nest/planty/repository/BrokerRepository.kt index 46ac7d5..5dd70a2 100644 --- a/planty-client/common/src/commonMain/kotlin/nest/planty/repository/BrokerRepository.kt +++ b/planty-client/common/src/commonMain/kotlin/nest/planty/repository/BrokerRepository.kt @@ -1,12 +1,10 @@ package nest.planty.repository import io.github.aakira.napier.Napier -import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.dropWhile import kotlinx.coroutines.flow.map import nest.planty.data.store.BrokerMutableStoreBuilder import nest.planty.data.store.BrokersMutableStoreBuilder -import nest.planty.di.NamedCoroutineDispatcherIO import nest.planty.domain.model.DomainBroker import org.koin.core.annotation.Factory import org.mobilenativefoundation.store.store5.ExperimentalStoreApi @@ -18,7 +16,6 @@ import org.mobilenativefoundation.store.store5.StoreWriteRequest class BrokerRepository( brokerMutableStoreBuilder: BrokerMutableStoreBuilder, brokersMutableStoreBuilder: BrokersMutableStoreBuilder, - @NamedCoroutineDispatcherIO private val dispatcherIO: CoroutineDispatcher ) { @OptIn(ExperimentalStoreApi::class) private val brokerMutableStore = brokerMutableStoreBuilder.store @@ -27,32 +24,30 @@ class BrokerRepository( @OptIn(ExperimentalStoreApi::class) fun getBroker(uuid: String) = brokerMutableStore.stream>( - StoreReadRequest.cached( - key = uuid, - refresh = true - ) - ).map { + StoreReadRequest.fresh(key = uuid) + ).dropWhile { + it is StoreReadResponse.Loading + }.map { it.throwIfError() Napier.d("Read Response: $it") val data = it.dataOrNull() Napier.d("Broker is $data") data - }.flowOn(dispatcherIO) + } @OptIn(ExperimentalStoreApi::class) fun getBrokersByUser(userUUID: String) = brokersMutableStore.stream>>( - StoreReadRequest.cached( - key = userUUID, - refresh = true - ) - ).map { + StoreReadRequest.fresh(key = userUUID) + ).dropWhile { + it is StoreReadResponse.Loading + }.map { it.throwIfError() Napier.d("Read Response: $it") val data = it.dataOrNull() Napier.d("Broker is $data") data - }.flowOn(dispatcherIO) + } @OptIn(ExperimentalStoreApi::class) suspend fun upsertBroker(broker: DomainBroker) { diff --git a/planty-client/common/src/commonMain/kotlin/nest/planty/repository/PlantRepository.kt b/planty-client/common/src/commonMain/kotlin/nest/planty/repository/PlantRepository.kt index a3f54b1..1e02df4 100644 --- a/planty-client/common/src/commonMain/kotlin/nest/planty/repository/PlantRepository.kt +++ b/planty-client/common/src/commonMain/kotlin/nest/planty/repository/PlantRepository.kt @@ -1,6 +1,7 @@ package nest.planty.repository import io.github.aakira.napier.Napier +import kotlinx.coroutines.flow.dropWhile import kotlinx.coroutines.flow.map import nest.planty.data.store.PlantMutableStoreBuilder import nest.planty.data.store.PlantsByUserMutableStoreBuilder @@ -22,7 +23,9 @@ class PlantRepository( fun getPlant(uuid: String) = plantMutableStore.stream>( StoreReadRequest.fresh(key = uuid) - ).map { + ).dropWhile { + it is StoreReadResponse.Loading + }.map { it.throwIfError() Napier.d("Read Response: $it") val data = it.dataOrNull() @@ -50,7 +53,9 @@ class PlantRepository( fun getPlantsByUser(userUUID: String) = plantsMutableStore.stream>>( StoreReadRequest.fresh(key = userUUID) - ).map { + ).dropWhile { + it is StoreReadResponse.Loading + }.map { it.throwIfError() Napier.d("Read Response: $it") val data = it.dataOrNull() diff --git a/planty-client/common/src/commonMain/kotlin/nest/planty/repository/SensorRepository.kt b/planty-client/common/src/commonMain/kotlin/nest/planty/repository/SensorRepository.kt index 4337067..8b1405a 100644 --- a/planty-client/common/src/commonMain/kotlin/nest/planty/repository/SensorRepository.kt +++ b/planty-client/common/src/commonMain/kotlin/nest/planty/repository/SensorRepository.kt @@ -1,6 +1,7 @@ package nest.planty.repository import io.github.aakira.napier.Napier +import kotlinx.coroutines.flow.dropWhile import kotlinx.coroutines.flow.map import nest.planty.data.store.SensorMutableStoreBuilder import nest.planty.data.store.SensorsMutableStoreBuilder @@ -23,7 +24,9 @@ class SensorRepository( @OptIn(ExperimentalStoreApi::class) fun getSensor(uuid: String) = sensorMutableStore.stream>( StoreReadRequest.fresh(key = uuid) - ).map { + ).dropWhile { + it is StoreReadResponse.Loading + }.map { it.throwIfError() Napier.d("Read Response: $it") val data = it.dataOrNull() @@ -34,11 +37,10 @@ class SensorRepository( @OptIn(ExperimentalStoreApi::class) fun getSensorsByBroker(brokerUUID: String) = sensorsMutableStore.stream>>( - StoreReadRequest.cached( - key = brokerUUID, - refresh = true - ) - ).map { + StoreReadRequest.fresh(key = brokerUUID) + ).dropWhile { + it is StoreReadResponse.Loading + }.map { it.throwIfError() Napier.d("Read Response: $it") val data = it.dataOrNull() diff --git a/planty-client/common/src/commonMain/kotlin/nest/planty/ui/plant_sensor_edit/PlantSensorEditScreenModel.kt b/planty-client/common/src/commonMain/kotlin/nest/planty/ui/plant_sensor_edit/PlantSensorEditScreenModel.kt index fa6eca3..f886b84 100644 --- a/planty-client/common/src/commonMain/kotlin/nest/planty/ui/plant_sensor_edit/PlantSensorEditScreenModel.kt +++ b/planty-client/common/src/commonMain/kotlin/nest/planty/ui/plant_sensor_edit/PlantSensorEditScreenModel.kt @@ -20,7 +20,7 @@ class PlantSensorEditScreenModel( @NamedCoroutineDispatcherIO private val dispatcherIO: CoroutineDispatcher, ) : ScreenModel { val assignedSensors = sensorManager.getSensorsForPlant(plantUUID) - .map { sensors -> sensors.groupBy { it.ownerBroker } } + .map { sensors -> sensors?.groupBy { it.ownerBroker } ?: emptyMap() } .stateIn( screenModelScope, SharingStarted.Eagerly,