diff --git a/src/all/mangadex/build.gradle b/src/all/mangadex/build.gradle index 8a3b5b201..9b71ad66b 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 = 123 + extVersionCode = 124 libVersion = '1.2' containsNsfw = true } diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexHelper.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexHelper.kt index 3df9fd2ab..93dcec324 100644 --- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexHelper.kt +++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexHelper.kt @@ -19,6 +19,7 @@ import okhttp3.Request import org.jsoup.parser.Parser import java.util.Date import java.util.Locale +import java.util.concurrent.TimeUnit class MangaDexHelper() { @@ -106,6 +107,12 @@ class MangaDexHelper() { // chapter url where we get the token, last request time private val tokenTracker = hashMapOf() + companion object { + val USE_CACHE = CacheControl.Builder() + .maxStale(Integer.MAX_VALUE, TimeUnit.SECONDS) + .build() + } + // Check the token map to see if the md@home host is still valid fun getValidImageUrlForPage(page: Page, headers: Headers, client: OkHttpClient): Request { val data = page.url.split(",") @@ -123,7 +130,7 @@ class MangaDexHelper() { ) { CacheControl.FORCE_NETWORK } else { - CacheControl.FORCE_CACHE + USE_CACHE } getMdAtHomeUrl(tokenRequestUrl, client, headers, cacheControl) } @@ -145,6 +152,14 @@ class MangaDexHelper() { } val response = client.newCall(GET(tokenRequestUrl, headers, cacheControl)).execute() + + // This check is for the error that causes pages to fail to load. + // It should never be entered, but in case it is, we retry the request. + if (response.code == 504) { + Log.wtf("MangaDex", "Failed to read cache for \"$tokenRequestUrl\"") + return getMdAtHomeUrl(tokenRequestUrl, client, headers, CacheControl.FORCE_NETWORK) + } + return json.decodeFromString(response.body!!.string()).baseUrl }