MangaKawaii: Improve cover loading + clean up (#6371)
This commit is contained in:
parent
05131e92ee
commit
8e5c39359d
|
@ -5,7 +5,7 @@ ext {
|
|||
extName = 'Mangakawaii'
|
||||
pkgNameSuffix = 'fr.mangakawaii'
|
||||
extClass = '.MangaKawaii'
|
||||
extVersionCode = 25
|
||||
extVersionCode = 26
|
||||
libVersion = '1.2'
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,9 @@ import java.util.concurrent.TimeUnit
|
|||
import kotlin.math.absoluteValue
|
||||
import kotlin.random.Random
|
||||
|
||||
/**
|
||||
* Heavily customized MyMangaReaderCMS source
|
||||
*/
|
||||
class MangaKawaii : ParsedHttpSource() {
|
||||
|
||||
override val name = "Mangakawaii"
|
||||
|
@ -37,8 +40,8 @@ class MangaKawaii : ParsedHttpSource() {
|
|||
.build()
|
||||
|
||||
protected open val userAgentRandomizer1 = "${Random.nextInt(9).absoluteValue}"
|
||||
protected open val userAgentRandomizer2 = "${Random.nextInt(10,99).absoluteValue}"
|
||||
protected open val userAgentRandomizer3 = "${Random.nextInt(100,999).absoluteValue}"
|
||||
protected open val userAgentRandomizer2 = "${Random.nextInt(10, 99).absoluteValue}"
|
||||
protected open val userAgentRandomizer3 = "${Random.nextInt(100, 999).absoluteValue}"
|
||||
|
||||
override fun headersBuilder(): Headers.Builder = Headers.Builder()
|
||||
.add(
|
||||
|
@ -47,84 +50,80 @@ class MangaKawaii : ParsedHttpSource() {
|
|||
"Chrome/8$userAgentRandomizer1.0.4$userAgentRandomizer3.1$userAgentRandomizer2 Safari/537.36"
|
||||
)
|
||||
|
||||
override fun popularMangaSelector() = "a.hot-manga__item"
|
||||
override fun latestUpdatesSelector() = ".section__list-group li div.section__list-group-left"
|
||||
override fun searchMangaSelector() = "h1 + ul a[href*=manga]"
|
||||
override fun chapterListSelector() = "tr[class*=volume-]:has(td)"
|
||||
|
||||
override fun popularMangaNextPageSelector(): String? = null
|
||||
override fun latestUpdatesNextPageSelector(): String? = null
|
||||
override fun searchMangaNextPageSelector(): String? = null
|
||||
|
||||
// Popular
|
||||
override fun popularMangaRequest(page: Int) = GET(baseUrl, headers)
|
||||
override fun popularMangaSelector() = "a.hot-manga__item"
|
||||
override fun popularMangaNextPageSelector(): String? = null
|
||||
override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply {
|
||||
title = element.select("div.hot-manga__item-caption").select("div.hot-manga__item-name").text().trim()
|
||||
setUrlWithoutDomain(element.select("a").attr("href"))
|
||||
thumbnail_url = "https://cdn.mangakawaii.com/uploads" + element.select("a").attr("href") + "/cover/cover_250x350.jpg"
|
||||
}
|
||||
|
||||
// Latest
|
||||
override fun latestUpdatesRequest(page: Int) = GET(baseUrl, headers)
|
||||
override fun latestUpdatesSelector() = ".section__list-group li div.section__list-group-left"
|
||||
override fun latestUpdatesNextPageSelector(): String? = null
|
||||
override fun latestUpdatesFromElement(element: Element): SManga = SManga.create().apply {
|
||||
title = element.select("a").attr("title")
|
||||
setUrlWithoutDomain(element.select("a").attr("href"))
|
||||
thumbnail_url = "https://cdn.mangakawaii.com/uploads" + element.select("a").attr("href") + "/cover/cover_250x350.jpg"
|
||||
}
|
||||
|
||||
// Search
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val uri = Uri.parse("$baseUrl/search").buildUpon()
|
||||
.appendQueryParameter("query", query)
|
||||
.appendQueryParameter("search_type", "manga")
|
||||
return GET(uri.toString(), headers)
|
||||
}
|
||||
|
||||
override fun popularMangaFromElement(element: Element): SManga {
|
||||
val manga = SManga.create()
|
||||
manga.url = element.select("a").attr("href")
|
||||
manga.title = element.select("div.hot-manga__item-caption").select("div.hot-manga__item-name").text().trim()
|
||||
manga.thumbnail_url = element.select("a").attr("style").substringAfter("('").substringBeforeLast("'")
|
||||
return manga
|
||||
}
|
||||
|
||||
override fun latestUpdatesFromElement(element: Element): SManga = SManga.create().apply {
|
||||
title = element.select("a").attr("title")
|
||||
override fun searchMangaSelector() = "h1 + ul a[href*=manga]"
|
||||
override fun searchMangaNextPageSelector(): String? = null
|
||||
override fun searchMangaFromElement(element: Element): SManga = SManga.create().apply {
|
||||
title = element.select("a").text().trim()
|
||||
setUrlWithoutDomain(element.select("a").attr("href"))
|
||||
thumbnail_url = element.select("img").attr("data-src")
|
||||
thumbnail_url = "https://cdn.mangakawaii.com/uploads" + element.select("a").attr("href") + "/cover/cover_250x350.jpg"
|
||||
}
|
||||
|
||||
override fun searchMangaFromElement(element: Element): SManga {
|
||||
val manga = SManga.create()
|
||||
manga.url = element.select("a").attr("href")
|
||||
manga.title = element.select("a").text().trim()
|
||||
return manga
|
||||
// Manga details
|
||||
override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
|
||||
thumbnail_url = document.select("div.manga-view__header-image").select("img").attr("abs:src")
|
||||
description = document.select("dd.text-justify.text-break").text()
|
||||
author = document.select("a[href*=author]").text()
|
||||
artist = document.select("a[href*=artist]").text()
|
||||
genre = document.select("a[href*=category]").joinToString { it.text() }
|
||||
status = when (document.select("span.badge.bg-success.text-uppercase").text()) {
|
||||
"En Cours" -> SManga.ONGOING
|
||||
"Terminé" -> SManga.COMPLETED
|
||||
else -> SManga.UNKNOWN
|
||||
}
|
||||
}
|
||||
|
||||
override fun chapterFromElement(element: Element): SChapter {
|
||||
val chapter = SChapter.create()
|
||||
chapter.url = element.select("td.table__chapter").select("a").attr("href")
|
||||
chapter.name = element.select("td.table__chapter").select("span").text().trim()
|
||||
chapter.chapter_number = element.select("td.table__chapter").select("span").text().substringAfter("Chapitre").replace(Regex("""[,-]"""), ".").trim().toFloatOrNull()
|
||||
// Chapter list
|
||||
//override fun chapterListRequest(manga: SManga): Request = GET("$baseUrl${manga.widgetPageUrl}", headers)
|
||||
override fun chapterListSelector() = "tr[class*=volume-]:has(td)"
|
||||
override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
|
||||
url = element.select("td.table__chapter").select("a").attr("href")
|
||||
name = element.select("td.table__chapter").select("span").text().trim()
|
||||
chapter_number = element.select("td.table__chapter").select("span").text().substringAfter("Chapitre").replace(Regex("""[,-]"""), ".").trim().toFloatOrNull()
|
||||
?: -1F
|
||||
chapter.date_upload = element.select("td.table__date").firstOrNull()?.text()?.let { parseDate(it) } ?: 0
|
||||
return chapter
|
||||
date_upload = element.select("td.table__date").firstOrNull()?.text()?.let { parseDate(it) }
|
||||
?: 0
|
||||
}
|
||||
|
||||
private fun parseDate(date: String): Long {
|
||||
return SimpleDateFormat("dd.MM.yyyy", Locale.US).parse(date)?.time ?: 0L
|
||||
}
|
||||
|
||||
override fun mangaDetailsParse(document: Document): SManga {
|
||||
val manga = SManga.create()
|
||||
manga.thumbnail_url = document.select("div.manga-view__header-image").select("img").attr("abs:src")
|
||||
manga.description = document.select("dd.text-justify.text-break").text()
|
||||
manga.author = document.select("a[href*=author]").text()
|
||||
manga.artist = document.select("a[href*=artist]").text()
|
||||
val glist = document.select("a[href*=category]").map { it.text() }
|
||||
manga.genre = glist.joinToString(", ")
|
||||
manga.status = when (document.select("span.badge.bg-success.text-uppercase").text()) {
|
||||
"En Cours" -> SManga.ONGOING
|
||||
"Terminé" -> SManga.COMPLETED
|
||||
else -> SManga.UNKNOWN
|
||||
}
|
||||
return manga
|
||||
}
|
||||
|
||||
// Pages
|
||||
override fun pageListParse(response: Response): List<Page> {
|
||||
val body = response.asJsoup()
|
||||
|
||||
val selectorEncoded1 = "Wkdim" +"gsai" + "mgWQyV2lkMm" + "xrS2img" + "ppZDFoY" + "kd4ZElHaW" +
|
||||
"RsdimgFp6cHVi" + "M1FvVzNOeVl5" + "bimgzlpZG" + "lkWjJsbVhT" + "a3imgNJQzVq" + "YjI1MFlpZFd" +
|
||||
"saWR1WlhJdFi"+ "mgpteDFhV1FnTGi" + "mg5KdmlkZHlC" + "a2FYWimgTZiaW" + "imgRtOTBL" + "QzV0ZUMxaim" +
|
||||
"gGRYUnZpZEtT"+ "QTZibTki" +"mgwS0imgRwdm" + "JteGlkimgNU" + "xXTm9hV3himgr" + "aWRLU0JwYldjNm" + "JtOTBpZEti"+
|
||||
"mgGdHpp" + "ZGNtTXFQimg" + "V2RwWml" + "kbDBw"
|
||||
val selectorEncoded1 = "Wkdim" + "gsai" + "mgWQyV2lkMm" + "xrS2img" + "ppZDFoY" + "kd4ZElHaW" +
|
||||
"RsdimgFp6cHVi" + "M1FvVzNOeVl5" + "bimgzlpZG" + "lkWjJsbVhT" + "a3imgNJQzVq" + "YjI1MFlpZFd" +
|
||||
"saWR1WlhJdFi" + "mgpteDFhV1FnTGi" + "mg5KdmlkZHlC" + "a2FYWimgTZiaW" + "imgRtOTBL" + "QzV0ZUMxaim" +
|
||||
"gGRYUnZpZEtT" + "QTZibTki" + "mgwS0imgRwdm" + "JteGlkimgNU" + "xXTm9hV3himgr" + "aWRLU0JwYldjNm" + "JtOTBpZEti" +
|
||||
"mgGdHpp" + "ZGNtTXFQimg" + "V2RwWml" + "kbDBw"
|
||||
val selectorEncoded2 = String(Base64.decode(selectorEncoded1.replace("img", ""), Base64.DEFAULT))
|
||||
val selectorDecoded = String(Base64.decode(selectorEncoded2.replace("id", ""), Base64.DEFAULT))
|
||||
var elements = body.select(selectorDecoded)
|
||||
|
|
Loading…
Reference in New Issue