84 lines
3.6 KiB
Kotlin
84 lines
3.6 KiB
Kotlin
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
|
||
}
|
||
}
|