Japscan: fix browse, thumbnail, pagination (#3157)
Also removed the 'page number' filter - would have to reimplement it with the new format, which seems like effort. Also, such features are better suited for the app to implement directly.
This commit is contained in:
parent
986683e93d
commit
608a2c5d2a
@ -1,7 +1,7 @@
|
|||||||
ext {
|
ext {
|
||||||
extName = 'Japscan'
|
extName = 'Japscan'
|
||||||
extClass = '.Japscan'
|
extClass = '.Japscan'
|
||||||
extVersionCode = 44
|
extVersionCode = 45
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -10,7 +10,6 @@ import android.webkit.JavascriptInterface
|
|||||||
import android.webkit.WebView
|
import android.webkit.WebView
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
|
||||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||||
import eu.kanade.tachiyomi.source.ConfigurableSource
|
import eu.kanade.tachiyomi.source.ConfigurableSource
|
||||||
import eu.kanade.tachiyomi.source.model.Filter
|
import eu.kanade.tachiyomi.source.model.Filter
|
||||||
@ -33,7 +32,6 @@ 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 uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
@ -81,23 +79,12 @@ class Japscan : ConfigurableSource, ParsedHttpSource() {
|
|||||||
|
|
||||||
// Popular
|
// Popular
|
||||||
override fun popularMangaRequest(page: Int): Request {
|
override fun popularMangaRequest(page: Int): Request {
|
||||||
return GET("$baseUrl/mangas/", headers)
|
return GET("$baseUrl/mangas/?sort=popular&p=$page", headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun popularMangaParse(response: Response): MangasPage {
|
override fun popularMangaNextPageSelector() = ".pagination > li:last-child:not(.disabled)"
|
||||||
val document = response.asJsoup()
|
|
||||||
pageNumberDoc = document
|
|
||||||
|
|
||||||
val mangas = document.select(popularMangaSelector()).map { element ->
|
override fun popularMangaSelector() = ".mangas-list .manga-block:not(:has(a[href='']))"
|
||||||
popularMangaFromElement(element)
|
|
||||||
}
|
|
||||||
val hasNextPage = false
|
|
||||||
return MangasPage(mangas, hasNextPage)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun popularMangaNextPageSelector(): String? = null
|
|
||||||
|
|
||||||
override fun popularMangaSelector() = "#top_mangas_week li"
|
|
||||||
|
|
||||||
override fun popularMangaFromElement(element: Element): SManga {
|
override fun popularMangaFromElement(element: Element): SManga {
|
||||||
val manga = SManga.create()
|
val manga = SManga.create()
|
||||||
@ -110,47 +97,15 @@ class Japscan : ConfigurableSource, ParsedHttpSource() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Latest
|
// Latest
|
||||||
private lateinit var latestDirectory: List<Element>
|
|
||||||
|
|
||||||
override fun fetchLatestUpdates(page: Int): Observable<MangasPage> {
|
|
||||||
return if (page == 1) {
|
|
||||||
client.newCall(latestUpdatesRequest(page))
|
|
||||||
.asObservableSuccess()
|
|
||||||
.map { latestUpdatesParse(it) }
|
|
||||||
} else {
|
|
||||||
Observable.just(parseLatestDirectory(page))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun latestUpdatesRequest(page: Int): Request {
|
override fun latestUpdatesRequest(page: Int): Request {
|
||||||
return GET(baseUrl, headers)
|
return GET("$baseUrl/mangas/?sort=updated&p=$page", headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun latestUpdatesParse(response: Response): MangasPage {
|
override fun latestUpdatesSelector() = popularMangaSelector()
|
||||||
val document = response.asJsoup()
|
|
||||||
|
|
||||||
latestDirectory = document.select(latestUpdatesSelector())
|
|
||||||
.distinctBy { element -> element.select("a").attr("href") }
|
|
||||||
|
|
||||||
return parseLatestDirectory(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun parseLatestDirectory(page: Int): MangasPage {
|
|
||||||
val manga = mutableListOf<SManga>()
|
|
||||||
val end = ((page * 24) - 1).let { if (it <= latestDirectory.lastIndex) it else latestDirectory.lastIndex }
|
|
||||||
|
|
||||||
for (i in (((page - 1) * 24)..end)) {
|
|
||||||
manga.add(latestUpdatesFromElement(latestDirectory[i]))
|
|
||||||
}
|
|
||||||
|
|
||||||
return MangasPage(manga, end < latestDirectory.lastIndex)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun latestUpdatesSelector() = "#chapters h3.mb-0"
|
|
||||||
|
|
||||||
override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element)
|
override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element)
|
||||||
|
|
||||||
override fun latestUpdatesNextPageSelector(): String = throw UnsupportedOperationException()
|
override fun latestUpdatesNextPageSelector(): String = popularMangaNextPageSelector()
|
||||||
|
|
||||||
// Search
|
// Search
|
||||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||||
@ -180,7 +135,7 @@ class Japscan : ConfigurableSource, ParsedHttpSource() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchMangaNextPageSelector(): String = "li.page-item:last-child:not(li.active)"
|
override fun searchMangaNextPageSelector(): String = popularMangaSelector()
|
||||||
|
|
||||||
override fun searchMangaSelector(): String = "div.card div.p-2"
|
override fun searchMangaSelector(): String = "div.card div.p-2"
|
||||||
|
|
||||||
@ -225,7 +180,8 @@ class Japscan : ConfigurableSource, ParsedHttpSource() {
|
|||||||
val infoElement = document.selectFirst("#main .card-body")!!
|
val infoElement = document.selectFirst("#main .card-body")!!
|
||||||
|
|
||||||
val manga = SManga.create()
|
val manga = SManga.create()
|
||||||
manga.thumbnail_url = infoElement.select("img").attr("abs:src")
|
val path = document.location().replaceFirst("$baseUrl/", "")
|
||||||
|
manga.thumbnail_url = "$baseUrl/imgs/${path.replace(Regex("/$"),".jpg").replace("manga","mangas")}".lowercase(Locale.ROOT)
|
||||||
|
|
||||||
val infoRows = infoElement.select(".row, .d-flex")
|
val infoRows = infoElement.select(".row, .d-flex")
|
||||||
infoRows.select("p").forEach { el ->
|
infoRows.select("p").forEach { el ->
|
||||||
@ -341,28 +297,6 @@ class Japscan : ConfigurableSource, ParsedHttpSource() {
|
|||||||
|
|
||||||
private class PageList(pages: Array<Int>) : Filter.Select<Int>("Page #", arrayOf(0, *pages))
|
private class PageList(pages: Array<Int>) : Filter.Select<Int>("Page #", arrayOf(0, *pages))
|
||||||
|
|
||||||
override fun getFilterList(): FilterList {
|
|
||||||
val totalPages = pageNumberDoc?.select("li.page-item:last-child a")?.text()
|
|
||||||
val pageList = mutableListOf<Int>()
|
|
||||||
return if (!totalPages.isNullOrEmpty()) {
|
|
||||||
for (i in 0 until totalPages.toInt()) {
|
|
||||||
pageList.add(i + 1)
|
|
||||||
}
|
|
||||||
FilterList(
|
|
||||||
Filter.Header("Page alphabétique"),
|
|
||||||
PageList(pageList.toTypedArray()),
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
FilterList(
|
|
||||||
Filter.Header("Page alphabétique"),
|
|
||||||
TextField("Page #"),
|
|
||||||
Filter.Header("Appuyez sur reset pour la liste"),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private var pageNumberDoc: Document? = null
|
|
||||||
|
|
||||||
// Prefs
|
// Prefs
|
||||||
override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) {
|
||||||
val chapterListPref = androidx.preference.ListPreference(screen.context).apply {
|
val chapterListPref = androidx.preference.ListPreference(screen.context).apply {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user