Japscan search (#1688)

Japscan search
This commit is contained in:
Mike 2019-10-22 07:22:38 -04:00 committed by arkon
parent 261560afd9
commit cf9087506f
2 changed files with 45 additions and 26 deletions

View File

@ -5,7 +5,7 @@ ext {
appName = 'Tachiyomi: Japscan'
pkgNameSuffix = 'fr.japscan'
extClass = '.Japscan'
extVersionCode = 12
extVersionCode = 13
libVersion = '1.2'
}

View File

@ -4,17 +4,15 @@ import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import android.graphics.Rect
import com.google.gson.JsonObject
import com.google.gson.JsonParser
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.network.asObservableSuccess
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import okhttp3.FormBody
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.MediaType
import okhttp3.OkHttpClient
import okhttp3.Request
@ -23,6 +21,7 @@ import okhttp3.ResponseBody
import org.apache.commons.lang3.StringUtils
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import rx.Observable
import java.io.ByteArrayOutputStream
import java.io.InputStream
import java.text.ParseException
@ -100,37 +99,57 @@ class Japscan : ParsedHttpSource() {
override fun latestUpdatesNextPageSelector() = "#theresnone"
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val form = FormBody.Builder().apply {
add("search", StringUtils.stripAccents(query))
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
val stripped = StringUtils.stripAccents(query)
return client.newCall(searchMangaRequest(stripped[0], page))
.asObservableSuccess()
.map { response ->
searchMangaParse(response, stripped)
}
return POST("$baseUrl/search/", headers, form.build())
}
override fun searchMangaParse(response: Response): MangasPage {
val result = JsonParser().parse(response.body()!!.string()).asJsonArray
if (!result!!.isJsonArray)
return MangasPage(emptyList(), false)
val searchMangas = result.map {
searchMangaItemParse(it.asJsonObject)
private fun searchMangaRequest(char: Char, page: Int): Request {
return if (char.isLetter()) GET("$baseUrl/mangas/${char.toUpperCase()}/$page", headers) else GET("$baseUrl/mangas/0-9/$page", headers)
}
return MangasPage(searchMangas, false)
override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = throw Exception("Not used")
private fun searchMangaParse(response: Response, query: String): MangasPage {
val mangas = mutableListOf<SManga>()
var document = response.asJsoup()
var continueSearch = true
var page = 1
while (continueSearch) {
document.select(searchMangaSelector())
.filter { it.select("p a").text().contains(query, ignoreCase = true) }
.map { mangas.add(searchMangaFromElement(it)) }
if (document.select(searchMangaNextPageSelector()).isNotEmpty()) {
page++
document = client.newCall(searchMangaRequest(query[0], page)).execute().asJsoup()
} else {
continueSearch = false
}
}
private fun searchMangaItemParse(obj: JsonObject) = SManga.create().apply {
title = obj["name"]!!.asString
thumbnail_url = "$baseUrl/${obj["image"]!!.asString}"
url = obj["url"]!!.asString
return MangasPage(mangas, false)
}
override fun searchMangaSelector() = "#theresnone"
override fun searchMangaSelector() = "div.row div.flex-wrap div"
override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
override fun searchMangaFromElement(element: Element): SManga {
val manga = SManga.create()
override fun searchMangaNextPageSelector() = "#theresnone"
element.select("p a").let{
manga.title = it.text()
manga.setUrlWithoutDomain(it.attr("href"))
}
manga.thumbnail_url = element.select("img").attr("abs:src")
return manga
}
override fun searchMangaNextPageSelector() = "ul.pagination li.active + li"
override fun mangaDetailsParse(document: Document): SManga {
val infoElement = document.select("div#main > .card > .card-body").first()