Add more results to search (#848)

Add more results to search
This commit is contained in:
Pavka 2019-02-26 14:20:10 +03:00 committed by Carlos
parent 18407b4702
commit 2229e912f8
2 changed files with 67 additions and 6 deletions

View File

@ -5,8 +5,15 @@ ext {
appName = 'Tachiyomi: LibManga'
pkgNameSuffix = 'ru.libmanga'
extClass = '.LibMangaFactory'
extVersionCode = 2
extVersionCode = 3
libVersion = '1.2'
}
dependencies {
compileOnly project(':preference-stub')
compileOnly 'com.google.code.gson:gson:2.8.5'
compileOnly 'com.github.salomonbrys.kotson:kotson:2.5.0'
compileOnly 'com.github.inorichi.injekt:injekt-core:65b0440'
}
apply from: "$rootDir/common.gradle"

View File

@ -1,15 +1,20 @@
package eu.kanade.tachiyomi.extension.ru.libmanga
import com.github.salomonbrys.kotson.*
import com.google.gson.JsonParser
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.*
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.HttpUrl
import okhttp3.Request
import okhttp3.Response
import org.json.JSONObject
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
import java.util.*
import org.json.JSONObject
open class LibManga(override val name: String, override val baseUrl: String, private val staticUrl: String) : ParsedHttpSource() {
@ -136,6 +141,55 @@ open class LibManga(override val name: String, override val baseUrl: String, pri
return GET(url.toString(), headers)
}
// Hack search method to add some results from search popup
override fun searchMangaParse(response: Response): MangasPage {
val searchRequest = response.request().url().queryParameter("name")
val mangas = mutableListOf<SManga>()
if (!searchRequest.isNullOrEmpty()) {
val popupSearchHeaders = headers
.newBuilder()
.add("Accept", "application/json, text/plain, */*")
.add("X-Requested-With", "XMLHttpRequest")
.build()
// +200ms
val popup = client.newCall(
GET("https://mangalib.me/search?query=$searchRequest", headers = popupSearchHeaders)
).execute().body()!!.string()
val jsonList = JsonParser().parse(popup).asJsonArray
jsonList.forEach {
val element = it.asJsonObject
val manga = SManga.create()
manga.setUrlWithoutDomain("/" + element.get("slug").string)
manga.description = element.get("summary").nullString
manga.author = element.get("author").nullString
manga.title = element.get("name").string
val status = element.get("status_id").int
manga.status = if (status > 2) 2 else status
mangas.add(manga)
}
}
val document = response.asJsoup()
val searchedMangas = document.select(searchMangaSelector()).map { element ->
searchMangaFromElement(element)
}
// Filtered out what find in popup search
mangas.addAll(searchedMangas.filter { search ->
mangas.find { search.title == it.title } == null
})
val hasNextPage = searchMangaNextPageSelector().let { selector ->
document.select(selector).first()
} != null
return MangasPage(mangas, hasNextPage)
}
override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
private class SearchFilter(name: String, val id: String) : Filter.TriState(name)
@ -153,7 +207,7 @@ open class LibManga(override val name: String, override val baseUrl: String, pri
private class OrderBy : Filter.Sort("Сортировка",
arrayOf("Рейтинг", "Имя", "Просмотры", "Дата"),
Filter.Sort.Selection(1, false))
Filter.Sort.Selection(0, false))
/*
* Use console
@ -176,9 +230,9 @@ open class LibManga(override val name: String, override val baseUrl: String, pri
* on /manga-list
*/
private fun getStatusList() = listOf(
SearchFilter("продолжается", "1"),
SearchFilter("завершен", "2"),
SearchFilter("заморожен", "3")
SearchFilter("Продолжается", "1"),
SearchFilter("Завершен", "2"),
SearchFilter("Заморожен", "3")
)
/*