From 648ee3c763299f5611df5e85ba2a6ca4f86e0bb3 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Mon, 17 Apr 2023 14:07:42 +0300 Subject: [PATCH] Fix response closing on mirror switch --- .../core/network/MirrorSwitchInterceptor.kt | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/koitharu/kotatsu/core/network/MirrorSwitchInterceptor.kt b/app/src/main/java/org/koitharu/kotatsu/core/network/MirrorSwitchInterceptor.kt index aaf088c7e..67da24e09 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/network/MirrorSwitchInterceptor.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/network/MirrorSwitchInterceptor.kt @@ -4,6 +4,8 @@ import dagger.Lazy import okhttp3.Interceptor import okhttp3.Request import okhttp3.Response +import okhttp3.ResponseBody +import okhttp3.ResponseBody.Companion.toResponseBody import okhttp3.internal.canParseAsIpAddress import okhttp3.internal.closeQuietly import okhttp3.internal.publicsuffix.PublicSuffixDatabase @@ -23,9 +25,11 @@ class MirrorSwitchInterceptor @Inject constructor( return try { val response = chain.proceed(request) if (response.isFailed) { + val responseCopy = response.copy() + response.closeQuietly() trySwitchMirror(request, chain)?.also { - response.close() - } ?: response + responseCopy.closeQuietly() + } ?: responseCopy } else { response } @@ -85,4 +89,14 @@ class MirrorSwitchInterceptor @Inject constructor( val domain = PublicSuffixDatabase.get().getEffectiveTldPlusOne(host) ?: return null return host.removeSuffix(domain) + newDomain } + + private fun Response.copy(): Response { + return newBuilder() + .body(body?.copy()) + .build() + } + + private fun ResponseBody.copy(): ResponseBody { + return source().readByteArray().toResponseBody(contentType()) + } }