refactor: move error message handling to `ServiceRepository`

pull/961/head
andrekir 2024-04-07 16:35:04 -03:00
rodzic cf239e3634
commit 76151e153f
6 zmienionych plików z 29 dodań i 18 usunięć

Wyświetl plik

@ -194,7 +194,7 @@ class BTScanModel @Inject constructor(
addDevice(entry) addDevice(entry)
} }
}.catch { ex -> }.catch { ex ->
radioInterfaceService.setErrorMessage("Unexpected Bluetooth scan failure: ${ex.message}") serviceRepository.setErrorMessage("Unexpected Bluetooth scan failure: ${ex.message}")
}.launchIn(viewModelScope) }.launchIn(viewModelScope)
} }

Wyświetl plik

@ -159,9 +159,9 @@ class UIViewModel @Inject constructor(
val snackbarText: LiveData<Any?> get() = _snackbarText val snackbarText: LiveData<Any?> get() = _snackbarText
init { init {
radioInterfaceService.errorMessage.filterNotNull().onEach { radioConfigRepository.errorMessage.filterNotNull().onEach {
_snackbarText.value = it _snackbarText.value = it
radioInterfaceService.clearErrorMessage() radioConfigRepository.clearErrorMessage()
}.launchIn(viewModelScope) }.launchIn(viewModelScope)
viewModelScope.launch { viewModelScope.launch {

Wyświetl plik

@ -157,6 +157,16 @@ class RadioConfigRepository @Inject constructor(
} }
} }
val errorMessage: StateFlow<String?> get() = serviceRepository.errorMessage
fun setErrorMessage(text: String) {
serviceRepository.setErrorMessage(text)
}
fun clearErrorMessage() {
serviceRepository.clearErrorMessage()
}
val tracerouteResponse: StateFlow<String?> get() = serviceRepository.tracerouteResponse val tracerouteResponse: StateFlow<String?> get() = serviceRepository.tracerouteResponse
fun setTracerouteResponse(value: String?) { fun setTracerouteResponse(value: String?) {

Wyświetl plik

@ -56,18 +56,6 @@ class RadioInterfaceService @Inject constructor(
private val _receivedData = MutableSharedFlow<ByteArray>() private val _receivedData = MutableSharedFlow<ByteArray>()
val receivedData: SharedFlow<ByteArray> = _receivedData val receivedData: SharedFlow<ByteArray> = _receivedData
private val _errorMessage = MutableStateFlow<String?>(null)
val errorMessage: SharedFlow<String?> = _errorMessage
fun setErrorMessage(text: String) {
errormsg(text)
_errorMessage.value = text
}
fun clearErrorMessage() {
_errorMessage.value = null
}
private val logSends = false private val logSends = false
private val logReceives = false private val logReceives = false
private lateinit var sentPacketsLog: BinaryLogFile // inited in onCreate private lateinit var sentPacketsLog: BinaryLogFile // inited in onCreate

Wyświetl plik

@ -671,7 +671,7 @@ class MeshService : Service(), Logging {
val isAck = u.errorReasonValue == MeshProtos.Routing.Error.NONE_VALUE val isAck = u.errorReasonValue == MeshProtos.Routing.Error.NONE_VALUE
if (u.errorReason == MeshProtos.Routing.Error.DUTY_CYCLE_LIMIT) { if (u.errorReason == MeshProtos.Routing.Error.DUTY_CYCLE_LIMIT) {
radioInterfaceService.setErrorMessage(getString(R.string.error_duty_cycle)) radioConfigRepository.setErrorMessage(getString(R.string.error_duty_cycle))
} }
handleAckNak(isAck, fromId, data.requestId) handleAckNak(isAck, fromId, data.requestId)
@ -1446,7 +1446,7 @@ class MeshService : Service(), Logging {
mqttMessageFlow = mqttRepository.proxyMessageFlow.onEach { message -> mqttMessageFlow = mqttRepository.proxyMessageFlow.onEach { message ->
sendToRadio(ToRadio.newBuilder().apply { mqttClientProxyMessage = message }) sendToRadio(ToRadio.newBuilder().apply { mqttClientProxyMessage = message })
}.catch { throwable -> }.catch { throwable ->
radioInterfaceService.setErrorMessage("MqttClientProxy failed: $throwable") radioConfigRepository.setErrorMessage("MqttClientProxy failed: $throwable")
}.launchIn(serviceScope) }.launchIn(serviceScope)
} }
} }

Wyświetl plik

@ -1,6 +1,7 @@
package com.geeksville.mesh.service package com.geeksville.mesh.service
import com.geeksville.mesh.IMeshService import com.geeksville.mesh.IMeshService
import com.geeksville.mesh.android.Logging
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import javax.inject.Inject import javax.inject.Inject
@ -10,7 +11,7 @@ import javax.inject.Singleton
* Repository class for managing the [IMeshService] instance and connection state * Repository class for managing the [IMeshService] instance and connection state
*/ */
@Singleton @Singleton
class ServiceRepository @Inject constructor() { class ServiceRepository @Inject constructor() : Logging {
var meshService: IMeshService? = null var meshService: IMeshService? = null
private set private set
@ -26,6 +27,18 @@ class ServiceRepository @Inject constructor() {
_connectionState.value = connectionState _connectionState.value = connectionState
} }
private val _errorMessage = MutableStateFlow<String?>(null)
val errorMessage: StateFlow<String?> get() = _errorMessage
fun setErrorMessage(text: String) {
errormsg(text)
_errorMessage.value = text
}
fun clearErrorMessage() {
_errorMessage.value = null
}
private val _tracerouteResponse = MutableStateFlow<String?>(null) private val _tracerouteResponse = MutableStateFlow<String?>(null)
val tracerouteResponse: StateFlow<String?> get() = _tracerouteResponse val tracerouteResponse: StateFlow<String?> get() = _tracerouteResponse