From 158e67f8590ea3bab1393fd5df205d29c7f4f010 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Tue, 19 Nov 2024 07:41:33 -0600 Subject: [PATCH] Fix: Deduplicate position logs (#1417) Deduplicate position logs by filtering out duplicates based on time and location. --- .../com/geeksville/mesh/model/MetricsViewModel.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt b/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt index d8f0d9845..807962726 100644 --- a/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt @@ -25,9 +25,12 @@ import com.geeksville.mesh.ui.map.MAP_STYLE_ID import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asFlow import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.toList import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -180,7 +183,13 @@ class MetricsViewModel @Inject constructor( }.launchIn(viewModelScope) meshLogRepository.getMeshPacketsFrom(destNum, PortNum.POSITION_APP_VALUE).onEach { packets -> - _state.update { state -> state.copy(positionLogs = packets.mapNotNull { it.toPosition() }) } + val distinctPositions = + packets.mapNotNull { it.toPosition() }.asFlow().distinctUntilChanged { old, new -> + old.time == new.time || (old.latitudeI == new.latitudeI && old.longitudeI == new.longitudeI) + }.toList() + _state.update { state -> + state.copy(positionLogs = distinctPositions) + } }.launchIn(viewModelScope) debug("MetricsViewModel created")