From 391a8be499a2efec0207be5b607e6f2b5dd12ddc Mon Sep 17 00:00:00 2001 From: andrekir Date: Wed, 13 Dec 2023 19:29:06 -0300 Subject: [PATCH] fix: packet response `requestId` tracking fixes #794 --- .../geeksville/mesh/model/RadioConfigViewModel.kt | 13 +++++++++---- .../main/java/com/geeksville/mesh/model/UIState.kt | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/model/RadioConfigViewModel.kt b/app/src/main/java/com/geeksville/mesh/model/RadioConfigViewModel.kt index 5935cfc5a..2fae54600 100644 --- a/app/src/main/java/com/geeksville/mesh/model/RadioConfigViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/model/RadioConfigViewModel.kt @@ -123,7 +123,10 @@ class RadioConfigViewModel @Inject constructor( val total = maxOf(requestIds.value.size, state.responseState.total) state.copy(responseState = state.responseState.copy(total = total)) } else { - state.copy(responseState = ResponseState.Loading()) + state.copy( + route = "", // setter (response is PortNum.ROUTING_APP) + responseState = ResponseState.Loading(), + ) } } } catch (ex: RemoteException) { @@ -410,7 +413,7 @@ class RadioConfigViewModel @Inject constructor( private fun processPacketResponse(log: MeshLog?) { val packet = log?.meshPacket ?: return val data = packet.decoded - requestIds.update { it.apply { put(data.requestId, true) } } + val route = radioConfigState.value.route // val destNum = destNode.value?.num ?: return val debugMsg = @@ -421,7 +424,8 @@ class RadioConfigViewModel @Inject constructor( debug(debugMsg.format(parsed.errorReason.name)) if (parsed.errorReason != MeshProtos.Routing.Error.NONE) { setResponseStateError(parsed.errorReason.name) - } else if (packet.from == destNum) { + } else if (packet.from == destNum && route.isEmpty()) { + requestIds.update { it.apply { put(data.requestId, true) } } if (requestIds.value.filterValues { !it }.isEmpty()) setResponseStateSuccess() else incrementCompleted() } @@ -434,7 +438,7 @@ class RadioConfigViewModel @Inject constructor( return } // check if destination is channel editor - val goChannels = radioConfigState.value.route == ConfigRoute.CHANNELS.name + val goChannels = route == ConfigRoute.CHANNELS.name when (parsed.payloadVariantCase) { AdminProtos.AdminMessage.PayloadVariantCase.GET_CHANNEL_RESPONSE -> { val response = parsed.getChannelResponse @@ -493,6 +497,7 @@ class RadioConfigViewModel @Inject constructor( else -> TODO() } + requestIds.update { it.apply { put(data.requestId, true) } } } } } diff --git a/app/src/main/java/com/geeksville/mesh/model/UIState.kt b/app/src/main/java/com/geeksville/mesh/model/UIState.kt index b1f163b58..01ee0574d 100644 --- a/app/src/main/java/com/geeksville/mesh/model/UIState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/UIState.kt @@ -593,7 +593,6 @@ class UIViewModel @Inject constructor( private fun processPacketResponse(log: MeshLog?) { val packet = log?.meshPacket ?: return val data = packet.decoded - requestIds.update { it.apply { put(data.requestId, true) } } if (data?.portnumValue == Portnums.PortNum.TRACEROUTE_APP_VALUE) { val parsed = MeshProtos.RouteDiscovery.parseFrom(data.payload) @@ -605,6 +604,7 @@ class UIViewModel @Inject constructor( parsed.routeList.forEach { num -> append("${nodeName(num)} --> ") } append(nodeName(packet.from)) } + requestIds.update { it.apply { put(data.requestId, true) } } } } }