Fix Readm Search (#4871)

Fix Readm Search
This commit is contained in:
AbdullahM0hamed 2020-11-14 14:42:44 +00:00 committed by GitHub
parent 875d6d75cf
commit 5f43e1509c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 96 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'ReadM' extName = 'ReadM'
pkgNameSuffix = 'en.readm' pkgNameSuffix = 'en.readm'
extClass = '.ReadM' extClass = '.ReadM'
extVersionCode = 4 extVersionCode = 5
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -4,6 +4,7 @@ import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList 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.Page
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
@ -11,6 +12,8 @@ import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import okhttp3.FormBody import okhttp3.FormBody
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response
import org.json.JSONObject
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import java.util.Calendar import java.util.Calendar
@ -60,31 +63,34 @@ class ReadM : ParsedHttpSource() {
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val formBody = FormBody.Builder() val formBody = FormBody.Builder()
.add("manga-name", query) .add("dataType", "json")
filters.forEach { filter -> .add("phrase", query)
when (filter) {
is TypeFilter -> formBody.add("type", typeArray[filter.state].second) val searchHeaders = headers.newBuilder()
is AuthorName -> formBody.add("author-name", filter.state) .add("X-Requested-With", "XMLHttpRequest")
is ArtistName -> formBody.add("artist-name", filter.state) .add("content-type", "application/x-www-form-urlencoded; charset=UTF-8")
is StatusFilter -> formBody.add("status", statusArray[filter.state].second) .build()
is GenreFilter -> filter.state.forEach { genre -> return POST("$baseUrl/service/search", searchHeaders, formBody.build())
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())
} }
override fun searchMangaNextPageSelector(): String? = null override fun searchMangaNextPageSelector(): String = throw Exception("Not used")
override fun searchMangaSelector(): String = "div.poster-with-subject" override fun searchMangaSelector(): String = throw Exception("Not used")
override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element) 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 // Details
@ -154,76 +160,4 @@ class ReadM : ParsedHttpSource() {
override fun pageListParse(document: Document): List<Page> = document.select("div.ch-images img").mapIndexed { index, element -> override fun pageListParse(document: Document): List<Page> = document.select("div.ch-images img").mapIndexed { index, element ->
Page(index, "", element.attr("abs:src")) 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<Pair<String, String>>) : Filter.Select<String>("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<Pair<String, String>>) : Filter.Select<String>("Status", values.map { it.first }.toTypedArray())
private class GenreFilter(state: List<Tag>) : Filter.Group<Tag>("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 })
} }