From 8e1197b3b9cad53075a35c41cc956c29fac0ee09 Mon Sep 17 00:00:00 2001 From: Mike <51273546+SnakeDoc83@users.noreply.github.com> Date: Tue, 7 Jul 2020 19:41:00 -0400 Subject: [PATCH] MangaDex - MD@Home token handling (#3721) * MangaDex - MD@Home token handling * finalization --- src/all/mangadex/build.gradle | 2 +- .../extension/all/mangadex/MangaDex.kt | 47 ++++++++++++++----- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/all/mangadex/build.gradle b/src/all/mangadex/build.gradle index 2c703aed4..ed0543952 100644 --- a/src/all/mangadex/build.gradle +++ b/src/all/mangadex/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'MangaDex' pkgNameSuffix = 'all.mangadex' extClass = '.MangaDexFactory' - extVersionCode = 94 + extVersionCode = 95 libVersion = '1.2' } diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDex.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDex.kt index aaadca54f..7631cbca7 100644 --- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDex.kt +++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDex.kt @@ -55,7 +55,7 @@ abstract class MangaDex( override val baseUrl = "https://www.mangadex.org" - private val cdnUrl = "https://www.mangadex.org" // "https://s0.mangadex.org" + private val cdnUrl = "https://mangadex.org" // "https://s0.mangadex.org" override val supportsLatest = true @@ -590,13 +590,46 @@ abstract class MangaDex( val server = json.get("server").string pageArray.forEach { - val url = "$server$hash/${it.asString}" - pages.add(Page(pages.size, "", getImageUrl(url))) + val url = "$hash/${it.asString}" + pages.add(Page(pages.size, "$server,${response.request().url()},${Date().time}", url)) } return pages } + override fun imageRequest(page: Page): Request { + val url = when { + // Legacy + page.url.isEmpty() -> page.imageUrl!! + // Some images are hosted elsewhere + !page.url.startsWith("http") -> baseUrl + page.url.substringBefore(",") + page.imageUrl + // New chapters on MD servers + page.url.contains("https://mangadex.org/data") -> page.url.substringBefore(",") + page.imageUrl + // MD@Home token handling + else -> { + val tokenLifespan = 5 * 60 * 1000 + val data = page.url.split(",") + var tokenedServer = data[0] + if (Date().time - data[2].toLong() > tokenLifespan) { + val tokenRequestUrl = data[1] + val cacheControl = if (Date().time - (tokenTracker[tokenRequestUrl] ?: 0) > tokenLifespan) { + tokenTracker[tokenRequestUrl] = Date().time + CacheControl.FORCE_NETWORK + } else { + CacheControl.FORCE_CACHE + } + val jsonData = client.newCall(GET(tokenRequestUrl, headers, cacheControl)).execute().body()!!.string() + tokenedServer = JsonParser().parse(jsonData).asJsonObject.get("server").string + } + tokenedServer + page.imageUrl + } + } + return GET(url, headers) + } + + // chapter url where we get the token, last request time + private val tokenTracker = hashMapOf() + override fun imageUrlParse(document: Document): String = "" private fun parseStatus(status: Int) = when (status) { @@ -604,14 +637,6 @@ abstract class MangaDex( else -> SManga.UNKNOWN } - private fun getImageUrl(attr: String): String { - // Some images are hosted elsewhere - if (attr.startsWith("http")) { - return attr - } - return baseUrl + attr - } - override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) { val r18Pref = androidx.preference.ListPreference(screen.context).apply { key = SHOW_R18_PREF_Title