diff --git a/src/pt/argosscan/build.gradle b/src/pt/argosscan/build.gradle index 66d838a01..97cc0a169 100644 --- a/src/pt/argosscan/build.gradle +++ b/src/pt/argosscan/build.gradle @@ -1,7 +1,8 @@ ext { extName = 'Argos Scan' extClass = '.ArgosScan' - extVersionCode = 26 + extVersionCode = 27 + isNsfw = false } apply from: "$rootDir/common.gradle" diff --git a/src/pt/argosscan/src/eu/kanade/tachiyomi/extension/pt/argosscan/ArgosScan.kt b/src/pt/argosscan/src/eu/kanade/tachiyomi/extension/pt/argosscan/ArgosScan.kt index ae492469c..2b63e5879 100644 --- a/src/pt/argosscan/src/eu/kanade/tachiyomi/extension/pt/argosscan/ArgosScan.kt +++ b/src/pt/argosscan/src/eu/kanade/tachiyomi/extension/pt/argosscan/ArgosScan.kt @@ -8,14 +8,13 @@ import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.util.asJsoup -import keiyoushi.utils.parseAs import keiyoushi.utils.tryParse -import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element +import rx.Observable import java.io.IOException import java.text.SimpleDateFormat import java.util.Locale @@ -42,8 +41,12 @@ class ArgosScan : ParsedHttpSource() { // ============================ Popular ====================================== override fun popularMangaRequest(page: Int) = GET(baseUrl, headers) - override fun popularMangaSelector() = throw UnsupportedOperationException() - override fun popularMangaFromElement(element: Element) = throw UnsupportedOperationException() + override fun popularMangaSelector() = "#projects-container .manga-block" + 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 popularMangaParse(response: Response): MangasPage { @@ -51,16 +54,9 @@ class ArgosScan : ParsedHttpSource() { if (document.select("a[href*='auth/discord']").isNotEmpty()) { throw IOException("Faça login na WebView") } - - val script = document.selectFirst("script:containsData(projects)")!!.data() - - val mangas = POPULAR_REGEX.find(script)?.groups?.get(1)?.value?.let { - it.parseAs>() - .filter { it.type != "novel" } - .map { it.toSManga(baseUrl) } - } ?: throw IOException("Não foi possivel encontrar os mangás") - - return MangasPage(mangas, false) + return document.select(popularMangaSelector()).map(::popularMangaFromElement).let { + MangasPage(it, hasNextPage = false) + } } // ============================ Latest ====================================== @@ -75,18 +71,19 @@ class ArgosScan : ParsedHttpSource() { // ============================ Search ====================================== - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = baseUrl.toHttpUrl().newBuilder() - .addQueryParameter("s", query) - .build() - return GET(url, headers) + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + return fetchPopularManga(page).map { mangasPage -> + MangasPage(mangasPage.mangas.filter { it.title.contains(query, ignoreCase = true) }, hasNextPage = false) + } } - 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 ===================================== @@ -102,7 +99,12 @@ class ArgosScan : ParsedHttpSource() { thumbnail_url = selectFirst(".trailer-box img")?.absUrl("src") description = selectFirst(".content p")?.text() 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() } } diff --git a/src/pt/argosscan/src/eu/kanade/tachiyomi/extension/pt/argosscan/ArgosScanDto.kt b/src/pt/argosscan/src/eu/kanade/tachiyomi/extension/pt/argosscan/ArgosScanDto.kt deleted file mode 100644 index 1480ff444..000000000 --- a/src/pt/argosscan/src/eu/kanade/tachiyomi/extension/pt/argosscan/ArgosScanDto.kt +++ /dev/null @@ -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::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, - val description: Map = emptyMap(), - val status: String, - @SerialName("tags") - val genres: Map> = emptyMap(), - val type: String, -)