update
This commit is contained in:
@@ -1,4 +1,24 @@
|
||||
package ru.fincode.tsudesk.core.network
|
||||
|
||||
class NetworkCall {
|
||||
}
|
||||
import retrofit2.HttpException
|
||||
import ru.fincode.tsudesk.core.network.model.NetworkError
|
||||
import ru.fincode.tsudesk.core.network.model.NetworkResult
|
||||
import java.io.IOException
|
||||
import java.net.SocketTimeoutException
|
||||
|
||||
suspend inline fun <T> safeApiCall(
|
||||
crossinline block: suspend () -> T
|
||||
): NetworkResult<T> {
|
||||
return try {
|
||||
NetworkResult.Success(block())
|
||||
} catch (t: Throwable) {
|
||||
NetworkResult.Error(t.toNetworkError())
|
||||
}
|
||||
}
|
||||
|
||||
fun Throwable.toNetworkError(): NetworkError = when (this) {
|
||||
is SocketTimeoutException -> NetworkError.Timeout
|
||||
is IOException -> NetworkError.NoInternet
|
||||
is HttpException -> NetworkError.Http(code())
|
||||
else -> NetworkError.Unknown(this)
|
||||
}
|
||||
|
||||
@@ -9,12 +9,13 @@ import retrofit2.Retrofit
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Singleton
|
||||
import okhttp3.logging.HttpLoggingInterceptor
|
||||
import ru.fincode.tsudesk.core.network.interceptor.DebugInterceptor
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
object NetworkModule {
|
||||
|
||||
private const val TIMEOUT_SEC = 30L
|
||||
private const val TIMEOUT = 30L
|
||||
val logging = HttpLoggingInterceptor().apply {
|
||||
level = HttpLoggingInterceptor.Level.BODY
|
||||
}
|
||||
@@ -23,9 +24,9 @@ object NetworkModule {
|
||||
@Singleton
|
||||
fun provideOkHttpClient(): OkHttpClient =
|
||||
OkHttpClient.Builder()
|
||||
.connectTimeout(TIMEOUT_SEC, TimeUnit.SECONDS)
|
||||
.readTimeout(TIMEOUT_SEC, TimeUnit.SECONDS)
|
||||
.writeTimeout(TIMEOUT_SEC, TimeUnit.SECONDS)
|
||||
.connectTimeout(TIMEOUT, TimeUnit.SECONDS)
|
||||
.readTimeout(TIMEOUT, TimeUnit.SECONDS)
|
||||
.writeTimeout(TIMEOUT, TimeUnit.SECONDS)
|
||||
.retryOnConnectionFailure(true)
|
||||
.addInterceptor(DebugInterceptor())
|
||||
.build()
|
||||
|
||||
@@ -1,2 +1,20 @@
|
||||
package ru.fincode.tsudesk.core.network.interceptor
|
||||
package ru.fincode.tsudesk.core.network.interceptor
|
||||
|
||||
import android.util.Log
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Response
|
||||
|
||||
private const val TAG = "NETWORK_DEBUG"
|
||||
|
||||
class DebugInterceptor : Interceptor {
|
||||
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val request = chain.request()
|
||||
|
||||
Log.d(TAG, "URL: ${request.url}")
|
||||
Log.d(TAG, "Method: ${request.method}")
|
||||
Log.d(TAG, "Headers: ${request.headers}")
|
||||
|
||||
return chain.proceed(request)
|
||||
}
|
||||
}
|
||||
@@ -1,2 +1,8 @@
|
||||
package ru.fincode.tsudesk.core.network.model
|
||||
package ru.fincode.tsudesk.core.network.model
|
||||
|
||||
sealed class NetworkError {
|
||||
object NoInternet : NetworkError()
|
||||
object Timeout : NetworkError()
|
||||
data class Http(val code: Int) : NetworkError()
|
||||
data class Unknown(val throwable: Throwable) : NetworkError()
|
||||
}
|
||||
@@ -1,2 +1,6 @@
|
||||
package ru.fincode.tsudesk.core.network.model
|
||||
package ru.fincode.tsudesk.core.network.model
|
||||
|
||||
sealed class NetworkResult<out T> {
|
||||
data class Success<T>(val data: T) : NetworkResult<T>()
|
||||
data class Error(val error: NetworkError) : NetworkResult<Nothing>()
|
||||
}
|
||||
@@ -1,4 +1,8 @@
|
||||
package ru.fincode.tsudesk.core.network.model
|
||||
|
||||
class NetworkResultExt {
|
||||
}
|
||||
inline fun <T, R> NetworkResult<T>.map(
|
||||
transform: (T) -> R
|
||||
): NetworkResult<R> = when (this) {
|
||||
is NetworkResult.Success -> NetworkResult.Success(transform(data))
|
||||
is NetworkResult.Error -> this
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user