104 lines
3.9 KiB
Kotlin
104 lines
3.9 KiB
Kotlin
package eu.kanade.tachiyomi.extension.es.templescanesp
|
|
|
|
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
|
import eu.kanade.tachiyomi.network.POST
|
|
import eu.kanade.tachiyomi.source.model.SChapter
|
|
import eu.kanade.tachiyomi.source.model.SManga
|
|
import okhttp3.FormBody
|
|
import okhttp3.Request
|
|
import org.jsoup.nodes.Element
|
|
import java.text.SimpleDateFormat
|
|
import java.util.Locale
|
|
|
|
class TempleScanEsp : Madara(
|
|
"TempleScan",
|
|
"https://templescanesp.com",
|
|
"es",
|
|
SimpleDateFormat("dd.MM.yyyy", Locale("es")),
|
|
) {
|
|
override val mangaSubString = "series"
|
|
|
|
override fun popularMangaSelector() = "div:has(> div#series-card)"
|
|
override val popularMangaUrlSelector = "div#series-card a.series-link"
|
|
override fun popularMangaNextPageSelector() = "body:not(:has(.no-posts))"
|
|
|
|
override val mangaDetailsSelectorAuthor = "div.post-content_item:contains(Autor) div.summary-content"
|
|
override val mangaDetailsSelectorArtist = "div.post-content_item:contains(Artista) div.summary-content"
|
|
override val mangaDetailsSelectorStatus = "div.post-content_item:contains(Estado) div.summary-content"
|
|
|
|
private fun loadMoreRequest(page: Int, metaKey: String): Request {
|
|
val formBody = FormBody.Builder().apply {
|
|
add("action", "madara_load_more")
|
|
add("page", page.toString())
|
|
add("template", "madara-core/content/content-archive")
|
|
add("vars[paged]", "1")
|
|
add("vars[orderby]", "meta_value_num")
|
|
add("vars[template]", "archive")
|
|
add("vars[sidebar]", "full")
|
|
add("vars[meta_query][0][0][key]", "_wp_manga_chapter_type")
|
|
add("vars[meta_query][0][0][value]", "manga")
|
|
add("vars[meta_query][0][relation]", "AND")
|
|
add("vars[meta_query][relation]", "AND")
|
|
add("vars[post_type]", "wp-manga")
|
|
add("vars[post_status]", "publish")
|
|
add("vars[meta_key]", metaKey)
|
|
add("vars[manga_archives_item_layout]", "big_thumbnail")
|
|
}.build()
|
|
|
|
val xhrHeaders = headersBuilder()
|
|
.add("Content-Length", formBody.contentLength().toString())
|
|
.add("Content-Type", formBody.contentType().toString())
|
|
.add("X-Requested-With", "XMLHttpRequest")
|
|
.build()
|
|
|
|
return POST("$baseUrl/wp-admin/admin-ajax.php", xhrHeaders, formBody)
|
|
}
|
|
|
|
override fun popularMangaRequest(page: Int): Request {
|
|
return loadMoreRequest(page - 1, "_wp_manga_views")
|
|
}
|
|
|
|
override fun latestUpdatesRequest(page: Int): Request {
|
|
return loadMoreRequest(page - 1, "_latest_update")
|
|
}
|
|
|
|
override fun popularMangaFromElement(element: Element): SManga {
|
|
val manga = SManga.create()
|
|
|
|
with(element) {
|
|
select(popularMangaUrlSelector).first()?.let {
|
|
manga.setUrlWithoutDomain(it.attr("abs:href"))
|
|
}
|
|
|
|
select("div.series-box .series-title").first()?.let {
|
|
manga.title = it.text()
|
|
}
|
|
|
|
select("img").first()?.let {
|
|
manga.thumbnail_url = imageFromElement(it)
|
|
}
|
|
}
|
|
|
|
return manga
|
|
}
|
|
|
|
override fun chapterFromElement(element: Element): SChapter {
|
|
val chapter = SChapter.create()
|
|
|
|
with(element) {
|
|
select(chapterUrlSelector).first()?.let { urlElement ->
|
|
chapter.url = urlElement.attr("abs:href").let {
|
|
it.substringBefore("?style=paged") + if (!it.endsWith(chapterUrlSuffix)) chapterUrlSuffix else ""
|
|
}
|
|
chapter.name = urlElement.select("p").text()
|
|
}
|
|
|
|
chapter.date_upload = select("img:not(.thumb)").firstOrNull()?.attr("alt")?.let { parseRelativeDate(it) }
|
|
?: select("span a").firstOrNull()?.attr("title")?.let { parseRelativeDate(it) }
|
|
?: parseChapterDate(select(chapterDateSelector()).firstOrNull()?.text())
|
|
}
|
|
|
|
return chapter
|
|
}
|
|
}
|