kopia lustrzana https://github.com/meshtastic/Meshtastic-Android
fix: Distinguish between an empty response and a network error (#1938)
rodzic
be437ebb91
commit
139a17f22f
|
|
@ -52,7 +52,9 @@ class DeviceHardwareRepository @Inject constructor(
|
|||
}
|
||||
try {
|
||||
debug("Fetching device hardware from server")
|
||||
localDataSource.insertAllDeviceHardware(apiDataSource.getAllDeviceHardware())
|
||||
val deviceHardware = apiDataSource.getAllDeviceHardware()
|
||||
?: throw IOException("empty response from server")
|
||||
localDataSource.insertAllDeviceHardware(deviceHardware)
|
||||
val cachedHardware = localDataSource.getByHwModel(hwModel)
|
||||
val externalModel = cachedHardware?.asExternalModel()
|
||||
return@withContext externalModel
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ class FirmwareReleaseRepository @Inject constructor(
|
|||
try {
|
||||
debug("Fetching firmware releases from server")
|
||||
val networkFirmwareReleases = apiDataSource.getFirmwareReleases()
|
||||
?: throw IOException("empty response from server")
|
||||
val releases = when (releaseType) {
|
||||
FirmwareReleaseType.STABLE -> networkFirmwareReleases.releases.stable
|
||||
FirmwareReleaseType.ALPHA -> networkFirmwareReleases.releases.alpha
|
||||
|
|
|
|||
|
|
@ -19,17 +19,19 @@ package com.geeksville.mesh.network.retrofit
|
|||
|
||||
import com.geeksville.mesh.network.model.NetworkDeviceHardware
|
||||
import com.geeksville.mesh.network.model.NetworkFirmwareReleases
|
||||
import okhttp3.ResponseBody.Companion.toResponseBody
|
||||
import retrofit2.Response
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
private const val ERROR_NO_OP = 420
|
||||
@Singleton
|
||||
class NoOpApiService@Inject constructor() : ApiService {
|
||||
override suspend fun getDeviceHardware(): Response<List<NetworkDeviceHardware>> {
|
||||
return Response.success(emptyList())
|
||||
return Response.error(ERROR_NO_OP, "Not Found".toResponseBody(null))
|
||||
}
|
||||
|
||||
override suspend fun getFirmwareReleases(): Response<NetworkFirmwareReleases> {
|
||||
return Response.success(NetworkFirmwareReleases(emptyList()))
|
||||
return Response.error(ERROR_NO_OP, "Not Found".toResponseBody(null))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import javax.inject.Inject
|
|||
class DeviceHardwareRemoteDataSource @Inject constructor(
|
||||
private val apiService: ApiService,
|
||||
) {
|
||||
suspend fun getAllDeviceHardware(): List<NetworkDeviceHardware> = withContext(Dispatchers.IO) {
|
||||
apiService.getDeviceHardware().body() ?: emptyList()
|
||||
suspend fun getAllDeviceHardware(): List<NetworkDeviceHardware>? = withContext(Dispatchers.IO) {
|
||||
apiService.getDeviceHardware().body()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import javax.inject.Inject
|
|||
class FirmwareReleaseRemoteDataSource @Inject constructor(
|
||||
private val apiService: ApiService,
|
||||
) {
|
||||
suspend fun getFirmwareReleases(): NetworkFirmwareReleases = withContext(Dispatchers.IO) {
|
||||
apiService.getFirmwareReleases().body() ?: NetworkFirmwareReleases()
|
||||
suspend fun getFirmwareReleases(): NetworkFirmwareReleases? = withContext(Dispatchers.IO) {
|
||||
apiService.getFirmwareReleases().body()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue