MangaKawaii: Improve cover loading + clean up (#6371)

This commit is contained in:
Julien Papasian 2021-03-31 17:03:43 +01:00 committed by GitHub
parent 05131e92ee
commit 8e5c39359d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 56 additions and 57 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'Mangakawaii'
pkgNameSuffix = 'fr.mangakawaii'
extClass = '.MangaKawaii'
extVersionCode = 25
extVersionCode = 26
libVersion = '1.2'
}

View File

@ -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)