From 2229e912f8c06f06d6ad59f4a2acceb58b6acb70 Mon Sep 17 00:00:00 2001 From: Pavka Date: Tue, 26 Feb 2019 14:20:10 +0300 Subject: [PATCH] Add more results to search (#848) Add more results to search --- src/ru/libmanga/build.gradle | 9 ++- .../extension/ru/libmanga/LibManga.kt | 64 +++++++++++++++++-- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/src/ru/libmanga/build.gradle b/src/ru/libmanga/build.gradle index c065f5c21..4d5f35992 100644 --- a/src/ru/libmanga/build.gradle +++ b/src/ru/libmanga/build.gradle @@ -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" diff --git a/src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibManga.kt b/src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibManga.kt index 98f3f4ae5..7964be36e 100644 --- a/src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibManga.kt +++ b/src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibManga.kt @@ -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() + 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") ) /*