diff --git a/src/all/mangadex/build.gradle b/src/all/mangadex/build.gradle index 1e63414ee..101966ce6 100644 --- a/src/all/mangadex/build.gradle +++ b/src/all/mangadex/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'MangaDex' pkgNameSuffix = 'all.mangadex' extClass = '.MangaDexFactory' - extVersionCode = 191 + extVersionCode = 192 isNsfw = true } diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MdAtHomeReportInterceptor.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MdAtHomeReportInterceptor.kt index 4c4bc315f..c05de244f 100644 --- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MdAtHomeReportInterceptor.kt +++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MdAtHomeReportInterceptor.kt @@ -12,6 +12,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Interceptor import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient +import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.Response import uy.kohesive.injekt.injectLazy @@ -37,21 +38,7 @@ class MdAtHomeReportInterceptor( Log.e("MangaDex", "Connecting to MD@Home node at $url") - val result = ImageReportDto( - url = url, - success = response.isSuccessful, - bytes = response.peekBody(Long.MAX_VALUE).bytes().size, - cached = response.headers["X-Cache"] == "HIT", - duration = response.receivedResponseAtMillis - response.sentRequestAtMillis, - ) - - val payload = json.encodeToString(result) - - val reportRequest = POST( - url = MDConstants.atHomePostUrl, - headers = headers, - body = payload.toRequestBody(JSON_MEDIA_TYPE), - ) + val reportRequest = mdAtHomeReportRequest(response) // Execute the report endpoint network call asynchronously to avoid blocking // the reader from showing the image once it's fully loaded if the report call @@ -66,8 +53,12 @@ class MdAtHomeReportInterceptor( Log.e("MangaDex", "Error connecting to MD@Home node, fallback to uploads server") + val imagePath = originalRequest.url.pathSegments + .dropWhile { it != "data" && it != "data-saver" } + .joinToString("/") + val fallbackUrl = MDConstants.cdnUrl.toHttpUrl().newBuilder() - .addPathSegments(originalRequest.url.pathSegments.dropWhile{ it != "data" && it != "data-saver" }.joinToString("/")) + .addPathSegments(imagePath) .build() val fallbackRequest = originalRequest.newBuilder() @@ -78,6 +69,24 @@ class MdAtHomeReportInterceptor( return chain.proceed(fallbackRequest) } + private fun mdAtHomeReportRequest(response: Response): Request { + val result = ImageReportDto( + url = response.request.url.toString(), + success = response.isSuccessful, + bytes = response.peekBody(Long.MAX_VALUE).bytes().size, + cached = response.headers["X-Cache"] == "HIT", + duration = response.receivedResponseAtMillis - response.sentRequestAtMillis, + ) + + val payload = json.encodeToString(result) + + return POST( + url = MDConstants.atHomePostUrl, + headers = headers, + body = payload.toRequestBody(JSON_MEDIA_TYPE), + ) + } + companion object { private val JSON_MEDIA_TYPE = "application/json".toMediaType() private val MD_AT_HOME_URL_REGEX = diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MdUserAgentInterceptor.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MdUserAgentInterceptor.kt index e20adce6e..1771daf94 100644 --- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MdUserAgentInterceptor.kt +++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MdUserAgentInterceptor.kt @@ -19,29 +19,22 @@ class MdUserAgentInterceptor( MDConstants.defaultUserAgent, ) - private fun getUserAgent(): String? { - return preferences.customUserAgent - } - override fun intercept(chain: Interceptor.Chain): Response { - try { - val originalRequest = chain.request() + val originalRequest = chain.request() - val newUserAgent = getUserAgent() ?: return chain.proceed(originalRequest) + val newUserAgent = preferences.customUserAgent + ?: return chain.proceed(originalRequest) - val originalHeaders = originalRequest.headers + val originalHeaders = originalRequest.headers - val modifiedHeaders = originalHeaders.newBuilder() - .set("User-Agent", newUserAgent) - .build() + val modifiedHeaders = originalHeaders.newBuilder() + .set("User-Agent", newUserAgent) + .build() - return chain.proceed( - originalRequest.newBuilder() - .headers(modifiedHeaders) - .build(), - ) - } catch (e: Exception) { - throw IOException("MdUserAgentInterceptor failed with error: ${e.message}") - } + val modifiedRequest = originalRequest.newBuilder() + .headers(modifiedHeaders) + .build() + + return chain.proceed(modifiedRequest) } }