forked from melod1n/fast-messenger
refactor(logging): introduce custom FastLogger and replace direct Android logging
This commit is contained in:
@@ -15,6 +15,7 @@ dependencies {
|
||||
api(projects.core.common)
|
||||
api(projects.core.model)
|
||||
api(projects.core.datastore)
|
||||
api(projects.core.logger)
|
||||
|
||||
implementation(libs.moshi.kotlin)
|
||||
implementation(libs.koin.android)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package dev.meloda.fast.network
|
||||
|
||||
import android.util.Log
|
||||
import com.slack.eithernet.ApiException
|
||||
import com.slack.eithernet.errorType
|
||||
import com.slack.eithernet.toType
|
||||
import com.squareup.moshi.JsonDataException
|
||||
import dev.meloda.fast.logger.FastLogger
|
||||
import okhttp3.ResponseBody
|
||||
import retrofit2.Converter
|
||||
import retrofit2.Retrofit
|
||||
@@ -16,7 +16,10 @@ import java.lang.reflect.Type
|
||||
*
|
||||
* допускает Unit как SuccessType в случае невозможности каста ответа в ErrorType
|
||||
*/
|
||||
class ResponseConverterFactory(private val converter: JsonConverter) : Converter.Factory() {
|
||||
class ResponseConverterFactory(
|
||||
private val converter: JsonConverter,
|
||||
private val logger: FastLogger
|
||||
) : Converter.Factory() {
|
||||
|
||||
override fun responseBodyConverter(
|
||||
type: Type,
|
||||
@@ -29,6 +32,7 @@ class ResponseConverterFactory(private val converter: JsonConverter) : Converter
|
||||
successType = type,
|
||||
errorRaw = errorRaw,
|
||||
converter = converter,
|
||||
logger = logger
|
||||
)
|
||||
}
|
||||
|
||||
@@ -36,6 +40,7 @@ class ResponseConverterFactory(private val converter: JsonConverter) : Converter
|
||||
private val successType: Type,
|
||||
private val errorRaw: Class<*>,
|
||||
private val converter: JsonConverter,
|
||||
private val logger: FastLogger
|
||||
) : Converter<ResponseBody, Any?> {
|
||||
override fun convert(value: ResponseBody): Any? {
|
||||
val string = value.string()
|
||||
@@ -53,7 +58,7 @@ class ResponseConverterFactory(private val converter: JsonConverter) : Converter
|
||||
},
|
||||
onFailure = { failure ->
|
||||
if (failure is JsonDataException) {
|
||||
Log.d("ResponseBodyConverter", "convertJsonDataException: $failure")
|
||||
logger.error(this::class, "convert(): ERROR", failure)
|
||||
throw ApiException(
|
||||
RestApiError(
|
||||
errorCode = -1,
|
||||
@@ -68,10 +73,11 @@ class ResponseConverterFactory(private val converter: JsonConverter) : Converter
|
||||
converter.fromJson(errorRaw, string)
|
||||
}.fold(
|
||||
onSuccess = { errorModel ->
|
||||
Log.d("ResponseBodyConverter", "convert: $errorModel")
|
||||
logger.debug(this::class, "convert(): errorModel: $errorModel")
|
||||
throw ApiException(errorModel)
|
||||
},
|
||||
onFailure = { exception ->
|
||||
logger.error(this::class, "convert(): INNER: ERROR", exception)
|
||||
if (!isUnit) {
|
||||
throw exception
|
||||
} else {
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.slack.eithernet.integration.retrofit.ApiResultConverterFactory
|
||||
import com.squareup.moshi.Moshi
|
||||
import dev.meloda.fast.common.AppConstants
|
||||
import dev.meloda.fast.datastore.AppSettings
|
||||
import dev.meloda.fast.logger.FastLogger
|
||||
import dev.meloda.fast.network.JsonConverter
|
||||
import dev.meloda.fast.network.MoshiConverter
|
||||
import dev.meloda.fast.network.OAuthResultCallFactory
|
||||
@@ -123,7 +124,12 @@ private fun Scope.buildRetrofit(client: OkHttpClient): Retrofit {
|
||||
.baseUrl("${AppConstants.URL_API}/")
|
||||
.addConverterFactory(ApiResultConverterFactory)
|
||||
.addCallAdapterFactory(ApiResultCallAdapterFactory)
|
||||
.addConverterFactory(ResponseConverterFactory(get<JsonConverter>()))
|
||||
.addConverterFactory(
|
||||
ResponseConverterFactory(
|
||||
get<JsonConverter>(),
|
||||
get<FastLogger>()
|
||||
)
|
||||
)
|
||||
.addConverterFactory(MoshiConverterFactory.create(get()))
|
||||
.client(client)
|
||||
.build()
|
||||
|
||||
+11
-13
@@ -1,9 +1,9 @@
|
||||
package dev.meloda.fast.network.interceptor
|
||||
|
||||
import android.util.Log
|
||||
import dev.meloda.fast.common.extensions.listenValue
|
||||
import dev.meloda.fast.datastore.AppSettings
|
||||
import dev.meloda.fast.datastore.CaptchaTokenResult
|
||||
import dev.meloda.fast.logger.FastLogger
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
@@ -14,11 +14,7 @@ import org.json.JSONObject
|
||||
import java.util.concurrent.Executors
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
|
||||
class Error14HandlingInterceptor(
|
||||
// private val domains: Set<String> = emptySet(),
|
||||
) : Interceptor {
|
||||
|
||||
private val cookie = AtomicReference<String?>(null)
|
||||
class Error14HandlingInterceptor(private val logger: FastLogger) : Interceptor {
|
||||
|
||||
private companion object {
|
||||
private const val CAPTCHA_ERROR_CODE = 14
|
||||
@@ -26,6 +22,8 @@ class Error14HandlingInterceptor(
|
||||
private val executor = Executors.newSingleThreadExecutor()
|
||||
}
|
||||
|
||||
private val cookie = AtomicReference<String?>(null)
|
||||
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val request = chain.request().withCookie()
|
||||
val response = chain.proceed(request)
|
||||
@@ -41,23 +39,23 @@ class Error14HandlingInterceptor(
|
||||
|
||||
executor.submit {
|
||||
AppSettings.setCaptchaRedirectUri(redirectUri)
|
||||
Log.d("Error14Interceptor", "passCaptchaAndGetToken: $redirectUri")
|
||||
logger.debug(this::class, "passCaptchaAndGetToken: $redirectUri")
|
||||
|
||||
var job: Job? = null
|
||||
job = AppSettings.getCaptchaResultFlow()
|
||||
.listenValue(CoroutineScope(Dispatchers.IO)) {
|
||||
Log.d("Error14Interceptor", "passCaptchaAndGetToken: $it")
|
||||
logger.debug(this::class, "passCaptchaAndGetToken: $it")
|
||||
if (it != CaptchaTokenResult.Initial) {
|
||||
synchronized(tokenResult) {
|
||||
Log.d(
|
||||
"Error14Interceptor",
|
||||
logger.debug(
|
||||
this::class,
|
||||
"passCaptchaAndGetToken: SYNCHRONIZED: $it"
|
||||
)
|
||||
tokenResult.set(wrapResult(it))
|
||||
tokenResult.notifyAll()
|
||||
job?.cancel()
|
||||
Log.d(
|
||||
"Error14Interceptor",
|
||||
logger.debug(
|
||||
this::class,
|
||||
"passCaptchaAndGetToken: NULL RESULT"
|
||||
)
|
||||
AppSettings.setCaptchaResult(CaptchaTokenResult.Initial)
|
||||
@@ -71,7 +69,7 @@ class Error14HandlingInterceptor(
|
||||
tokenResult.wait()
|
||||
}
|
||||
|
||||
Log.d("Error14Interceptor", "passCaptchaAndGetToken: GET VALUE")
|
||||
logger.debug(this::class, "passCaptchaAndGetToken: GET VALUE")
|
||||
tokenResult.get().getOrThrow()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user