Fix the no results found in Madara sources due to a theme update (#16167)
Fix the no results found in Madara sources due to a theme update.
This commit is contained in:
parent
2ba79a0094
commit
8e3efc0a19
|
@ -6,13 +6,11 @@ import okhttp3.CacheControl
|
|||
import okhttp3.Request
|
||||
|
||||
class AdultWebtoon : Madara("Adult Webtoon", "https://adultwebtoon.com", "en") {
|
||||
|
||||
override val useLoadMoreSearch = false
|
||||
override fun popularMangaRequest(page: Int): Request {
|
||||
val pageSuffix = if (page != 1) "page/$page/" else ""
|
||||
return GET(
|
||||
"$baseUrl/manga/$pageSuffix?m_orderby=trending",
|
||||
formHeaders,
|
||||
headers,
|
||||
CacheControl.FORCE_NETWORK,
|
||||
)
|
||||
}
|
||||
|
@ -20,7 +18,7 @@ class AdultWebtoon : Madara("Adult Webtoon", "https://adultwebtoon.com", "en") {
|
|||
val pageSuffix = if (page != 1) "page/$page/" else ""
|
||||
return GET(
|
||||
"$baseUrl/manga/$pageSuffix?m_orderby=latest",
|
||||
formHeaders,
|
||||
headers,
|
||||
CacheControl.FORCE_NETWORK,
|
||||
)
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@ class AiYuManga : Madara(
|
|||
SimpleDateFormat("MM/dd/yyyy", Locale("es")),
|
||||
) {
|
||||
override val useNewChapterEndpoint = true
|
||||
override val useLoadMoreSearch = true
|
||||
override val chapterUrlSuffix = ""
|
||||
|
||||
override val mangaDetailsSelectorStatus = "div.post-content_item:contains(Status) > div.summary-content"
|
||||
|
|
|
@ -3,14 +3,11 @@ package eu.kanade.tachiyomi.extension.tr.araznovel
|
|||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Response
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class ArazNovel : Madara("ArazNovel", "https://www.araznovel.com", "tr", SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())) {
|
||||
override fun formBuilder(page: Int, popular: Boolean): FormBody.Builder = super.formBuilder(page, popular)
|
||||
.add("vars[meta_query][0][0][value]", "manga")
|
||||
|
||||
override fun chapterListParse(response: Response): List<SChapter> {
|
||||
val document = response.asJsoup()
|
||||
|
|
|
@ -18,7 +18,6 @@ class DoujinHentai : Madara(
|
|||
SimpleDateFormat("d MMM. yyyy", Locale.ENGLISH),
|
||||
) {
|
||||
|
||||
override val useLoadMoreSearch = false
|
||||
override val fetchGenres = false
|
||||
|
||||
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/lista-manga-hentai?orderby=views&page=$page", headers)
|
||||
|
|
|
@ -14,7 +14,6 @@ class EGYManga : Madara(
|
|||
) {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
|
||||
override val pageListParseSelector = "div.separator"
|
||||
|
|
|
@ -5,6 +5,5 @@ import eu.kanade.tachiyomi.multisrc.madara.Madara
|
|||
class FreeMangaTop : Madara("FreeMangaTop", "https://freemangatop.com", "en") {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -1,32 +1,14 @@
|
|||
package eu.kanade.tachiyomi.extension.vi.hentaicube
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
import okhttp3.CacheControl
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class HentaiCB : Madara("Hentai CB", "https://hencb.top", "vi", SimpleDateFormat("dd/MM/yyyy", Locale("vi"))) {
|
||||
override val id: Long = 823638192569572166
|
||||
override val useLoadMoreSearch = false
|
||||
override fun pageListParse(document: Document): List<Page> {
|
||||
return super.pageListParse(document).distinctBy { it.imageUrl }
|
||||
}
|
||||
override fun popularMangaRequest(page: Int): Request {
|
||||
return GET(
|
||||
"$baseUrl/manga/page/$page/?m_orderby=views",
|
||||
formHeaders,
|
||||
CacheControl.FORCE_NETWORK,
|
||||
)
|
||||
}
|
||||
override fun latestUpdatesRequest(page: Int): Request {
|
||||
return GET(
|
||||
"$baseUrl/manga/page/$page/?m_orderby=latest",
|
||||
formHeaders,
|
||||
CacheControl.FORCE_NETWORK,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,5 @@ class HentaiManga : Madara(
|
|||
) {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -5,6 +5,5 @@ import eu.kanade.tachiyomi.multisrc.madara.Madara
|
|||
class HentaiWebtoon : Madara("HentaiWebtoon", "https://hentaiwebtoon.com", "en") {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ class InariManga : Madara(
|
|||
override val mangaDetailsSelectorStatus = "div.card-body tr:has(th:contains(Estatus)) > td"
|
||||
override val mangaDetailsSelectorGenre = "div.my-auto > div.inline-block > a"
|
||||
|
||||
override val useLoadMoreSearch = false
|
||||
override val useNewChapterEndpoint = true
|
||||
|
||||
override fun chapterListSelector() = "tr.wp-manga-chapter"
|
||||
|
|
|
@ -23,7 +23,6 @@ class InstaManhwa : Madara(
|
|||
) {
|
||||
|
||||
override val supportsLatest: Boolean = false
|
||||
override val useLoadMoreSearch = false
|
||||
override val fetchGenres = false
|
||||
|
||||
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/latest?page=$page", headers)
|
||||
|
|
|
@ -30,7 +30,6 @@ class Manga18fx : Madara(
|
|||
|
||||
override val fetchGenres = false
|
||||
override val sendViewCount = false
|
||||
override val useLoadMoreSearch = false
|
||||
|
||||
override fun popularMangaRequest(page: Int) = GET(baseUrl, headers)
|
||||
|
||||
|
|
|
@ -5,6 +5,5 @@ import eu.kanade.tachiyomi.multisrc.madara.Madara
|
|||
class MangaGreat : Madara("MangaGreat", "https://mangagreat.com", "en") {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@ import okhttp3.Response
|
|||
class ManhuaES : Madara("Manhua ES", "https://manhuaes.com", "en") {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
|
||||
override fun chapterListParse(response: Response): List<SChapter> {
|
||||
|
|
|
@ -5,6 +5,5 @@ import eu.kanade.tachiyomi.multisrc.madara.Madara
|
|||
class ManhuaFast : Madara("ManhuaFast", "https://manhuafast.com", "en") {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import eu.kanade.tachiyomi.multisrc.madara.Madara
|
|||
class ManhuaPlus : Madara("Manhua Plus", "https://manhuaplus.com", "en") {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
|
||||
override val pageListParseSelector = ".read-container img"
|
||||
|
|
|
@ -7,6 +7,5 @@ class ManhuaUS : Madara("ManhuaUS", "https://manhuaus.com", "en") {
|
|||
override val useNewChapterEndpoint: Boolean = true
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -37,8 +37,6 @@ abstract class Manhwa18Cc(
|
|||
lang: String,
|
||||
) : Madara(name, baseUrl, lang, SimpleDateFormat("dd MMM yyyy", Locale.US)) {
|
||||
|
||||
override val useLoadMoreSearch = false
|
||||
|
||||
override val fetchGenres = false
|
||||
|
||||
override fun popularMangaSelector() = "div.manga-item"
|
||||
|
|
|
@ -5,6 +5,5 @@ import eu.kanade.tachiyomi.multisrc.madara.Madara
|
|||
class Manhwa18Org : Madara("Manhwa18.org", "https://manhwa18.org", "en") {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -12,6 +12,5 @@ class Manhwa68 : Madara(
|
|||
) {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -7,21 +7,19 @@ import okhttp3.Request
|
|||
|
||||
class Manhwafull : Madara("Manhwafull", "https://manhwafull.com", "en") {
|
||||
|
||||
override val useLoadMoreSearch = false
|
||||
|
||||
override fun popularMangaNextPageSelector(): String? = "a.nextpostslink"
|
||||
|
||||
override fun popularMangaRequest(page: Int): Request {
|
||||
return GET(
|
||||
"$baseUrl/manga-mwf/page/$page/?m_orderby=views",
|
||||
formHeaders,
|
||||
headers,
|
||||
CacheControl.FORCE_NETWORK,
|
||||
)
|
||||
}
|
||||
override fun latestUpdatesRequest(page: Int): Request {
|
||||
return GET(
|
||||
"$baseUrl/manga-mwf/page/$page/?m_orderby=latest",
|
||||
formHeaders,
|
||||
headers,
|
||||
CacheControl.FORCE_NETWORK,
|
||||
)
|
||||
}
|
||||
|
|
|
@ -21,8 +21,6 @@ class ManhwaLatino : Madara(
|
|||
|
||||
override val supportsLatest = false
|
||||
|
||||
override val useLoadMoreSearch = false
|
||||
|
||||
override val useNewChapterEndpoint = true
|
||||
|
||||
override val chapterUrlSelector = "a:eq(1)"
|
||||
|
|
|
@ -16,7 +16,6 @@ class ManhwasMen : Madara("Manhwas Men", "https://manhwas.men", "en") {
|
|||
|
||||
override val fetchGenres = false
|
||||
override val sendViewCount = false
|
||||
override val useLoadMoreSearch = false
|
||||
|
||||
// popular
|
||||
override fun popularMangaSelector() = "div.col-6"
|
||||
|
|
|
@ -5,6 +5,5 @@ import eu.kanade.tachiyomi.multisrc.madara.Madara
|
|||
class Manhwatop : Madara("Manhwatop", "https://manhwatop.com", "en") {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -7,6 +7,5 @@ class ManyToonMe : Madara("ManyToon.me", "https://manytoon.me", "en") {
|
|||
override val useNewChapterEndpoint: Boolean = true
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.en.nightcomic
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import okhttp3.Headers
|
||||
|
||||
class NightComic : Madara("Night Comic", "https://www.nightcomic.com", "en") {
|
||||
override val formHeaders: Headers = headersBuilder()
|
||||
.add("Content-Type", "application/x-www-form-urlencoded")
|
||||
.add("X-MOD-SBB-CTYPE", "xhr")
|
||||
.build()
|
||||
}
|
|
@ -11,8 +11,6 @@ import java.util.Locale
|
|||
|
||||
class PojokManga : Madara("Pojok Manga", "https://pojokmanga.net", "id", SimpleDateFormat("MMM dd, yyyy", Locale.US)) {
|
||||
|
||||
override val useLoadMoreSearch = false
|
||||
|
||||
override val useNewChapterEndpoint = true
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
|
|
|
@ -14,7 +14,6 @@ class ShieldManga : Madara("Shield Manga", "https://shieldmanga.io", "en") {
|
|||
.build()
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
|
||||
override fun chapterListSelector() = "li.wp-manga-hapter, .version-chap li"
|
||||
|
|
|
@ -1,16 +1,10 @@
|
|||
package eu.kanade.tachiyomi.extension.en.shoujohearts
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
import okhttp3.CacheControl
|
||||
import okhttp3.Request
|
||||
|
||||
class ShoujoHearts : Madara("ShoujoHearts", "https://shoujohearts.com", "en") {
|
||||
override fun popularMangaRequest(page: Int): Request =
|
||||
POST("$baseUrl/reader/wp-admin/admin-ajax.php", formHeaders, formBuilder(page, true).build(), CacheControl.FORCE_NETWORK)
|
||||
|
||||
override fun latestUpdatesRequest(page: Int): Request =
|
||||
POST("$baseUrl/reader/wp-admin/admin-ajax.php", formHeaders, formBuilder(page, false).build(), CacheControl.FORCE_NETWORK)
|
||||
override val mangaSubString = "reader/manga"
|
||||
|
||||
override fun searchPage(page: Int): String = "reader/page/$page/"
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ class ToonGod : Madara("ToonGod", "https://www.toongod.com", "en", SimpleDateFor
|
|||
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/webtoons/page/$page/?m_orderby=views", headers)
|
||||
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/webtoons/page/$page/?m_orderby=latest", headers)
|
||||
override val mangaSubString = "webtoons"
|
||||
override val useLoadMoreSearch = false
|
||||
override fun imageRequest(page: Page): Request {
|
||||
return GET(page.imageUrl!!, headers)
|
||||
}
|
||||
|
|
|
@ -9,6 +9,5 @@ class TopManhua : Madara("Top Manhua", "https://topmanhua.com", "en", SimpleDate
|
|||
override fun headersBuilder(): Headers.Builder = super.headersBuilder().add("Referer", baseUrl)
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ class VerManhwas : Madara(
|
|||
dateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("es")),
|
||||
) {
|
||||
override val useNewChapterEndpoint = true
|
||||
override val useLoadMoreSearch = false
|
||||
|
||||
override fun genresRequest(): Request {
|
||||
return GET("$baseUrl/?s=&post_type=wp-manga", headers)
|
||||
|
|
|
@ -26,11 +26,6 @@ class YugenMangas : Madara(
|
|||
.add("Origin", baseUrl)
|
||||
.add("Referer", "$baseUrl/")
|
||||
|
||||
override val formHeaders: Headers = headersBuilder()
|
||||
.add("X-Requested-With", "XMLHttpRequest")
|
||||
.set("Referer", "$baseUrl/todas-las-series/")
|
||||
.build()
|
||||
|
||||
override val useNewChapterEndpoint: Boolean = true
|
||||
|
||||
override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
|
||||
|
|
|
@ -5,6 +5,5 @@ import eu.kanade.tachiyomi.multisrc.madara.Madara
|
|||
class Zinmanga : Madara("Zinmanga", "https://zinmanga.com", "en") {
|
||||
|
||||
// The website does not flag the content.
|
||||
override val useLoadMoreSearch = false
|
||||
override val filterNonMangaItems = false
|
||||
}
|
||||
|
|
|
@ -143,11 +143,21 @@ abstract class Madara(
|
|||
protected open val json: Json by injectLazy()
|
||||
|
||||
/**
|
||||
* If enabled, will remove non-manga items in search.
|
||||
* If enabled, will attempt to remove non-manga items in popular and latest.
|
||||
* The filter will not be used in search as the theme doesn't set the CSS class.
|
||||
* Can be disabled if the source incorrectly sets the entry types.
|
||||
*/
|
||||
protected open val filterNonMangaItems = true
|
||||
|
||||
/**
|
||||
* The CSS selector used to filter manga items in popular and latest
|
||||
* if `filterNonMangaItems` is set to `true`. Can be override if needed.
|
||||
* If the flag is set to `false`, it will be empty by default.
|
||||
*/
|
||||
protected open val mangaEntrySelector: String by lazy {
|
||||
if (filterNonMangaItems) ".manga" else ""
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatically fetched genres from the source to be used in the filters.
|
||||
*/
|
||||
|
@ -179,7 +189,7 @@ abstract class Madara(
|
|||
}
|
||||
|
||||
// exclude/filter bilibili manga from list
|
||||
override fun popularMangaSelector() = "div.page-item-detail:not(:has(a[href*='bilibilicomics.com']))"
|
||||
override fun popularMangaSelector() = "div.page-item-detail:not(:has(a[href*='bilibilicomics.com']))$mangaEntrySelector"
|
||||
|
||||
open val popularMangaUrlSelector = "div.post-title a"
|
||||
|
||||
|
@ -200,38 +210,15 @@ abstract class Madara(
|
|||
return manga
|
||||
}
|
||||
|
||||
open fun formBuilder(page: Int, popular: Boolean) = FormBody.Builder().apply {
|
||||
add("action", "madara_load_more")
|
||||
add("page", (page - 1).toString())
|
||||
add("template", "madara-core/content/content-archive")
|
||||
add("vars[orderby]", "meta_value_num")
|
||||
add("vars[paged]", "1")
|
||||
add("vars[posts_per_page]", "20")
|
||||
add("vars[post_type]", "wp-manga")
|
||||
add("vars[post_status]", "publish")
|
||||
add("vars[meta_key]", if (popular) "_wp_manga_views" else "_latest_update")
|
||||
add("vars[order]", "desc")
|
||||
add("vars[sidebar]", if (popular) "full" else "right")
|
||||
add("vars[manga_archives_item_layout]", "big_thumbnail")
|
||||
|
||||
if (filterNonMangaItems) {
|
||||
add("vars[meta_query][0][key]", "_wp_manga_chapter_type")
|
||||
add("vars[meta_query][0][value]", "manga")
|
||||
}
|
||||
}
|
||||
|
||||
open val formHeaders: Headers by lazy { headersBuilder().build() }
|
||||
|
||||
override fun popularMangaRequest(page: Int): Request {
|
||||
return POST(
|
||||
"$baseUrl/wp-admin/admin-ajax.php",
|
||||
formHeaders,
|
||||
formBuilder(page, true).build(),
|
||||
CacheControl.FORCE_NETWORK,
|
||||
return GET(
|
||||
url = "$baseUrl/$mangaSubString/${searchPage(page)}?m_orderby=views",
|
||||
headers = headers,
|
||||
cache = CacheControl.FORCE_NETWORK,
|
||||
)
|
||||
}
|
||||
|
||||
override fun popularMangaNextPageSelector(): String? = "body:not(:has(.no-posts))"
|
||||
override fun popularMangaNextPageSelector(): String? = searchMangaNextPageSelector()
|
||||
|
||||
// Latest Updates
|
||||
|
||||
|
@ -243,7 +230,11 @@ abstract class Madara(
|
|||
}
|
||||
|
||||
override fun latestUpdatesRequest(page: Int): Request {
|
||||
return POST("$baseUrl/wp-admin/admin-ajax.php", formHeaders, formBuilder(page, false).build(), CacheControl.FORCE_NETWORK)
|
||||
return GET(
|
||||
url = "$baseUrl/$mangaSubString/${searchPage(page)}?m_orderby=latest",
|
||||
headers = headers,
|
||||
cache = CacheControl.FORCE_NETWORK,
|
||||
)
|
||||
}
|
||||
|
||||
override fun latestUpdatesNextPageSelector(): String? = popularMangaNextPageSelector()
|
||||
|
@ -258,39 +249,15 @@ abstract class Madara(
|
|||
|
||||
open val mangaSubString = "manga"
|
||||
|
||||
/**
|
||||
* If enabled, the search will use the madara_load_more action instead of
|
||||
* the normal page. This allows more control over the query and will permit
|
||||
* the filtering of non-manga items such as novels or videos.
|
||||
*/
|
||||
open val useLoadMoreSearch = true
|
||||
|
||||
open fun searchFormBuilder(page: Int, showOnlyManga: Boolean): FormBody.Builder = FormBody.Builder().apply {
|
||||
add("action", "madara_load_more")
|
||||
add("page", (page - 1).toString())
|
||||
add("template", "madara-core/content/content-search")
|
||||
add("vars[paged]", "1")
|
||||
add("vars[template]", "archive")
|
||||
add("vars[sidebar]", "right")
|
||||
add("vars[post_type]", "wp-manga")
|
||||
add("vars[post_status]", "publish")
|
||||
add("vars[manga_archives_item_layout]", "big_thumbnail")
|
||||
add("vars[posts_per_page]", "20")
|
||||
|
||||
if (filterNonMangaItems && showOnlyManga) {
|
||||
add("vars[meta_query][0][key]", "_wp_manga_chapter_type")
|
||||
add("vars[meta_query][0][value]", "manga")
|
||||
}
|
||||
}
|
||||
|
||||
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
|
||||
if (query.startsWith(URL_SEARCH_PREFIX) && !useLoadMoreSearch) {
|
||||
if (query.startsWith(URL_SEARCH_PREFIX)) {
|
||||
val mangaUrl = "$baseUrl/$mangaSubString/${query.substringAfter(URL_SEARCH_PREFIX)}"
|
||||
return client.newCall(GET(mangaUrl, headers))
|
||||
.asObservable().map { response ->
|
||||
MangasPage(listOf(mangaDetailsParse(response.asJsoup()).apply { url = "/$mangaSubString/${query.substringAfter(URL_SEARCH_PREFIX)}/" }), false)
|
||||
}
|
||||
}
|
||||
|
||||
return client.newCall(searchMangaRequest(page, query, filters))
|
||||
.asObservable().doOnNext { response ->
|
||||
if (!response.isSuccessful) {
|
||||
|
@ -311,10 +278,6 @@ abstract class Madara(
|
|||
protected open fun searchPage(page: Int): String = "page/$page/"
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
if (useLoadMoreSearch) {
|
||||
return searchLoadMoreRequest(page, query, filters)
|
||||
}
|
||||
|
||||
val url = "$baseUrl/${searchPage(page)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
url.addQueryParameter("s", query)
|
||||
url.addQueryParameter("post_type", "wp-manga")
|
||||
|
@ -366,148 +329,6 @@ abstract class Madara(
|
|||
return GET(url.toString(), headers)
|
||||
}
|
||||
|
||||
protected open fun searchLoadMoreRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val showOnlyManga = filters.filterIsInstance<ShowOnlyMangaFilter>()
|
||||
.firstOrNull()?.state ?: true
|
||||
|
||||
val formBodyBuilder = searchFormBuilder(page, showOnlyManga).apply {
|
||||
if (query.startsWith(URL_SEARCH_PREFIX)) {
|
||||
add("vars[name]", query.removePrefix(URL_SEARCH_PREFIX))
|
||||
|
||||
return@apply
|
||||
}
|
||||
|
||||
add("vars[s]", query)
|
||||
|
||||
var metaQueryIdx = if (filterNonMangaItems && showOnlyManga) 1 else 0
|
||||
var taxQueryIdx = 0
|
||||
val genres = filters.filterIsInstance<GenreList>().firstOrNull()?.state
|
||||
?.filter { it.state }
|
||||
?.map { it.id }
|
||||
.orEmpty()
|
||||
|
||||
filters.forEach { filter ->
|
||||
when (filter) {
|
||||
is AuthorFilter -> {
|
||||
if (filter.state.isNotBlank()) {
|
||||
add("vars[tax_query][$taxQueryIdx][taxonomy]", "wp-manga-author")
|
||||
add("vars[tax_query][$taxQueryIdx][field]", "name")
|
||||
add("vars[tax_query][$taxQueryIdx][terms]", filter.state)
|
||||
|
||||
taxQueryIdx++
|
||||
}
|
||||
}
|
||||
is ArtistFilter -> {
|
||||
if (filter.state.isNotBlank()) {
|
||||
add("vars[tax_query][$taxQueryIdx][taxonomy]", "wp-manga-artist")
|
||||
add("vars[tax_query][$taxQueryIdx][field]", "name")
|
||||
add("vars[tax_query][$taxQueryIdx][terms]", filter.state)
|
||||
|
||||
taxQueryIdx++
|
||||
}
|
||||
}
|
||||
is YearFilter -> {
|
||||
if (filter.state.isNotBlank()) {
|
||||
add("vars[tax_query][$taxQueryIdx][taxonomy]", "wp-manga-release")
|
||||
add("vars[tax_query][$taxQueryIdx][field]", "name")
|
||||
add("vars[tax_query][$taxQueryIdx][terms]", filter.state)
|
||||
|
||||
taxQueryIdx++
|
||||
}
|
||||
}
|
||||
is StatusFilter -> {
|
||||
val statuses = filter.state
|
||||
.filter { it.state }
|
||||
.map { it.id }
|
||||
|
||||
if (statuses.isNotEmpty()) {
|
||||
add("vars[meta_query][$metaQueryIdx][key]", "_wp_manga_status")
|
||||
|
||||
statuses.forEachIndexed { i, slug ->
|
||||
add("vars[meta_query][$metaQueryIdx][value][$i]", slug)
|
||||
}
|
||||
|
||||
metaQueryIdx++
|
||||
}
|
||||
}
|
||||
is OrderByFilter -> {
|
||||
if (filter.state != 0) {
|
||||
when (filter.toUriPart()) {
|
||||
"latest" -> {
|
||||
add("vars[orderby]", "meta_value_num")
|
||||
add("vars[order]", "DESC")
|
||||
add("vars[meta_key]", "_latest_update")
|
||||
}
|
||||
"alphabet" -> {
|
||||
add("vars[orderby]", "post_title")
|
||||
add("vars[order]", "ASC")
|
||||
}
|
||||
"rating" -> {
|
||||
add("vars[orderby][query_average_reviews]", "DESC")
|
||||
add("vars[orderby][query_total_reviews]", "DESC")
|
||||
}
|
||||
"trending" -> {
|
||||
add("vars[orderby]", "meta_value_num")
|
||||
add("vars[meta_key]", "_wp_manga_week_views_value")
|
||||
add("vars[order]", "DESC")
|
||||
}
|
||||
"views" -> {
|
||||
add("vars[orderby]", "meta_value_num")
|
||||
add("vars[meta_key]", "_wp_manga_views")
|
||||
add("vars[order]", "DESC")
|
||||
}
|
||||
else -> {
|
||||
add("vars[orderby]", "date")
|
||||
add("vars[order]", "DESC")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
is AdultContentFilter -> {
|
||||
if (filter.state != 0) {
|
||||
add("vars[meta_query][$metaQueryIdx][key]", "manga_adult_content")
|
||||
add(
|
||||
"vars[meta_query][$metaQueryIdx][compare]",
|
||||
if (filter.state == 1) "not exists" else "exists",
|
||||
)
|
||||
|
||||
metaQueryIdx++
|
||||
}
|
||||
}
|
||||
is GenreConditionFilter -> {
|
||||
if (filter.state == 1 && genres.isNotEmpty()) {
|
||||
add("vars[tax_query][$taxQueryIdx][operation]", "AND")
|
||||
}
|
||||
}
|
||||
is GenreList -> {
|
||||
if (genres.isNotEmpty()) {
|
||||
add("vars[tax_query][$taxQueryIdx][taxonomy]", "wp-manga-genre")
|
||||
add("vars[tax_query][$taxQueryIdx][field]", "slug")
|
||||
|
||||
genres.forEachIndexed { i, slug ->
|
||||
add("vars[tax_query][$taxQueryIdx][terms][$i]", slug)
|
||||
}
|
||||
|
||||
taxQueryIdx++
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val searchHeaders = headersBuilder()
|
||||
.add("X-Requested-With", "XMLHttpRequest")
|
||||
.build()
|
||||
|
||||
return POST(
|
||||
"$baseUrl/wp-admin/admin-ajax.php",
|
||||
searchHeaders,
|
||||
formBodyBuilder.build(),
|
||||
CacheControl.FORCE_NETWORK,
|
||||
)
|
||||
}
|
||||
|
||||
protected open val authorFilterTitle: String = when (lang) {
|
||||
"pt-BR" -> "Autor"
|
||||
else -> "Author"
|
||||
|
@ -611,11 +432,6 @@ abstract class Madara(
|
|||
else -> "Press 'Reset' to attempt to show the genres"
|
||||
}
|
||||
|
||||
protected open val showOnlyMangaEntriesLabel: String = when (lang) {
|
||||
"pt-BR" -> "Mostrar somente mangás"
|
||||
else -> "Show only manga entries"
|
||||
}
|
||||
|
||||
protected class AuthorFilter(title: String) : Filter.Text(title)
|
||||
protected class ArtistFilter(title: String) : Filter.Text(title)
|
||||
protected class YearFilter(title: String) : Filter.Text(title)
|
||||
|
@ -638,8 +454,6 @@ abstract class Madara(
|
|||
protected class GenreList(title: String, genres: List<Genre>) : Filter.Group<Genre>(title, genres)
|
||||
class Genre(name: String, val id: String = name) : Filter.CheckBox(name)
|
||||
|
||||
protected class ShowOnlyMangaFilter(label: String) : Filter.CheckBox(label, true)
|
||||
|
||||
override fun getFilterList(): FilterList {
|
||||
val filters = mutableListOf(
|
||||
AuthorFilter(authorFilterTitle),
|
||||
|
@ -647,17 +461,13 @@ abstract class Madara(
|
|||
YearFilter(yearFilterTitle),
|
||||
StatusFilter(statusFilterTitle, getStatusList()),
|
||||
OrderByFilter(
|
||||
orderByFilterTitle,
|
||||
orderByFilterOptions.zip(orderByFilterOptionsValues),
|
||||
if (useLoadMoreSearch) 5 else 0,
|
||||
title = orderByFilterTitle,
|
||||
options = orderByFilterOptions.zip(orderByFilterOptionsValues),
|
||||
state = 0,
|
||||
),
|
||||
AdultContentFilter(adultContentFilterTitle, adultContentFilterOptions),
|
||||
)
|
||||
|
||||
if (useLoadMoreSearch) {
|
||||
filters.add(ShowOnlyMangaFilter(showOnlyMangaEntriesLabel))
|
||||
}
|
||||
|
||||
if (genresList.isNotEmpty()) {
|
||||
filters += listOf(
|
||||
Filter.Separator(),
|
||||
|
@ -709,10 +519,7 @@ abstract class Madara(
|
|||
return manga
|
||||
}
|
||||
|
||||
override fun searchMangaNextPageSelector(): String? = when {
|
||||
useLoadMoreSearch -> popularMangaNextPageSelector()
|
||||
else -> "div.nav-previous, nav.navigation-ajax, a.nextpostslink"
|
||||
}
|
||||
override fun searchMangaNextPageSelector(): String? = "div.nav-previous, nav.navigation-ajax, a.nextpostslink"
|
||||
|
||||
// Manga Details Parse
|
||||
|
||||
|
|
Loading…
Reference in New Issue