From 3dfc9fdb291222d52599f6fc128d81cfe300cdfe Mon Sep 17 00:00:00 2001 From: mobi2002 <48650614+mobi2002@users.noreply.github.com> Date: Wed, 25 Jan 2023 23:46:35 +0500 Subject: [PATCH] ignore 404 on search (#15100) --- src/en/nana/build.gradle | 2 +- .../tachiyomi/extension/en/nana/Nana.kt | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/en/nana/build.gradle b/src/en/nana/build.gradle index ac4b4f8cd..92558ee36 100644 --- a/src/en/nana/build.gradle +++ b/src/en/nana/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Nana' pkgNameSuffix = 'en.nana' extClass = '.Nana' - extVersionCode = 1 + extVersionCode = 2 isNsfw = true } diff --git a/src/en/nana/src/eu/kanade/tachiyomi/extension/en/nana/Nana.kt b/src/en/nana/src/eu/kanade/tachiyomi/extension/en/nana/Nana.kt index 8d42cd659..14fcf57ab 100644 --- a/src/en/nana/src/eu/kanade/tachiyomi/extension/en/nana/Nana.kt +++ b/src/en/nana/src/eu/kanade/tachiyomi/extension/en/nana/Nana.kt @@ -1,15 +1,19 @@ package eu.kanade.tachiyomi.extension.en.nana import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservable import eu.kanade.tachiyomi.network.interceptor.rateLimit import eu.kanade.tachiyomi.source.model.Filter 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.Call import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Request +import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element import rx.Observable @@ -41,6 +45,13 @@ class Nana : ParsedHttpSource() { searchMangaNextPageSelector() // Search + // The search returns 404 when there's no results. + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + return client.newCall(searchMangaRequest(page, query, filters)) + .asObservableIgnoreCode(404) + .map(::searchMangaParse) + } + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { val filterList = if (filters.isEmpty()) getFilterList() else filters val tagsFilter = filterList.find { it is TagsFilter } as TagsFilter @@ -179,6 +190,15 @@ class Nana : ParsedHttpSource() { } // Other + private fun Call.asObservableIgnoreCode(code: Int): Observable { + return asObservable().doOnNext { response -> + if (!response.isSuccessful && response.code != code) { + response.close() + throw Exception("HTTP error ${response.code}") + } + } + } + companion object { private val PATTERN_PAGES = Regex("Reader\\.pages\\s*=\\s*\\{\\\"pages\\\":\\[([^];\\n]+)]\\}\\.pages;") }