Fix ZeroTheme (#10078)
* Fix ZeroTheme * Throws an exception when old entries are being processed * Remove url prefix
This commit is contained in:
parent
9f1f449d96
commit
648bb3c295
@ -2,4 +2,4 @@ plugins {
|
||||
id("lib-multisrc")
|
||||
}
|
||||
|
||||
baseVersionCode = 1
|
||||
baseVersionCode = 2
|
||||
|
@ -1,16 +1,19 @@
|
||||
package eu.kanade.tachiyomi.multisrc.zerotheme
|
||||
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import eu.kanade.tachiyomi.source.model.MangasPage
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import keiyoushi.utils.parseAs
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Element
|
||||
import java.io.IOException
|
||||
|
||||
abstract class ZeroTheme(
|
||||
override val name: String,
|
||||
@ -20,14 +23,25 @@ abstract class ZeroTheme(
|
||||
|
||||
override val supportsLatest: Boolean = true
|
||||
|
||||
override val client = network.cloudflareClient.newBuilder()
|
||||
.rateLimit(2)
|
||||
.build()
|
||||
override val client = network.cloudflareClient
|
||||
|
||||
open val cdnUrl: String = "https://cdn.${baseUrl.substringAfterLast("/")}"
|
||||
|
||||
open val imageLocation: String = "images"
|
||||
|
||||
open val mangaSubString: String by lazy {
|
||||
val response = client.newCall(GET(baseUrl, headers)).execute()
|
||||
val script = response.asJsoup().select("script")
|
||||
.map(Element::data)
|
||||
.firstOrNull(MANGA_SUBSTRING_REGEX::containsMatchIn)
|
||||
?: throw IOException("manga substring não foi localizado")
|
||||
|
||||
MANGA_SUBSTRING_REGEX.find(script)?.groups?.get(1)?.value
|
||||
?: throw IOException("Não foi extrair a substring do manga")
|
||||
}
|
||||
|
||||
open val chapterSubString: String = "chapter"
|
||||
|
||||
private val sourceLocation: String get() = "$cdnUrl/$imageLocation"
|
||||
|
||||
// =========================== Popular ================================
|
||||
@ -61,14 +75,30 @@ abstract class ZeroTheme(
|
||||
|
||||
// =========================== Details =================================
|
||||
|
||||
override fun getMangaUrl(manga: SManga) = "$baseUrl/$mangaSubString/${manga.url.substringAfterLast("/")}"
|
||||
|
||||
override fun mangaDetailsRequest(manga: SManga): Request {
|
||||
checkEntry(manga.url)
|
||||
return GET(getMangaUrl(manga), headers)
|
||||
}
|
||||
|
||||
override fun mangaDetailsParse(response: Response) = response.toDto<MangaDetailsDto>().toSManga(sourceLocation)
|
||||
|
||||
// =========================== Chapter =================================
|
||||
|
||||
override fun getChapterUrl(chapter: SChapter) = "$baseUrl/$chapterSubString/${chapter.url.substringAfterLast("/")}"
|
||||
|
||||
override fun chapterListRequest(manga: SManga) = mangaDetailsRequest(manga)
|
||||
|
||||
override fun chapterListParse(response: Response) = response.toDto<MangaDetailsDto>().toSChapterList()
|
||||
|
||||
// =========================== Pages ===================================
|
||||
|
||||
override fun pageListRequest(chapter: SChapter): Request {
|
||||
checkEntry(chapter.url)
|
||||
return GET(getChapterUrl(chapter), headers)
|
||||
}
|
||||
|
||||
override fun pageListParse(response: Response): List<Page> =
|
||||
response.toDto<PageDto>().toPageList(sourceLocation)
|
||||
|
||||
@ -76,8 +106,18 @@ abstract class ZeroTheme(
|
||||
|
||||
// =========================== Utilities ===============================
|
||||
|
||||
private fun checkEntry(url: String) {
|
||||
if (listOf(mangaSubString, chapterSubString).any(url::contains)) {
|
||||
throw IOException("Migre a obra para extensão $name")
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <reified T> Response.toDto(): T {
|
||||
val jsonString = asJsoup().selectFirst("[data-page]")!!.attr("data-page")
|
||||
return jsonString.parseAs<T>()
|
||||
}
|
||||
|
||||
companion object {
|
||||
val MANGA_SUBSTRING_REGEX = """"(\w+)\\/\{slug\}""".toRegex()
|
||||
}
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ class MangaDto(
|
||||
else -> SManga.UNKNOWN
|
||||
}
|
||||
genre = genres?.joinToString { it.name }
|
||||
url = "/comic/$slug"
|
||||
url = slug
|
||||
}
|
||||
|
||||
@Serializable
|
||||
@ -130,7 +130,7 @@ class ChapterDto(
|
||||
name = number.toString()
|
||||
chapter_number = number
|
||||
date_upload = dateFormat.tryParse(createdAt)
|
||||
url = "/chapter/$path"
|
||||
url = path
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
@ -13,4 +13,6 @@ class LerToons : ZeroTheme(
|
||||
override val client = network.cloudflareClient.newBuilder()
|
||||
.rateLimit(2)
|
||||
.build()
|
||||
|
||||
override val mangaSubString: String = "manga"
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user