mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-05-18 11:46:28 -04:00
refactor: eliminate ProcessRadioResponseUseCase and packet-ID correlation
Replace the manual packet-ID tracking and meshPacketFlow subscription in
RadioConfigViewModel with direct typed returns from the SDK via
RadioConfigUseCase. The ViewModel now awaits typed results (User, Config,
ModuleConfig, channels, etc.) from suspend calls and maps AdminException
to UI error states.
Key changes:
- Delete ProcessRadioResponseUseCase (130 lines of manual proto decode)
- Remove requestIds state, registerRequestId, processPacketResponse,
sendAdminRequest, and meshPacketFlow subscription from ViewModel
- Rewrite setResponseStateLoading to use direct coroutine calls
- Admin actions (reboot/shutdown/etc.) fire directly without session key
preflight (SDK handles retryOnSessionExpiry transparently)
- All setters (setConfig, setModuleConfig, setOwner, updateChannels)
no longer return/track packetIds
- Remove messageSender dependency from NodeManagementActions
- Update InstallProfileUseCase to use editSettings {} receiver pattern
- Update all callers: CleanNodeDatabaseUseCase, Esp32OtaUpdateHandler,
NodeManagementActions
- Rewrite RadioConfigViewModelTest for new direct-await semantics
- Update RadioConfigUseCaseTest and InstallProfileUseCaseTest
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -23,7 +23,6 @@ import org.jetbrains.compose.resources.getString
|
||||
import org.koin.core.annotation.Single
|
||||
import org.meshtastic.core.common.util.ioDispatcher
|
||||
import org.meshtastic.core.model.DeviceControl
|
||||
import org.meshtastic.core.model.MessageSender
|
||||
import org.meshtastic.core.model.Node
|
||||
import org.meshtastic.core.model.service.ServiceAction
|
||||
import org.meshtastic.core.repository.NodeRepository
|
||||
@@ -49,7 +48,6 @@ constructor(
|
||||
private val nodeRepository: NodeRepository,
|
||||
private val serviceRepository: ServiceRepository,
|
||||
private val deviceControl: DeviceControl,
|
||||
private val messageSender: MessageSender,
|
||||
private val alertManager: AlertManager,
|
||||
) {
|
||||
open fun requestRemoveNode(scope: CoroutineScope, node: Node, onAfterRemove: () -> Unit = {}) {
|
||||
@@ -66,8 +64,7 @@ constructor(
|
||||
open fun removeNode(scope: CoroutineScope, nodeNum: Int) {
|
||||
scope.launch(ioDispatcher) {
|
||||
Logger.i { "Removing node '$nodeNum'" }
|
||||
val packetId = messageSender.getPacketId()
|
||||
deviceControl.removeByNodenum(packetId, nodeNum)
|
||||
deviceControl.removeByNodenum(nodeNum)
|
||||
nodeRepository.deleteNode(nodeNum)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,6 @@ class NodeManagementActionsTest {
|
||||
nodeRepository = nodeRepository,
|
||||
serviceRepository = serviceRepository,
|
||||
deviceControl = radioController,
|
||||
messageSender = radioController,
|
||||
alertManager = alertManager,
|
||||
)
|
||||
|
||||
@@ -80,7 +79,6 @@ class NodeManagementActionsTest {
|
||||
nodeRepository = nodeRepository,
|
||||
serviceRepository = serviceRepository,
|
||||
deviceControl = radioController,
|
||||
messageSender = radioController,
|
||||
alertManager = realAlertManager,
|
||||
)
|
||||
val node = Node(num = 123, user = User(long_name = "Test Node"))
|
||||
|
||||
Reference in New Issue
Block a user