Tachiyomi-Extensions/multisrc/overrides/madara/toonily/src/Toonily.kt

90 lines
2.7 KiB
Kotlin
Raw Normal View History

package eu.kanade.tachiyomi.extension.en.toonily
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.FilterList
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.OkHttpClient
import okhttp3.Request
2022-02-22 12:37:18 +00:00
import java.text.SimpleDateFormat
import java.util.Locale
private const val domain = "toonily.com"
class Toonily : Madara(
"Toonily",
"https://$domain",
"en",
2023-02-11 19:21:03 +00:00
SimpleDateFormat("MMM d, yy", Locale.US),
) {
private val cookieInterceptor = CookieInterceptor(domain, "toonily-mature", "1")
override val client: OkHttpClient = super.client.newBuilder()
.addNetworkInterceptor(cookieInterceptor)
.build()
override val mangaSubString = "webtoon"
override fun searchPage(page: Int): String {
return if (page > 1) {
"page/$page/"
} else {
""
}
}
private fun searchPage(page: Int, query: String): String {
val urlQuery = query.trim()
.lowercase(Locale.US)
.replace(titleSpecialCharactersRegex, "-")
.replace(trailingHyphenRegex, "")
.let { if (it.isNotEmpty()) "$it/" else it }
return if (page > 1) {
"search/${urlQuery}page/$page/"
} else {
"search/$urlQuery"
}
}
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val request = super.searchMangaRequest(page, query, filters)
val queries = request.url.queryParameterNames
.filterNot { it == "s" }
val newUrl = "$baseUrl/${searchPage(page, query)}".toHttpUrlOrNull()!!.newBuilder().apply {
queries.map { q ->
request.url.queryParameterValues(q).map {
this.addQueryParameter(q, it)
}
}
}.build()
return request.newBuilder()
.url(newUrl)
.build()
}
override fun genresRequest(): Request {
return GET("$baseUrl/search/?post_type=wp-manga", headers)
}
// The source customized the Madara theme and broke the filter.
override val filterNonMangaItems = false
override val useNewChapterEndpoint: Boolean = true
override fun searchMangaSelector() = "div.page-item-detail.manga"
2023-03-24 02:31:02 +00:00
override val pageListParseSelector = "div.reading-content div"
override fun parseChapterDate(date: String?): Long {
val formattedDate = if (date?.contains("UP") == true) "today" else date
return super.parseChapterDate(formattedDate)
}
companion object {
val titleSpecialCharactersRegex = "[^a-z0-9]+".toRegex()
val trailingHyphenRegex = "-+$".toRegex()
}
}