diff --git a/core/database/src/main/kotlin/org/meshtastic/core/database/entity/Packet.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/Packet.kt index f36bab816..6923178b9 100644 --- a/core/database/src/main/kotlin/org/meshtastic/core/database/entity/Packet.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/Packet.kt @@ -82,15 +82,23 @@ data class Packet( companion object { const val RELAY_NODE_SUFFIX_MASK = 0xFF - fun getRelayNode(relayNodeId: Int, nodes: List): Node? { + fun getRelayNode(relayNodeId: Int, nodes: List, ourNodeNum: Int?): Node? { val relayNodeIdSuffix = relayNodeId and RELAY_NODE_SUFFIX_MASK - val candidateRelayNodes = nodes.filter { (it.num and RELAY_NODE_SUFFIX_MASK) == relayNodeIdSuffix } + + val candidateRelayNodes = + nodes.filter { + it.num != ourNodeNum && + it.lastHeard != 0 && + (it.num and RELAY_NODE_SUFFIX_MASK) == relayNodeIdSuffix + } + val closestRelayNode = if (candidateRelayNodes.size == 1) { candidateRelayNodes.first() } else { candidateRelayNodes.minByOrNull { it.hopsAway } } + return closestRelayNode } } diff --git a/feature/messaging/src/main/kotlin/org/meshtastic/feature/messaging/MessageListPaged.kt b/feature/messaging/src/main/kotlin/org/meshtastic/feature/messaging/MessageListPaged.kt index b4896ed32..4f435391d 100644 --- a/feature/messaging/src/main/kotlin/org/meshtastic/feature/messaging/MessageListPaged.kt +++ b/feature/messaging/src/main/kotlin/org/meshtastic/feature/messaging/MessageListPaged.kt @@ -116,6 +116,7 @@ internal fun MessageListPaged( MessageStatusDialog( message = message, nodes = state.nodes, + ourNode = state.ourNode, resendOption = message.status?.equals(MessageStatus.ERROR) ?: false, onResend = { handlers.onDeleteMessages(listOf(message.uuid)) @@ -439,15 +440,18 @@ internal fun UnreadMessagesDivider(modifier: Modifier = Modifier) { internal fun MessageStatusDialog( message: Message, nodes: List, + ourNode: Node?, resendOption: Boolean, onResend: () -> Unit, onDismiss: () -> Unit, ) { val (title, text) = message.getStatusStringRes() val relayNodeName by - remember(message.relayNode, nodes) { + remember(message.relayNode, nodes, ourNode) { derivedStateOf { - message.relayNode?.let { relayNodeId -> Packet.getRelayNode(relayNodeId, nodes)?.user?.longName } + message.relayNode?.let { relayNodeId -> + Packet.getRelayNode(relayNodeId, nodes, ourNode?.num)?.user?.longName + } } } DeliveryInfo( diff --git a/feature/settings/src/main/kotlin/org/meshtastic/feature/settings/debugging/DebugViewModel.kt b/feature/settings/src/main/kotlin/org/meshtastic/feature/settings/debugging/DebugViewModel.kt index 6d93f02f3..b7a93c690 100644 --- a/feature/settings/src/main/kotlin/org/meshtastic/feature/settings/debugging/DebugViewModel.kt +++ b/feature/settings/src/main/kotlin/org/meshtastic/feature/settings/debugging/DebugViewModel.kt @@ -297,7 +297,10 @@ constructor( val placeholder = "___RELAY_NODE___" if (relayNode != 0) { - Packet.getRelayNode(relayNode, nodeRepository.nodeDBbyNum.value.values.toList())?.let { node -> + val myNodeNum = nodeRepository.myNodeInfo.value?.myNodeNum + val nodeList = nodeRepository.nodeDBbyNum.value.values.toList() + + Packet.getRelayNode(relayNode, nodeList, myNodeNum)?.let { node -> val relayId = node.user.id val relayName = node.user.longName val regex = Regex("""\brelay_node: ${relayNode.toUInt()}\b""")