Add implementation of parameter cancelRequestsOnFail

This commit is contained in:
Kirill Nayduik 2022-04-19 15:53:35 +03:00
parent c5ff5f3479
commit f1111a3faf
2 changed files with 11 additions and 6 deletions

View File

@ -15,25 +15,30 @@ class BlockingCall(
return
}
val isBlocking = callDelegate.isBlocking()
val (isBlocking, cancelOnFail) = callDelegate.blocking()
.let { (it != null) to (it?.cancelRequestsOnFail == true) }
if (isBlocking) PendingRequestsManager.isPending = true
callDelegate.enqueue(object: Callback<Any> {
override fun onResponse(call: Call<Any>, response: Response<Any>) {
callback.onResponse(call, response)
PendingRequestsManager.isPending = false
callback.onResponse(call, response)
if (isBlocking) PendingRequestsManager.executePendingRequests()
}
override fun onFailure(call: Call<Any>, t: Throwable) {
callback.onFailure(call, t)
PendingRequestsManager.isPending = false
callback.onFailure(call, t)
if (isBlocking) PendingRequestsManager.dropPendingRequests()
when {
isBlocking && cancelOnFail -> PendingRequestsManager.dropPendingRequests()
isBlocking -> PendingRequestsManager.executePendingRequests()
}
}
})
}
private fun Call<Any>.isBlocking() = request().getAnnotation(BlockingRequest::class.java) != null
private fun Call<Any>.blocking() = request().getAnnotation(BlockingRequest::class.java)
}

View File

@ -2,4 +2,4 @@ package ru.touchin.network.blocking
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION)
annotation class BlockingRequest(val abortOnFail: Boolean = false)
annotation class BlockingRequest(val cancelRequestsOnFail: Boolean = false)