parent
11d6ca37c3
commit
7926ca6011
|
@ -1,7 +1,7 @@
|
||||||
ext {
|
ext {
|
||||||
extName = 'Yushuke Mangas'
|
extName = 'Yushuke Mangas'
|
||||||
extClass = '.YushukeMangas'
|
extClass = '.YushukeMangas'
|
||||||
extVersionCode = 4
|
extVersionCode = 5
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package eu.kanade.tachiyomi.extension.pt.yushukemangas
|
package eu.kanade.tachiyomi.extension.pt.yushukemangas
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
import eu.kanade.tachiyomi.network.asObservableSuccess
|
||||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||||
|
@ -15,6 +16,7 @@ import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import kotlinx.serialization.json.decodeFromStream
|
import kotlinx.serialization.json.decodeFromStream
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||||
|
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import org.jsoup.Jsoup
|
import org.jsoup.Jsoup
|
||||||
|
@ -22,6 +24,7 @@ import org.jsoup.nodes.Document
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
import java.net.URLEncoder
|
||||||
|
|
||||||
class YushukeMangas : ParsedHttpSource() {
|
class YushukeMangas : ParsedHttpSource() {
|
||||||
|
|
||||||
|
@ -33,6 +36,8 @@ class YushukeMangas : ParsedHttpSource() {
|
||||||
|
|
||||||
override val supportsLatest = true
|
override val supportsLatest = true
|
||||||
|
|
||||||
|
private var nextHash: String? = null
|
||||||
|
|
||||||
override val versionId = 2
|
override val versionId = 2
|
||||||
|
|
||||||
override val client = network.cloudflareClient.newBuilder()
|
override val client = network.cloudflareClient.newBuilder()
|
||||||
|
@ -57,18 +62,47 @@ class YushukeMangas : ParsedHttpSource() {
|
||||||
|
|
||||||
// ============================== Latest ===============================
|
// ============================== Latest ===============================
|
||||||
|
|
||||||
override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/obras", headers)
|
override fun latestUpdatesRequest(page: Int): Request {
|
||||||
|
val url = baseUrl.toHttpUrl().newBuilder()
|
||||||
|
.addQueryParameter("pagina", page.toString())
|
||||||
|
.build()
|
||||||
|
return GET(url, headers)
|
||||||
|
}
|
||||||
|
|
||||||
override fun latestUpdatesSelector() = ".obras-grid .manga-card a"
|
override fun latestUpdatesSelector() = ".manga-list .manga-card"
|
||||||
|
|
||||||
override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element)
|
override fun latestUpdatesNextPageSelector() = "a.page-link:contains(>)"
|
||||||
|
|
||||||
override fun latestUpdatesNextPageSelector() = null
|
override fun latestUpdatesFromElement(element: Element) = SManga.create().apply {
|
||||||
|
val url = element.selectFirst("a.manga-cover")!!.absUrl("href")
|
||||||
|
val uri = Uri.parse(url)
|
||||||
|
val pathSegments = uri.pathSegments
|
||||||
|
val lastSegment = URLEncoder.encode(pathSegments.last(), "UTF-8")
|
||||||
|
val encodedUrl = uri.buildUpon()
|
||||||
|
.path(pathSegments.dropLast(1).joinToString("/") + "/$lastSegment")
|
||||||
|
.toString()
|
||||||
|
|
||||||
|
title = element.selectFirst("a.manga-title")!!.text()
|
||||||
|
thumbnail_url = element.selectFirst("a.manga-cover img")?.absUrl("data-src")
|
||||||
|
setUrlWithoutDomain(encodedUrl)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun latestUpdatesParse(response: Response): MangasPage {
|
||||||
|
val document = response.asJsoup()
|
||||||
|
val mangas = document.select(latestUpdatesSelector()).map { element ->
|
||||||
|
latestUpdatesFromElement(element)
|
||||||
|
}
|
||||||
|
val nextUrl = document.selectFirst(latestUpdatesNextPageSelector())?.attr("href")
|
||||||
|
val baseNextUrl = baseUrl + nextUrl
|
||||||
|
nextHash = baseNextUrl?.toHttpUrlOrNull()?.queryParameter("pagina")
|
||||||
|
|
||||||
|
return MangasPage(mangas, !nextHash.isNullOrEmpty())
|
||||||
|
}
|
||||||
|
|
||||||
// ============================== Search ===============================
|
// ============================== Search ===============================
|
||||||
|
|
||||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||||
val urlFilterBuilder = filters.fold("$baseUrl/obras".toHttpUrl().newBuilder()) { urlBuilder, filter ->
|
val urlFilterBuilder = filters.fold(baseUrl.toHttpUrl().newBuilder()) { urlBuilder, filter ->
|
||||||
when (filter) {
|
when (filter) {
|
||||||
is RadioFilter -> {
|
is RadioFilter -> {
|
||||||
val selected = filter.selected()
|
val selected = filter.selected()
|
||||||
|
|
Loading…
Reference in New Issue