From 5959e0db328efe0b0d083e589372849ea45a9b51 Mon Sep 17 00:00:00 2001 From: are-are-are <62763969+dejavui@users.noreply.github.com> Date: Tue, 20 Dec 2022 22:17:31 +0700 Subject: [PATCH] Add search ID hentaivn (#14619) --- src/vi/hentaivn/build.gradle | 2 +- .../extension/vi/hentaivn/HentaiVN.kt | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/vi/hentaivn/build.gradle b/src/vi/hentaivn/build.gradle index fb2c793da..b7ac667ba 100644 --- a/src/vi/hentaivn/build.gradle +++ b/src/vi/hentaivn/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'HentaiVN' pkgNameSuffix = 'vi.hentaivn' extClass = '.HentaiVN' - extVersionCode = 17 + extVersionCode = 18 isNsfw = true } diff --git a/src/vi/hentaivn/src/eu/kanade/tachiyomi/extension/vi/hentaivn/HentaiVN.kt b/src/vi/hentaivn/src/eu/kanade/tachiyomi/extension/vi/hentaivn/HentaiVN.kt index 364740d1e..fb49db60b 100644 --- a/src/vi/hentaivn/src/eu/kanade/tachiyomi/extension/vi/hentaivn/HentaiVN.kt +++ b/src/vi/hentaivn/src/eu/kanade/tachiyomi/extension/vi/hentaivn/HentaiVN.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.extension.vi.hentaivn import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage @@ -17,6 +18,7 @@ import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element +import rx.Observable import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -162,6 +164,33 @@ class HentaiVN : ParsedHttpSource() { override fun searchMangaNextPageSelector() = "ul.pagination > li:contains(Cuối)" + private fun searchMangaByIdRequest(id: String) = GET("$baseUrl/tim-kiem-truyen.html?key=$id", headers) + private fun searchMangaByIdParse(response: Response, ids: String): MangasPage { + val details = mangaDetailsParse(response) + details.url = "$baseUrl/$ids-doc-truyen-id.html" + return MangasPage(listOf(details), false) + } + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> { + return when { + query.startsWith(PREFIX_ID_SEARCH) -> { + val ids = query.removePrefix(PREFIX_ID_SEARCH) + client.newCall(searchMangaByIdRequest(ids)) + .asObservableSuccess() + .map { response -> searchMangaByIdParse(response, ids) } + } + query.toIntOrNull() != null -> { + client.newCall(searchMangaByIdRequest(query)) + .asObservableSuccess() + .map { response -> searchMangaByIdParse(response, query) } + } + else -> super.fetchSearchManga(page, query, filters) + } + } + companion object { + const val PREFIX_ID_SEARCH = "id:" + } + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { val url = "$searchUrl?name=$query&page=$page&dou=&char=&group=0&search=".toHttpUrlOrNull()!!.newBuilder() (if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->