From 5f43e1509c50c7110b885bca541a7d8e0a37b73a Mon Sep 17 00:00:00 2001 From: AbdullahM0hamed <25087116+AbdullahM0hamed@users.noreply.github.com> Date: Sat, 14 Nov 2020 14:42:44 +0000 Subject: [PATCH] Fix Readm Search (#4871) Fix Readm Search --- src/en/readm/build.gradle | 2 +- .../tachiyomi/extension/en/readm/ReadM.kt | 124 ++++-------------- 2 files changed, 30 insertions(+), 96 deletions(-) diff --git a/src/en/readm/build.gradle b/src/en/readm/build.gradle index be4881500..5148f9455 100644 --- a/src/en/readm/build.gradle +++ b/src/en/readm/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'ReadM' pkgNameSuffix = 'en.readm' extClass = '.ReadM' - extVersionCode = 4 + extVersionCode = 5 libVersion = '1.2' } diff --git a/src/en/readm/src/eu/kanade/tachiyomi/extension/en/readm/ReadM.kt b/src/en/readm/src/eu/kanade/tachiyomi/extension/en/readm/ReadM.kt index 7669a2aae..fc810f9d5 100644 --- a/src/en/readm/src/eu/kanade/tachiyomi/extension/en/readm/ReadM.kt +++ b/src/en/readm/src/eu/kanade/tachiyomi/extension/en/readm/ReadM.kt @@ -4,6 +4,7 @@ import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST 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 @@ -11,6 +12,8 @@ import eu.kanade.tachiyomi.source.online.ParsedHttpSource import okhttp3.FormBody import okhttp3.OkHttpClient import okhttp3.Request +import okhttp3.Response +import org.json.JSONObject import org.jsoup.nodes.Document import org.jsoup.nodes.Element import java.util.Calendar @@ -60,31 +63,34 @@ class ReadM : ParsedHttpSource() { override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { val formBody = FormBody.Builder() - .add("manga-name", query) - filters.forEach { filter -> - when (filter) { - is TypeFilter -> formBody.add("type", typeArray[filter.state].second) - is AuthorName -> formBody.add("author-name", filter.state) - is ArtistName -> formBody.add("artist-name", filter.state) - is StatusFilter -> formBody.add("status", statusArray[filter.state].second) - is GenreFilter -> filter.state.forEach { genre -> - if (genre.isExcluded()) formBody.add("exclude[]", genre.id) - if (genre.isIncluded()) formBody.add("include[]", genre.id) - } - } - } - if (filters.isEmpty()) { - formBody - .add("type", "all") - .add("status", "both") - } - val searchHeaders = headers.newBuilder().add("X-Requested-With", "XMLHttpRequest").build() - return POST("$baseUrl/service/advanced_search", searchHeaders, formBody.build()) + .add("dataType", "json") + .add("phrase", query) + + val searchHeaders = headers.newBuilder() + .add("X-Requested-With", "XMLHttpRequest") + .add("content-type", "application/x-www-form-urlencoded; charset=UTF-8") + .build() + return POST("$baseUrl/service/search", searchHeaders, formBody.build()) } - override fun searchMangaNextPageSelector(): String? = null - override fun searchMangaSelector(): String = "div.poster-with-subject" - override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element) + override fun searchMangaNextPageSelector(): String = throw Exception("Not used") + override fun searchMangaSelector(): String = throw Exception("Not used") + override fun searchMangaFromElement(element: Element): SManga = throw Exception("Not used") + + override fun searchMangaParse(response: Response): MangasPage { + val json = JSONObject(response.body()!!.string()).getJSONArray("manga") + + val manga = (0 until json.length()).asSequence().toList().map { it -> + SManga.create().apply { + val jsonObject = json.getJSONObject(it) + title = jsonObject.getString("title") + url = jsonObject.getString("url") + thumbnail_url = jsonObject.getString("image") + } + } + + return MangasPage(manga, false) + } // Details @@ -154,76 +160,4 @@ class ReadM : ParsedHttpSource() { override fun pageListParse(document: Document): List = document.select("div.ch-images img").mapIndexed { index, element -> Page(index, "", element.attr("abs:src")) } - - // Filters - - override fun getFilterList(): FilterList = FilterList( - TypeFilter(typeArray), - AuthorName(), - ArtistName(), - StatusFilter(statusArray), - GenreFilter(genreArray()) - ) - - private class TypeFilter(values: Array>) : Filter.Select("Type", values.map { it.first }.toTypedArray()) - private class AuthorName : Filter.Text("Author Name") - private class ArtistName : Filter.Text("Artist Name") - private class StatusFilter(values: Array>) : Filter.Select("Status", values.map { it.first }.toTypedArray()) - private class GenreFilter(state: List) : Filter.Group("Genres", state) - private class Tag(name: String, val id: String) : Filter.TriState(name) - - private val typeArray = arrayOf( - Pair("All", "all"), - Pair("Japanese Manga", "japanese"), - Pair("Korean Manhwa", "korean"), - Pair("Chinese Manhua", "chinese") - ) - - private val statusArray = arrayOf( - Pair("Both", "both"), - Pair("Ongoing", "ongoing"), - Pair("Completed", "completed") - ) - - private fun genreArray() = listOf( - Tag("Action", "1"), - Tag("Adventure", "23"), - Tag("Comedy", "12"), - Tag("Doujinshi", "26"), - Tag("Drama", "9"), - Tag("Ecchi", "2"), - Tag("Fantasy", "3"), - Tag("Gender Bender", "30"), - Tag("Harem", "4"), - Tag("Historical", "36"), - Tag("Horror", "34"), - Tag("Josei", "17"), - Tag("Lolicon", "39"), - Tag("Manga", "5"), - Tag("Manhua", "31"), - Tag("Manhwa", "32"), - Tag("Martial Arts", "22"), - Tag("Mecha", "33"), - Tag("Mystery", "13"), - Tag("None", "41"), - Tag("One shot", "16"), - Tag("Psychological", "14"), - Tag("Romance", "6"), - Tag("School Life", "10"), - Tag("Sci fi", "19"), - Tag("Sci-fi", "40"), - Tag("Seinen", "24"), - Tag("Shotacon", "38"), - Tag("Shoujo", "8"), - Tag("Shoujo Ai", "37"), - Tag("Shounen", "7"), - Tag("Shounen Ai", "35"), - Tag("Slice of Life", "21"), - Tag("Sports", "29"), - Tag("Supernatural", "11"), - Tag("Tragedy", "15"), - Tag("Uncategorized", "43"), - Tag("Yaoi", "28"), - Tag("Yuri", "20") - ).sortedWith(compareBy { it.name }) }