From 34d7ff8380ebbe618096dff854c3d2270ed31246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BRAMILLE=20S=C3=A9bastien?= <2752200+oktapodia@users.noreply.github.com> Date: Fri, 5 Feb 2021 13:03:00 +0000 Subject: [PATCH] Add fallback on search to duckduckgo (#5630) * Add fallback on search to duckduckgo * Upgrade version --- src/fr/japscan/build.gradle | 2 +- .../tachiyomi/extension/fr/japscan/Japscan.kt | 49 ++++++++++++++++--- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/fr/japscan/build.gradle b/src/fr/japscan/build.gradle index 2c1649a28..37572d353 100644 --- a/src/fr/japscan/build.gradle +++ b/src/fr/japscan/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Japscan' pkgNameSuffix = 'fr.japscan' extClass = '.Japscan' - extVersionCode = 24 + extVersionCode = 25 libVersion = '1.2' } diff --git a/src/fr/japscan/src/eu/kanade/tachiyomi/extension/fr/japscan/Japscan.kt b/src/fr/japscan/src/eu/kanade/tachiyomi/extension/fr/japscan/Japscan.kt index 85f35c752..f34cbd7d6 100644 --- a/src/fr/japscan/src/eu/kanade/tachiyomi/extension/fr/japscan/Japscan.kt +++ b/src/fr/japscan/src/eu/kanade/tachiyomi/extension/fr/japscan/Japscan.kt @@ -20,9 +20,12 @@ import android.webkit.WebResourceRequest import android.webkit.WebResourceResponse import android.webkit.WebView import android.webkit.WebViewClient +import com.github.salomonbrys.kotson.fromJson import com.github.salomonbrys.kotson.get import com.github.salomonbrys.kotson.string +import com.google.gson.Gson import com.google.gson.JsonElement +import com.google.gson.JsonObject import com.google.gson.JsonParser import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST @@ -213,6 +216,8 @@ class Japscan : ConfigurableSource, ParsedHttpSource() { override fun latestUpdatesSelector() = "#chapters > div > h3.text-truncate" override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element) + private val gson = Gson() + // Search override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { if (query.isEmpty()) { @@ -232,11 +237,32 @@ class Japscan : ConfigurableSource, ParsedHttpSource() { val searchHeaders = headers.newBuilder() .add("X-Requested-With", "XMLHttpRequest") .build() - return POST("$baseUrl/live-search/", searchHeaders, formBody) + + try { + return client.newCall(POST("$baseUrl/live-search/", searchHeaders, formBody)).execute().use { response -> + if (!response.isSuccessful) throw Exception("Unexpected code $response") + + val jsonObject = gson.fromJson(response.body()!!.string()) + + if (jsonObject.asJsonArray.size() === 0) { + Log.d("japscan", "Search not returning anything, using duckduckgo") + + throw Exception("No data") + } + + return response.request() + } + } finally { + // Fallback to duckduckgo if the search does not return any result + val uri = Uri.parse("https://duckduckgo.com/lite/").buildUpon() + .appendQueryParameter("q", "$query site:$baseUrl/manga/") + .appendQueryParameter("kd", "-1") + return GET(uri.toString(), headers) + } } } - override fun searchMangaNextPageSelector(): String? = "li.page-item:last-child:not(li.active)" + override fun searchMangaNextPageSelector(): String? = "li.page-item:last-child:not(li.active),.next_form .navbutton" override fun searchMangaSelector(): String = "div.card div.p-2, a.result-link" override fun searchMangaParse(response: Response): MangasPage { if ("live-search" in response.request().url().toString()) { @@ -264,11 +290,20 @@ class Japscan : ConfigurableSource, ParsedHttpSource() { } } - override fun searchMangaFromElement(element: Element): SManga = SManga.create().apply { - thumbnail_url = element.select("img").attr("abs:src") - element.select("p a").let { - title = it.text() - url = it.attr("href") + override fun searchMangaFromElement(element: Element): SManga { + if (element.attr("class") == "result-link") { + return SManga.create().apply { + title = element.text().substringAfter(" ").substringBefore(" | JapScan") + setUrlWithoutDomain(element.attr("abs:href")) + } + } else { + return SManga.create().apply { + thumbnail_url = element.select("img").attr("abs:src") + element.select("p a").let { + title = it.text() + url = it.attr("href") + } + } } }