refactor: remove getPacketId() from public interface

- Remove getPacketId() from MessageSender interface (SDK owns packet IDs)
- Remove requestId parameter from requestTraceroute/requestNeighborInfo
- Make getPacketId() private in SdkRadioController (still used internally
  for delivery tracking correlation)
- Replace radioController.getPacketId() in map with local Random.nextInt()
  for waypoint ID generation (only needs uniqueness, not SDK correlation)
- Remove messageSender dependency from CommonNodeRequestActions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
James Rich
2026-05-06 12:23:25 -05:00
parent f4c6cee332
commit 0b5791a61d
7 changed files with 11 additions and 19 deletions

View File

@@ -318,7 +318,7 @@ class SdkRadioController(
c.requestNodeInfo(NodeId(destNum))
}
override suspend fun requestTraceroute(requestId: Int, destNum: Int) {
override suspend fun requestTraceroute(destNum: Int) {
val c = requireClient()
c.routing.traceRoute(NodeId(destNum))
}
@@ -338,7 +338,7 @@ class SdkRadioController(
}
}
override suspend fun requestNeighborInfo(requestId: Int, destNum: Int) {
override suspend fun requestNeighborInfo(destNum: Int) {
val c = requireClient()
c.routing.requestNeighborInfo(NodeId(destNum))
}
@@ -381,7 +381,7 @@ class SdkRadioController(
// ── Utility ─────────────────────────────────────────────────────────────
override fun getPacketId(): Int = packetIdCounter.getAndIncrement()
private fun getPacketId(): Int = packetIdCounter.getAndIncrement()
override fun startProvideLocation() {
// Location provision is managed at the app level; no-op here

View File

@@ -41,8 +41,6 @@ class RadioConfigUseCaseTest {
fun `setOwner calls radioController`() = runTest {
val user = User(long_name = "New Name")
useCase.setOwner(1234, user)
// Verify call implicitly or by adding tracking to FakeRadioController if needed.
// FakeRadioController already has getPacketId returning 1.
}
@Test

View File

@@ -20,8 +20,8 @@ package org.meshtastic.core.model
interface DataRequester {
suspend fun requestPosition(destNum: Int, currentPosition: Position)
suspend fun requestUserInfo(destNum: Int)
suspend fun requestTraceroute(requestId: Int, destNum: Int)
suspend fun requestTraceroute(destNum: Int)
suspend fun requestTelemetry(destNum: Int, type: TelemetryType)
suspend fun requestNeighborInfo(requestId: Int, destNum: Int)
suspend fun requestNeighborInfo(destNum: Int)
suspend fun requestStoreForwardHistory(since: Int? = null, serverNodeNum: Int? = null): Boolean
}

View File

@@ -19,5 +19,4 @@ package org.meshtastic.core.model
/** Focused interface for sending messages over the mesh. */
interface MessageSender : ConnectionAware {
suspend fun sendMessage(packet: DataPacket)
fun getPacketId(): Int
}

View File

@@ -140,11 +140,11 @@ class FakeRadioController :
override suspend fun requestUserInfo(destNum: Int) {}
override suspend fun requestTraceroute(requestId: Int, destNum: Int) {}
override suspend fun requestTraceroute(destNum: Int) {}
override suspend fun requestTelemetry(destNum: Int, type: TelemetryType) {}
override suspend fun requestNeighborInfo(requestId: Int, destNum: Int) {}
override suspend fun requestNeighborInfo(destNum: Int) {}
override suspend fun requestStoreForwardHistory(since: Int?, serverNodeNum: Int?): Boolean {
lastStoreForwardHistoryRequest = since to serverNodeNum
@@ -162,8 +162,6 @@ class FakeRadioController :
block(edit)
}
override fun getPacketId(): Int = 1
override fun startProvideLocation() {
startProvideLocationCalled = true
}

View File

@@ -162,7 +162,8 @@ open class BaseMapViewModel(
safeLaunch(context = ioDispatcher, tag = "sendDataPacket") { radioController.sendMessage(p) }
}
fun generatePacketId(): Int = radioController.getPacketId()
/** Generate a unique ID for a new waypoint. */
fun generatePacketId(): Int = kotlin.random.Random.nextInt(1, Int.MAX_VALUE)
data class MapFilterState(
val onlyFavorites: Boolean,

View File

@@ -27,7 +27,6 @@ import org.koin.core.annotation.Single
import org.meshtastic.core.common.util.ioDispatcher
import org.meshtastic.core.common.util.nowMillis
import org.meshtastic.core.model.DataRequester
import org.meshtastic.core.model.MessageSender
import org.meshtastic.core.model.Position
import org.meshtastic.core.model.TelemetryType
import org.meshtastic.core.resources.Res
@@ -50,7 +49,6 @@ import org.meshtastic.core.ui.util.SnackbarManager
class CommonNodeRequestActions
constructor(
private val dataRequester: DataRequester,
private val messageSender: MessageSender,
private val snackbarManager: SnackbarManager,
) : NodeRequestActions {
@@ -78,8 +76,7 @@ constructor(
scope.launch(ioDispatcher) {
runCatching {
Logger.i { "Requesting NeighborInfo for '$destNum'" }
val packetId = messageSender.getPacketId()
dataRequester.requestNeighborInfo(packetId, destNum)
dataRequester.requestNeighborInfo(destNum)
_lastRequestNeighborTimes.update { it + (destNum to nowMillis) }
showFeedback(UiText.Resource(Res.string.requesting_from, Res.string.neighbor_info, longName))
}.onFailure { e -> Logger.e(e) { "requestNeighborInfo failed" } }
@@ -123,8 +120,7 @@ constructor(
scope.launch(ioDispatcher) {
runCatching {
Logger.i { "Requesting traceroute for '$destNum'" }
val packetId = messageSender.getPacketId()
dataRequester.requestTraceroute(packetId, destNum)
dataRequester.requestTraceroute(destNum)
_lastTracerouteTime.value = nowMillis
showFeedback(UiText.Resource(Res.string.requesting_from, Res.string.traceroute, longName))
}.onFailure { e -> Logger.e(e) { "requestTraceroute failed" } }