ArgosScan: Fix popular manga (#9971)
* Fix popular manga * Add 'isNsfw' * Remove destructuring declaration
This commit is contained in:
parent
b32672b47c
commit
31328ee895
@ -1,7 +1,8 @@
|
|||||||
ext {
|
ext {
|
||||||
extName = 'Argos Scan'
|
extName = 'Argos Scan'
|
||||||
extClass = '.ArgosScan'
|
extClass = '.ArgosScan'
|
||||||
extVersionCode = 26
|
extVersionCode = 27
|
||||||
|
isNsfw = false
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -8,14 +8,13 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
|||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import keiyoushi.utils.parseAs
|
|
||||||
import keiyoushi.utils.tryParse
|
import keiyoushi.utils.tryParse
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import org.jsoup.nodes.Document
|
import org.jsoup.nodes.Document
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
|
import rx.Observable
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
@ -42,8 +41,12 @@ class ArgosScan : ParsedHttpSource() {
|
|||||||
// ============================ Popular ======================================
|
// ============================ Popular ======================================
|
||||||
override fun popularMangaRequest(page: Int) = GET(baseUrl, headers)
|
override fun popularMangaRequest(page: Int) = GET(baseUrl, headers)
|
||||||
|
|
||||||
override fun popularMangaSelector() = throw UnsupportedOperationException()
|
override fun popularMangaSelector() = "#projects-container .manga-block"
|
||||||
override fun popularMangaFromElement(element: Element) = throw UnsupportedOperationException()
|
override fun popularMangaFromElement(element: Element) = SManga.create().apply {
|
||||||
|
title = element.selectFirst("h3")!!.text()
|
||||||
|
thumbnail_url = element.selectFirst("img")!!.absUrl("src")
|
||||||
|
setUrlWithoutDomain(element.selectFirst("a")!!.absUrl("href"))
|
||||||
|
}
|
||||||
override fun popularMangaNextPageSelector() = null
|
override fun popularMangaNextPageSelector() = null
|
||||||
|
|
||||||
override fun popularMangaParse(response: Response): MangasPage {
|
override fun popularMangaParse(response: Response): MangasPage {
|
||||||
@ -51,16 +54,9 @@ class ArgosScan : ParsedHttpSource() {
|
|||||||
if (document.select("a[href*='auth/discord']").isNotEmpty()) {
|
if (document.select("a[href*='auth/discord']").isNotEmpty()) {
|
||||||
throw IOException("Faça login na WebView")
|
throw IOException("Faça login na WebView")
|
||||||
}
|
}
|
||||||
|
return document.select(popularMangaSelector()).map(::popularMangaFromElement).let {
|
||||||
val script = document.selectFirst("script:containsData(projects)")!!.data()
|
MangasPage(it, hasNextPage = false)
|
||||||
|
}
|
||||||
val mangas = POPULAR_REGEX.find(script)?.groups?.get(1)?.value?.let {
|
|
||||||
it.parseAs<List<MangaDto>>()
|
|
||||||
.filter { it.type != "novel" }
|
|
||||||
.map { it.toSManga(baseUrl) }
|
|
||||||
} ?: throw IOException("Não foi possivel encontrar os mangás")
|
|
||||||
|
|
||||||
return MangasPage(mangas, false)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================ Latest ======================================
|
// ============================ Latest ======================================
|
||||||
@ -75,18 +71,19 @@ class ArgosScan : ParsedHttpSource() {
|
|||||||
|
|
||||||
// ============================ Search ======================================
|
// ============================ Search ======================================
|
||||||
|
|
||||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
|
||||||
val url = baseUrl.toHttpUrl().newBuilder()
|
return fetchPopularManga(page).map { mangasPage ->
|
||||||
.addQueryParameter("s", query)
|
MangasPage(mangasPage.mangas.filter { it.title.contains(query, ignoreCase = true) }, hasNextPage = false)
|
||||||
.build()
|
}
|
||||||
return GET(url, headers)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchMangaSelector() = popularMangaSelector()
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = throw UnsupportedOperationException()
|
||||||
|
|
||||||
override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
|
override fun searchMangaSelector() = throw UnsupportedOperationException()
|
||||||
|
|
||||||
override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
|
override fun searchMangaFromElement(element: Element) = throw UnsupportedOperationException()
|
||||||
|
|
||||||
|
override fun searchMangaNextPageSelector() = throw UnsupportedOperationException()
|
||||||
|
|
||||||
// ============================ Details =====================================
|
// ============================ Details =====================================
|
||||||
|
|
||||||
@ -102,7 +99,12 @@ class ArgosScan : ParsedHttpSource() {
|
|||||||
thumbnail_url = selectFirst(".trailer-box img")?.absUrl("src")
|
thumbnail_url = selectFirst(".trailer-box img")?.absUrl("src")
|
||||||
description = selectFirst(".content p")?.text()
|
description = selectFirst(".content p")?.text()
|
||||||
selectFirst("section[data-status]")?.attr("data-status")?.let {
|
selectFirst("section[data-status]")?.attr("data-status")?.let {
|
||||||
status = it.toStatus()
|
status = when (it.lowercase()) {
|
||||||
|
"ongoing" -> SManga.ONGOING
|
||||||
|
"completed" -> SManga.COMPLETED
|
||||||
|
"hiatus" -> SManga.ON_HIATUS
|
||||||
|
else -> SManga.UNKNOWN
|
||||||
|
}
|
||||||
}
|
}
|
||||||
genre = select("h6:contains(Tags) + h6 > span").joinToString { it.text() }
|
genre = select("h6:contains(Tags) + h6 > span").joinToString { it.text() }
|
||||||
}
|
}
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.extension.pt.argosscan
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
|
||||||
import kotlinx.serialization.SerialName
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
class MangaDto(
|
|
||||||
@SerialName("attributes")
|
|
||||||
val details: DetailsDto,
|
|
||||||
@SerialName("cover_image_url")
|
|
||||||
val thumbnailUrl: String,
|
|
||||||
val id: String,
|
|
||||||
) {
|
|
||||||
val type get() = details.type
|
|
||||||
|
|
||||||
fun toSManga(baseUrl: String) = SManga.create().apply {
|
|
||||||
title = details.title.values.first()
|
|
||||||
description = details.description.values.firstOrNull()
|
|
||||||
genre = details.genres.get("genre")?.let(List<String>::joinToString)
|
|
||||||
thumbnail_url = "$baseUrl/$thumbnailUrl"
|
|
||||||
status = details.status.toStatus()
|
|
||||||
url = this@MangaDto.id
|
|
||||||
initialized = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun String.toStatus(): Int =
|
|
||||||
when (lowercase()) {
|
|
||||||
"em-lancamento" -> SManga.ONGOING
|
|
||||||
"completa" -> SManga.COMPLETED
|
|
||||||
"em-pausa" -> SManga.ON_HIATUS
|
|
||||||
else -> SManga.UNKNOWN
|
|
||||||
}
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
class DetailsDto(
|
|
||||||
val title: Map<String, String>,
|
|
||||||
val description: Map<String, String> = emptyMap(),
|
|
||||||
val status: String,
|
|
||||||
@SerialName("tags")
|
|
||||||
val genres: Map<String, List<String>> = emptyMap(),
|
|
||||||
val type: String,
|
|
||||||
)
|
|
Loading…
x
Reference in New Issue
Block a user