MangaDex - MD@Home token handling (#3721)

* MangaDex - MD@Home token handling

* finalization
This commit is contained in:
Mike 2020-07-07 19:41:00 -04:00 committed by GitHub
parent 5f22e4677e
commit 8e1197b3b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 12 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'MangaDex'
pkgNameSuffix = 'all.mangadex'
extClass = '.MangaDexFactory'
extVersionCode = 94
extVersionCode = 95
libVersion = '1.2'
}

View File

@ -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<String, Long>()
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