Tachiyomi-Extensions/multisrc/overrides/wpmangastream/asurascans/src/AsuraScansFactory.kt

84 lines
3.6 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package eu.kanade.tachiyomi.extension.all.asurascans
import eu.kanade.tachiyomi.source.SourceFactory
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SManga
import org.jsoup.nodes.Document
import java.text.SimpleDateFormat
import java.util.Locale
class AsuraScansFactory : SourceFactory {
override fun createSources() = listOf(
AsuraScansEn(),
AsuraScansTr()
)
}
class AsuraScansEn : AsuraScans("https://www.asurascans.com", "en", SimpleDateFormat("MMM d, yyyy", Locale.US)) {
override val mangaDetailsSelectorDescription = "div.desc p, div.entry-content p, div[itemprop=description]:not(:has(p))"
override val pageSelector = "div.rdminimal > img, div.rdminimal > p > img"
// Skip scriptPages
override fun pageListParse(document: Document): List<Page> {
return document.select(pageSelector)
.filterNot { it.attr("src").isNullOrEmpty() }
.mapIndexed { i, img -> Page(i, "", img.attr("src")) }
}
}
class AsuraScansTr : AsuraScans("https://tr.asurascans.com", "tr", SimpleDateFormat("MMM d, yyyy", Locale("tr"))) {
override fun mangaDetailsParse(document: Document): SManga {
return SManga.create().apply {
document.select("div.bigcontent").firstOrNull()?.let { infoElement ->
status = parseStatus(infoElement.select(".imptdt:contains(Durum) i").firstOrNull()?.ownText())
infoElement.select(".fmed b:contains(Yazar)+span").firstOrNull()?.ownText().let {
if (it.isNullOrBlank().not() && it != "N/A" && it != "-") {
author = it
}
}
infoElement.select(".fmed b:contains(Çizer)+span").firstOrNull()?.ownText().let {
if (it.isNullOrBlank().not() && it != "N/A" && it != "-") {
artist = it
}
}
description = infoElement.select("div.desc p, div.entry-content p").joinToString("\n") { it.text() }
thumbnail_url = infoElement.select("div.thumb img").imgAttr()
val genres = infoElement.select(".mgen a")
.map { element -> element.text().lowercase(Locale.ROOT) }
.toMutableSet()
// add series type(manga/manhwa/manhua/other) thinggy to genre
document.select(seriesTypeSelector).firstOrNull()?.ownText()?.let {
if (it.isEmpty().not() && genres.contains(it).not()) {
genres.add(it.lowercase(Locale.ROOT))
}
}
genre = genres.toList().map { it.capitalize(Locale.ROOT) }.joinToString(", ")
// add alternative name to manga description
document.select(altNameSelector).firstOrNull()?.ownText()?.let {
if (it.isBlank().not() && it != "N/A" && it != "-") {
description = when {
description.isNullOrBlank() -> altName + it
else -> description + "\n\n$altName" + it
}
}
}
}
}
}
override val seriesTypeSelector = ".imptdt:contains(Tür) a"
override val altName: String = "Alternatif isim: "
override fun parseStatus(element: String?): Int = when {
element == null -> SManga.UNKNOWN
listOf("Devam Ediyor").any { it.contains(element, ignoreCase = true) } -> SManga.ONGOING
listOf("Tamamlandı").any { it.contains(element, ignoreCase = true) } -> SManga.COMPLETED
else -> SManga.UNKNOWN
}
}