Dont throw a exception if the request fails for mdlist tracking
This commit is contained in:
parent
d64a8907eb
commit
da3681e602
@ -19,6 +19,7 @@ import exh.md.handlers.serializers.FollowsPageSerializer
|
||||
import exh.md.utils.FollowStatus
|
||||
import exh.md.utils.MdUtil
|
||||
import exh.metadata.metadata.MangaDexSearchMetadata
|
||||
import exh.util.awaitResponse
|
||||
import exh.util.floor
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import okhttp3.CacheControl
|
||||
@ -218,16 +219,8 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere
|
||||
headers,
|
||||
CacheControl.FORCE_NETWORK
|
||||
)
|
||||
try {
|
||||
val response = client.newCall(request).await()
|
||||
val response = client.newCall(request).awaitResponse()
|
||||
followStatusParse(response)
|
||||
} catch (e: Exception) {
|
||||
if (e.message.equals("HTTP error 404", true)) {
|
||||
Track.create(TrackManager.MDLIST).apply {
|
||||
status = FollowStatus.UNFOLLOWED.int
|
||||
}
|
||||
} else throw e
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,16 @@
|
||||
package exh.util
|
||||
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import okhttp3.Call
|
||||
import okhttp3.Callback
|
||||
import okhttp3.Response
|
||||
import rx.Observable
|
||||
import rx.Producer
|
||||
import rx.Subscription
|
||||
import java.io.IOException
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import kotlin.coroutines.resume
|
||||
import kotlin.coroutines.resumeWithException
|
||||
|
||||
fun Call.asObservableWithAsyncStacktrace(): Observable<Pair<Exception, Response>> {
|
||||
// Record stacktrace at creation time for easier debugging
|
||||
@ -52,3 +57,32 @@ fun Call.asObservableWithAsyncStacktrace(): Observable<Pair<Exception, Response>
|
||||
subscriber.setProducer(requestArbiter)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Similar to [Call.await] but it doesn't throw when the response is not successful
|
||||
*/
|
||||
suspend fun Call.awaitResponse(): Response {
|
||||
return suspendCancellableCoroutine { continuation ->
|
||||
enqueue(
|
||||
object : Callback {
|
||||
override fun onResponse(call: Call, response: Response) {
|
||||
continuation.resume(response)
|
||||
}
|
||||
|
||||
override fun onFailure(call: Call, e: IOException) {
|
||||
// Don't bother with resuming the continuation if it is already cancelled.
|
||||
if (continuation.isCancelled) return
|
||||
continuation.resumeWithException(e)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
continuation.invokeOnCancellation {
|
||||
try {
|
||||
cancel()
|
||||
} catch (ex: Throwable) {
|
||||
// Ignore cancel exception
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user