From f1111a3fafd0eb7af5cb178c0982680fe19b0776 Mon Sep 17 00:00:00 2001 From: Kirill Nayduik Date: Tue, 19 Apr 2022 15:53:35 +0300 Subject: [PATCH] Add implementation of parameter cancelRequestsOnFail --- .../ru/touchin/network/blocking/BlockingCall.kt | 15 ++++++++++----- .../touchin/network/blocking/BlockingRequest.kt | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/network/src/main/java/ru/touchin/network/blocking/BlockingCall.kt b/network/src/main/java/ru/touchin/network/blocking/BlockingCall.kt index 92f35cd..4f3783c 100644 --- a/network/src/main/java/ru/touchin/network/blocking/BlockingCall.kt +++ b/network/src/main/java/ru/touchin/network/blocking/BlockingCall.kt @@ -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 { override fun onResponse(call: Call, response: Response) { - callback.onResponse(call, response) PendingRequestsManager.isPending = false + callback.onResponse(call, response) if (isBlocking) PendingRequestsManager.executePendingRequests() } override fun onFailure(call: Call, 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.isBlocking() = request().getAnnotation(BlockingRequest::class.java) != null + private fun Call.blocking() = request().getAnnotation(BlockingRequest::class.java) } diff --git a/network/src/main/java/ru/touchin/network/blocking/BlockingRequest.kt b/network/src/main/java/ru/touchin/network/blocking/BlockingRequest.kt index 1cf3995..4065828 100644 --- a/network/src/main/java/ru/touchin/network/blocking/BlockingRequest.kt +++ b/network/src/main/java/ru/touchin/network/blocking/BlockingRequest.kt @@ -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)