mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2025-12-24 00:07:48 -05:00
fix : avoid our node to be a relaynode candidate (#4037)
This commit is contained in:
@@ -82,15 +82,23 @@ data class Packet(
|
||||
companion object {
|
||||
const val RELAY_NODE_SUFFIX_MASK = 0xFF
|
||||
|
||||
fun getRelayNode(relayNodeId: Int, nodes: List<Node>): Node? {
|
||||
fun getRelayNode(relayNodeId: Int, nodes: List<Node>, 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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Node>,
|
||||
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(
|
||||
|
||||
@@ -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""")
|
||||
|
||||
Reference in New Issue
Block a user