Create Extension to convert a Response to a Failure

This commit is contained in:
Benoit Marty 2019-09-25 10:56:18 +02:00
parent b24a372262
commit 9b91b6ea87

View file

@ -23,9 +23,9 @@ import im.vector.matrix.android.api.failure.Failure
import im.vector.matrix.android.api.failure.MatrixError import im.vector.matrix.android.api.failure.MatrixError
import im.vector.matrix.android.internal.di.MoshiProvider import im.vector.matrix.android.internal.di.MoshiProvider
import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CancellationException
import okhttp3.ResponseBody
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import retrofit2.Call import retrofit2.Call
import retrofit2.Response
import timber.log.Timber import timber.log.Timber
import java.io.IOException import java.io.IOException
@ -43,7 +43,7 @@ internal class Request<DATA> {
response.body() response.body()
?: throw IllegalStateException("The request returned a null body") ?: throw IllegalStateException("The request returned a null body")
} else { } else {
throw manageFailure(response.errorBody(), response.code()) throw response.toFailure()
} }
} catch (exception: Throwable) { } catch (exception: Throwable) {
throw when (exception) { throw when (exception) {
@ -56,10 +56,8 @@ internal class Request<DATA> {
} }
} }
private fun manageFailure(errorBody: ResponseBody?, httpCode: Int): Throwable { private fun <T> Response<T>.toFailure(): Failure {
if (errorBody == null) { val errorBody = errorBody() ?: return Failure.Unknown(RuntimeException("errorBody() should not be null"))
return RuntimeException("Error body should not be null")
}
val errorBodyStr = errorBody.string() val errorBodyStr = errorBody.string()
@ -74,13 +72,13 @@ internal class Request<DATA> {
EventBus.getDefault().post(ConsentNotGivenError(matrixError.consentUri)) EventBus.getDefault().post(ConsentNotGivenError(matrixError.consentUri))
} }
return Failure.ServerError(matrixError, httpCode) return Failure.ServerError(matrixError, code())
} }
} catch (ex: JsonDataException) { } catch (ex: JsonDataException) {
// This is not a MatrixError // This is not a MatrixError
Timber.w("The error returned by the server is not a MatrixError") Timber.w("The error returned by the server is not a MatrixError")
} }
return Failure.OtherServerError(errorBodyStr, httpCode) return Failure.OtherServerError(errorBodyStr, code())
} }
} }