[NineManga] Fix favicons redirect

feature/favicons
Koitharu 4 years ago
parent c6b9180013
commit 358910bafe
No known key found for this signature in database
GPG Key ID: 8E861F8CE6E7CE27

@ -112,7 +112,7 @@ abstract class MangaParser @InternalParsersApi constructor(val source: MangaSour
) )
open fun getFaviconUrl() = "https://${getDomain()}/favicon.ico" open fun getFaviconUrl() = "https://${getDomain()}/favicon.ico"
suspend fun parseFavicons(): Favicons { open suspend fun parseFavicons(): Favicons {
return FaviconParser(context, getDomain()).parseFavicons() return FaviconParser(context, getDomain()).parseFavicons()
} }

@ -171,6 +171,10 @@ internal abstract class NineMangaParser(
} ?: parseFailed("Root not found") } ?: parseFailed("Root not found")
} }
override suspend fun parseFavicons(): Favicons {
return FaviconParser(context, getDomain()).addHeaders(headers).parseFavicons()
}
private fun parseStatus(status: String) = when { private fun parseStatus(status: String) = when {
status.contains("Ongoing") -> MangaState.ONGOING status.contains("Ongoing") -> MangaState.ONGOING
status.contains("Completed") -> MangaState.FINISHED status.contains("Completed") -> MangaState.FINISHED

@ -1,5 +1,6 @@
package org.koitharu.kotatsu.parsers.util package org.koitharu.kotatsu.parsers.util
import okhttp3.Headers
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.model.Favicon import org.koitharu.kotatsu.parsers.model.Favicon
@ -8,9 +9,16 @@ import org.koitharu.kotatsu.parsers.util.json.mapJSON
class FaviconParser(private val context: MangaLoaderContext, private val domain: String) { class FaviconParser(private val context: MangaLoaderContext, private val domain: String) {
private val headers = Headers.Builder()
fun addHeaders(headers: Headers): FaviconParser {
this.headers.addAll(headers)
return this
}
suspend fun parseFavicons(): Favicons { suspend fun parseFavicons(): Favicons {
val url = "https://$domain" val url = "https://$domain"
val doc = context.httpGet(url).parseHtml() val doc = context.httpGet(url, headers.build()).parseHtml()
val result = HashSet<Favicon>() val result = HashSet<Favicon>()
val manifestLink = doc.getElementsByAttributeValue("rel", "manifest").firstOrNull() val manifestLink = doc.getElementsByAttributeValue("rel", "manifest").firstOrNull()
?.attrAsAbsoluteUrlOrNull("href") ?.attrAsAbsoluteUrlOrNull("href")
@ -51,7 +59,7 @@ class FaviconParser(private val context: MangaLoaderContext, private val domain:
} }
private suspend fun parseManifest(url: String): List<Favicon> { private suspend fun parseManifest(url: String): List<Favicon> {
val json = context.httpGet(url).parseJson() val json = context.httpGet(url, headers.build()).parseJson()
val icons = json.getJSONArray("icons") val icons = json.getJSONArray("icons")
return icons.mapJSON { jo -> return icons.mapJSON { jo ->
Favicon( Favicon(

@ -17,7 +17,7 @@ class CloudFlareInterceptor : Interceptor {
if (response.code == HTTP_FORBIDDEN || response.code == HTTP_UNAVAILABLE) { if (response.code == HTTP_FORBIDDEN || response.code == HTTP_UNAVAILABLE) {
if (response.header(HEADER_SERVER)?.startsWith(SERVER_CLOUDFLARE) == true) { if (response.header(HEADER_SERVER)?.startsWith(SERVER_CLOUDFLARE) == true) {
response.closeQuietly() response.closeQuietly()
throw CloudFlareProtectedException(chain.request().url.toString()) throw CloudFlareProtectedException(response.request.url.toString())
} }
} }
return response return response

Loading…
Cancel
Save