diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index a779aa5d..a637d633 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -54,7 +54,7 @@ internal abstract class MadaraParser( } } - override val isMultipleTagsSupported = false + override val isMultipleTagsSupported = true override val availableSortOrders: Set = EnumSet.of( SortOrder.UPDATED, @@ -66,12 +66,15 @@ internal abstract class MadaraParser( SortOrder.ALPHABETICAL, SortOrder.ALPHABETICAL_DESC, SortOrder.RATING, + SortOrder.RATING_ASC, ) override val availableStates: Set = EnumSet.allOf(MangaState::class.java) override val availableContentRating: Set = EnumSet.of(ContentRating.SAFE, ContentRating.ADULT) + override val isTagsExclusionSupported = true + protected open val tagPrefix = "manga-genre/" protected open val datePattern = "MMMM d, yyyy" protected open val stylePage = "?style=list" @@ -224,72 +227,87 @@ internal abstract class MadaraParser( } is MangaListFilter.Advanced -> { + if (pages > 1) { + append("/page/") + append(pages.toString()) + } + append("/?s=") + //Support query + //append(filter.query.urlEncoded()) + + append("&post_type=wp-manga") + + // Known bug: in some cases, if there are no manga with the associated tags, the source returns the full list of manga if (filter.tags.isNotEmpty()) { - filter.tags.oneOrThrowIfMany()?.let { - append("/$tagPrefix") + filter.tags.forEach { + append("&genre[]=") append(it.key) - if (pages > 1) { - append("/page/") - append(pages.toString()) - } - append("/?") } - } else { + } - if (pages > 1) { - append("/page/") - append(pages.toString()) + filter.states.forEach { + append("&status[]=") + when (it) { + MangaState.ONGOING -> append("on-going") + MangaState.FINISHED -> append("end") + MangaState.ABANDONED -> append("canceled") + MangaState.PAUSED -> append("on-hold") + MangaState.UPCOMING -> append("upcoming") } - append("/?s=&post_type=wp-manga") - filter.states.forEach { - append("&status[]=") + } + + filter.contentRating.oneOrThrowIfMany()?.let { + append("&adult=") + append( when (it) { - MangaState.ONGOING -> append("on-going") - MangaState.FINISHED -> append("end") - MangaState.ABANDONED -> append("canceled") - MangaState.PAUSED -> append("on-hold") - MangaState.UPCOMING -> append("upcoming") - } - } + ContentRating.SAFE -> "0" + ContentRating.ADULT -> "1" + else -> "" + }, + ) + } - filter.contentRating.oneOrThrowIfMany()?.let { - append("&adult=") - append( - when (it) { - ContentRating.SAFE -> "0" - ContentRating.ADULT -> "1" - else -> "" - }, - ) - } + // Support year + //filter.year?.let { + // append("&release=") + // append(filter.year) + //} - append("&") - } + // Support author + //filter.author?.let { + // append("&author=") + // append(filter.author) + //} - append("m_orderby=") + // Support artist + //filter.artist?.let { + // append("&artist=") + // append(filter.artist) + //} + + + append("&m_orderby=") when (filter.sortOrder) { SortOrder.POPULARITY -> append("views") SortOrder.UPDATED -> append("latest") SortOrder.NEWEST -> append("new-manga") SortOrder.ALPHABETICAL -> append("alphabet") SortOrder.RATING -> append("rating") + // SortOrder.RELEVANCE -> {} else -> append("latest") } } null -> { - append("?s&post_type=wp-manga&m_orderby=latest") + append("/?s=&post_type=wp-manga&m_orderby=latest") } } } return parseMangaList(webClient.httpGet(url).parseHtml()) } else { - val payload = if (filter?.sortOrder == SortOrder.RATING) { - createRequestTemplate(ratingRequest) - } else { - createRequestTemplate(defaultRequest) - } + + val payload = createRequestTemplate() payload["page"] = page.toString() @@ -301,8 +319,61 @@ internal abstract class MadaraParser( is MangaListFilter.Advanced -> { - filter.tags.oneOrThrowIfMany()?.let { - payload["vars[wp-manga-genre]"] = it.key + + // Support query + // filter.query.let { + // payload["vars[s]"] = filter.query.urlEncoded() + // } + + if (filter.tags.isNotEmpty()) { + var nTag = 0 + payload["vars[tax_query][0][taxonomy]"] = "wp-manga-genre" + payload["vars[tax_query][0][field]"] = "slug" + filter.tags.forEach { + payload["vars[tax_query][0][terms][$nTag]"] = it.key + nTag++ + } + payload["vars[tax_query][0][operator]"] = "IN" + } + + if (filter.tagsExclude.isNotEmpty()) { + var ntagsExclude = 0 + payload["vars[tax_query][1][taxonomy]"] = "wp-manga-genre" + payload["vars[tax_query][1][field]"] = "slug" + filter.tagsExclude.forEach { + payload["vars[tax_query][1][terms][$ntagsExclude]"] = it.key + ntagsExclude++ + } + payload["vars[tax_query][1][operator]"] = "NOT IN" + } + + // Support year + //filter.year?.let { + // payload["vars[tax_query][2][taxonomy]"] = wp-manga-release + // payload["vars[tax_query][2][field]"] = slug + // payload["vars[tax_query][2][terms][]"] = filter.year + //} + + // Support author + // filter.author.let { + // payload["vars[tax_query][3][taxonomy]"] = "wp-manga-author" + // payload["vars[tax_query][3][field]"] = "slug" + // payload["vars[tax_query][3][terms][0]"] = filter.author + // payload["vars[tax_query][3][operator]"] = "IN" + //} + + + // Support artist + // filter.artist.let { + // payload["vars[tax_query][3][taxonomy]"] = "wp-manga-artist" + // payload["vars[tax_query][3][field]"] = "slug" + // payload["vars[tax_query][3][terms][0]"] = filter.artist + // payload["vars[tax_query][3][operator]"] = "IN" + //} + + /// for add filter.year need to add || filter.year + if (filter.tags.isNotEmpty() || filter.tagsExclude.isNotEmpty()) { + payload["vars[tax_query][relation]"] = "AND" } when (filter.sortOrder) { @@ -346,12 +417,32 @@ internal abstract class MadaraParser( payload["vars[order]"] = "desc" } - SortOrder.RATING -> {} + SortOrder.RATING -> { + payload["vars[meta_query][0][query_avarage_reviews][key]"] = "_manga_avarage_reviews" + payload["vars[meta_query][0][query_total_reviews][key]"] = "_manga_total_votes" + + payload["vars[orderby][query_avarage_reviews]"] = "DESC" + payload["vars[orderby][query_total_reviews]"] = "DESC" + } + + SortOrder.RATING_ASC -> { + payload["vars[meta_query][0][query_avarage_reviews][key]"] = "_manga_avarage_reviews" + payload["vars[meta_query][0][query_total_reviews][key]"] = "_manga_total_votes" + + payload["vars[orderby][query_avarage_reviews]"] = "ASC" + payload["vars[orderby][query_total_reviews]"] = "ASC" + } + + // SortOrder.RELEVANCE -> { + // payload["vars[orderby]"] = "" + // } else -> payload["vars[meta_key]"] = "_latest_update" } filter.states.forEach { + payload["vars[meta_query][0][0][key]"] = "_wp_manga_status" + payload["vars[meta_query][0][0][compare]"] = "IN" payload["vars[meta_query][0][0][value][]"] = when (it) { MangaState.ONGOING -> "on-going" @@ -398,10 +489,10 @@ internal abstract class MadaraParser( url = href, publicUrl = href.toAbsoluteUrl(div.host ?: domain), coverUrl = div.selectFirst("img")?.src().orEmpty(), - title = (summary?.selectFirst("h3") ?: summary?.selectFirst("h4") - ?: div.selectFirst(".manga-name") ?: div.selectFirst(".post-title"))?.text().orEmpty(), + title = (summary?.selectFirst("h3, h4") ?: div.selectFirst(".manga-name, .post-title"))?.text() + .orEmpty(), altTitle = null, - rating = div.selectFirst("span.total_votes")?.ownText()?.toFloatOrNull()?.div(5f) ?: -1f, + rating = div.selectFirst("span.total_votes")?.ownText()?.toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN, tags = summary?.selectFirst(".mg_genres")?.select("a")?.mapNotNullToSet { a -> MangaTag( key = a.attr("href").removeSuffix('/').substringAfterLast('/'), @@ -459,13 +550,19 @@ internal abstract class MadaraParser( "div.description-summary div.summary__content, div.summary_content div.post-content_item > h5 + div, div.summary_content div.manga-excerpt, div.post-content div.manga-summary, div.post-content div.desc, div.c-page__content div.summary__content" protected open val selectGenre = "div.genres-content a" protected open val selectTestAsync = "div.listing-chapters_wrap" - protected open val selectState = "" + protected open val selectState = + "div.post-content_item:contains(Status), div.post-content_item:contains(Statut), " + + "div.post-content_item:contains(État), div.post-content_item:contains(حالة العمل), div.post-content_item:contains(Estado), div.post-content_item:contains(สถานะ)," + + "div.post-content_item:contains(Stato), div.post-content_item:contains(Durum), div.post-content_item:contains(Statüsü), div.post-content_item:contains(Статус)," + + "div.post-content_item:contains(状态), div.post-content_item:contains(الحالة)" + protected open val selectAlt = + ".post-content_item:contains(Alt) .summary-content, .post-content_item:contains(Nomes alternativos: ) .summary-content" + override suspend fun getDetails(manga: Manga): Manga = coroutineScope { val fullUrl = manga.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() - val body = doc.body() - val testCheckAsync = body.select(selectTestAsync) + val testCheckAsync = doc.select(selectTestAsync) val chaptersDeferred = if (testCheckAsync.isNullOrEmpty()) { async { loadChapters(manga.url, doc) } @@ -473,25 +570,9 @@ internal abstract class MadaraParser( async { getChapters(manga, doc) } } - val desc = body.select(selectDesc).html() - - val stateDiv = if (selectState.isEmpty()) { - (body.selectFirst("div.post-content_item:contains(Status)") - ?: body.selectFirst("div.post-content_item:contains(Statut)") - ?: body.selectFirst("div.post-content_item:contains(État)") - ?: body.selectFirst("div.post-content_item:contains(حالة العمل)") - ?: body.selectFirst("div.post-content_item:contains(Estado)") - ?: body.selectFirst("div.post-content_item:contains(สถานะ)") - ?: body.selectFirst("div.post-content_item:contains(Stato)") - ?: body.selectFirst("div.post-content_item:contains(Durum)") - ?: body.selectFirst("div.post-content_item:contains(Statüsü)") - ?: body.selectFirst("div.post-content_item:contains(Статус)") - ?: body.selectFirst("div.post-content_item:contains(状态)") - ?: body.selectFirst("div.post-content_item:contains(الحالة)"))?.selectLast("div.summary-content") - } else { - body.selectFirst(selectState) - } + val desc = doc.select(selectDesc).html() + val stateDiv = doc.selectFirst(selectState)?.selectLast("div.summary-content") val state = stateDiv?.let { when (it.text()) { @@ -503,10 +584,7 @@ internal abstract class MadaraParser( } } - val alt = - doc.body().select(".post-content_item:contains(Alt) .summary-content").firstOrNull()?.tableValue()?.text() - ?.trim() ?: doc.body().select(".post-content_item:contains(Nomes alternativos: ) .summary-content") - .firstOrNull()?.tableValue()?.text()?.trim() + val alt = doc.body().select(selectAlt).firstOrNull()?.tableValue()?.text()?.trim() manga.copy( tags = doc.body().select(selectGenre).mapNotNullToSet { a -> @@ -807,14 +885,10 @@ internal abstract class MadaraParser( } } - private val ratingRequest = - "action=madara_load_more&page=1&template=madara-core%2Fcontent%2Fcontent-search&vars%5Bs%5D=&vars%5Borderby%5D%5Bquery_avarage_reviews%5D=DESC&vars%5Borderby%5D%5Bquery_total_reviews%5D=DESC&vars%5Bpaged%5D=1&vars%5Btemplate%5D=search&vars%5Bmeta_query%5D%5B0%5D%5Brelation%5D=AND&vars%5Bmeta_query%5D%5B0%5D%5Bquery_avarage_reviews%5D%5Bkey%5D=_manga_avarage_reviews&vars%5Bmeta_query%5D%5B0%5D%5Bquery_total_reviews%5D%5Bkey%5D=_manga_total_votes&vars%5Bmeta_query%5D%5Brelation%5D=AND&vars%5Bpost_type%5D=wp-manga&vars%5Bpost_status%5D=publish&vars%5Bmanga_archives_item_layout%5D=default&vars%5Bmeta_query%5D%5B0%5D%5B0%5D%5Bkey%5D=_wp_manga_status&vars%5Bmeta_query%5D%5B0%5D%5B0%5D%5Bcompare%5D=IN" - private val defaultRequest = - "action=madara_load_more&page=1&template=madara-core%2Fcontent%2Fcontent-search&vars%5Bs%5D=&vars%5Borderby%5D=meta_value_num&vars%5Bpaged%5D=1&vars%5Btemplate%5D=search&vars%5Bmeta_query%5D%5B0%5D%5Brelation%5D=AND&vars%5Bmeta_query%5D%5Brelation%5D=OR&vars%5Bpost_type%5D=wp-manga&vars%5Bpost_status%5D=publish&vars%5Bmeta_key%5D=_latest_update&vars%5Border%5D=desc&vars%5Bmanga_archives_item_layout%5D=default&vars%5Bmeta_query%5D%5B0%5D%5B0%5D%5Bkey%5D=_wp_manga_status&vars%5Bmeta_query%5D%5B0%5D%5B0%5D%5Bcompare%5D=IN" - private companion object { - private fun createRequestTemplate(query: String) = - (query).split( + + private fun createRequestTemplate() = + ("action=madara_load_more&page=0&template=madara-core%2Fcontent%2Fcontent-search&vars%5Bs%5D=&vars%5Bpaged%5D=1&vars%5Btemplate%5D=search&vars%5Bmeta_query%5D%5B0%5D%5Brelation%5D=AND&vars%5Bmeta_query%5D%5Brelation%5D=AND&vars%5Bpost_type%5D=wp-manga&vars%5Bpost_status%5D=publish&vars%5Bmanga_archives_item_layout%5D=default").split( '&', ).map { val pos = it.indexOf('=') @@ -826,6 +900,5 @@ internal abstract class MadaraParser( return chunked(2).map { it.toInt(16).toByte() }.toByteArray() } - } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Ero18x.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Ero18x.kt index 334eaf6e..a942af9f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Ero18x.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Ero18x.kt @@ -7,7 +7,6 @@ import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl import org.koitharu.kotatsu.parsers.util.generateUid @@ -21,10 +20,6 @@ internal class Ero18x(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.ERO18X, "ero18x.com", 10) { override val datePattern = "MM/dd" override val sourceLocale: Locale = Locale.ENGLISH - override val withoutAjax = true - override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) - override suspend fun getChapters(manga: Manga, doc: Document): List { val dateFormat = SimpleDateFormat(datePattern, sourceLocale) return doc.body().select(selectChapter).mapChapters(reversed = true) { i, li -> diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Manhwa18Cc.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Manhwa18Cc.kt index 3b1cce08..1090b618 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Manhwa18Cc.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/Manhwa18Cc.kt @@ -15,6 +15,7 @@ internal class Manhwa18Cc(context: MangaLoaderContext) : override val listUrl = "webtoons/" override val tagPrefix = "webtoon-genre/" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val selectTestAsync = "ul.row-content-chapter" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManhwaRaw.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManhwaRaw.kt index 5d291f0c..054b7350 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManhwaRaw.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/ManhwaRaw.kt @@ -7,23 +7,17 @@ import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull import org.koitharu.kotatsu.parsers.util.generateUid import org.koitharu.kotatsu.parsers.util.mapChapters import org.koitharu.kotatsu.parsers.util.parseFailed import java.text.SimpleDateFormat -import java.util.EnumSet @MangaSourceParser("MANHWARAW", "ManhwaRaw", "", ContentType.HENTAI) internal class ManhwaRaw(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANHWARAW, "manhwa-raw.com", 10) { override val datePattern = "MM/dd" - override val withoutAjax = true - override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) - override suspend fun getChapters(manga: Manga, doc: Document): List { val dateFormat = SimpleDateFormat(datePattern, sourceLocale) return doc.body().select(selectChapter).mapChapters(reversed = true) { i, li -> diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt index 05807965..acdec391 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt @@ -14,6 +14,7 @@ internal class GateManga(context: MangaLoaderContext) : override val datePattern = "d MMMM، yyyy" override val listUrl = "ar/" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt index ecf011ff..e2cc5c71 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt @@ -25,6 +25,7 @@ internal class AdultWebtoon(context: MangaLoaderContext) : override val listUrl = "adult-webtoon/" override val postReq = true override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BestManhuaCom.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BestManhuaCom.kt index c8618606..d6d2096c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BestManhuaCom.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BestManhuaCom.kt @@ -11,6 +11,7 @@ import java.util.EnumSet internal class BestManhuaCom(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.BESTMANHUACOM, "bestmanhua.com", 10) { override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai3z.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai3z.kt index 432eaa5b..9f32f48e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai3z.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai3z.kt @@ -14,6 +14,7 @@ import java.util.EnumSet internal class Hentai3z(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.HENTAI3Z, "manga18h.xyz", pageSize = 20) { override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt index f5ec86e5..fc47770e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt @@ -15,6 +15,7 @@ internal class Hentai4Free(context: MangaLoaderContext) : override val tagPrefix = "hentai-tag/" override val listUrl = "" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val datePattern = "MMMM dd, yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt index 7dd60853..637b06e8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt @@ -23,6 +23,7 @@ internal class HentaiManga(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.HENTAIMANGA, "hentaimanga.me", 36) { override val postReq = true override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val availableStates: Set = emptySet() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt index abbe1e42..4848a5d1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt @@ -23,6 +23,7 @@ internal class HentaiWebtoon(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.HENTAIWEBTOON, "hentaiwebtoon.com") { override val postReq = true override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val availableStates: Set = emptySet() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HuntersScanEn.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HuntersScanEn.kt index 5d235c42..f44c8047 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HuntersScanEn.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HuntersScanEn.kt @@ -3,16 +3,11 @@ package org.koitharu.kotatsu.parsers.site.madara.en import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import java.util.EnumSet @MangaSourceParser("HUNTERSSCANEN", "EnHuntersScan", "en") internal class HuntersScanEn(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.HUNTERSSCANEN, "en.huntersscan.xyz") { - override val withoutAjax = true - override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val datePattern = "MM/dd/yyyy" override val tagPrefix = "series-genre/" override val listUrl = "manga/" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt index 24c86696..157c3c9b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt @@ -13,6 +13,7 @@ internal class IsekaiScanEuParser(context: MangaLoaderContext) : override val datePattern = "MM/dd/yyyy" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val listUrl = "mangax/" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga1k.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga1k.kt index ed4cd7aa..a271ffac 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga1k.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga1k.kt @@ -14,6 +14,7 @@ import java.util.EnumSet internal class Manga1k(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGA1K, "manga1k.com", 20) { override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga68.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga68.kt index 1d020779..88c01292 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga68.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga68.kt @@ -13,6 +13,7 @@ import java.util.EnumSet internal class Manga68(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGA68, "manga68.com") { override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt index cf8ddf6e..c4653fa3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt @@ -17,6 +17,7 @@ internal class MangaDass(context: MangaLoaderContext) : override val datePattern = "dd MMM yyyy" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val selectChapter = "li.a-h" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt index c694118a..502fe325 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt @@ -17,6 +17,7 @@ internal class MangaDna(context: MangaLoaderContext) : override val datePattern = "dd MMM yyyy" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val selectDesc = "div.dsct" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt index aa812e64..db600803 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt @@ -14,6 +14,7 @@ internal class MangaEffect(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGAEFFECT, "mangaeffect.com") { override val datePattern = "dd.MM.yyyy" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFastNet.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFastNet.kt index dddd1620..2091babf 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFastNet.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFastNet.kt @@ -11,6 +11,7 @@ import java.util.EnumSet internal class MangaFastNet(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGAFASTNET, "manhuafast.net") { override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt index 9b046524..945afc75 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt @@ -3,16 +3,11 @@ package org.koitharu.kotatsu.parsers.site.madara.en import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import java.util.EnumSet @MangaSourceParser("MANGAREAD", "MangaRead", "en") internal class MangaRead(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGAREAD, "www.mangaread.org") { override val tagPrefix = "genres/" override val datePattern = "dd.MM.yyyy" - override val withoutAjax = true - override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaus.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaus.kt index 53cbb175..fa657873 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaus.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaus.kt @@ -13,6 +13,7 @@ import java.util.EnumSet internal class Mangaus(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGAUS, "mangaus.xyz") { override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaplus.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaplus.kt index a195c989..cb7f476d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaplus.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaplus.kt @@ -16,6 +16,7 @@ internal class Manhuaplus(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANHUAPLUS, "manhuaplus.com") { override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuauss.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuauss.kt index c4450d18..538f3f98 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuauss.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuauss.kt @@ -11,6 +11,7 @@ import java.util.EnumSet internal class Manhuauss(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANHUAUSS, "manhuauss.com") { override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaHentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaHentai.kt index 1354b5d8..444de2d3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaHentai.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaHentai.kt @@ -23,6 +23,7 @@ internal class ManhwaHentai(context: MangaLoaderContext) : override val tagPrefix = "webtoon-genre/" override val listUrl = "webtoon/" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val postReq = true diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwaz.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwaz.kt index f8d092ac..cfcbea71 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwaz.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwaz.kt @@ -14,6 +14,7 @@ internal class Manhwaz(context: MangaLoaderContext) : override val listUrl = "genre/manhwa" override val tagPrefix = "genre/" override val withoutAjax = true + override val isTagsExclusionSupported = false override val selectTestAsync = "div.list-chapter" override val availableStates: Set = emptySet() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt index a5c4f374..0ab378b0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt @@ -24,6 +24,7 @@ internal class ManyToon(context: MangaLoaderContext) : override val listUrl = "comic/" override val postReq = true override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt index 403a872b..91c98794 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt @@ -15,6 +15,7 @@ internal class MmScans(context: MangaLoaderContext) : override val selectChapter = "li.chapter-li" override val selectDesc = "div.summary-text" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt index 54bc36be..2dc62fc4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt @@ -3,16 +3,11 @@ package org.koitharu.kotatsu.parsers.site.madara.en import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import java.util.EnumSet @MangaSourceParser("MURIMSCAN", "InkReads", "en") internal class MurimScan(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MURIMSCAN, "inkreads.com", 100) { - override val withoutAjax = true - override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val postReq = true override val listUrl = "mangax/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonGod.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonGod.kt index 9bfb9972..f448467a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonGod.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonGod.kt @@ -15,6 +15,7 @@ internal class ToonGod(context: MangaLoaderContext) : override val tagPrefix = "webtoon-genre/" override val datePattern = "d MMM yyyy" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanga.kt index 0bc546af..7e4c44c0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanga.kt @@ -12,6 +12,7 @@ internal class Zinmanga(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.ZINMANGA, "zinmanga.net") { override val datePattern = "MM/dd/yyyy" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaEs.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaEs.kt index cd49f10a..a2c9806d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaEs.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaEs.kt @@ -6,24 +6,17 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl import org.koitharu.kotatsu.parsers.util.generateUid import org.koitharu.kotatsu.parsers.util.mapChapters import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow import java.text.SimpleDateFormat -import java.util.EnumSet @MangaSourceParser("MANHWA_ES", "Manhwa-Es", "es") internal class ManhwaEs(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANHWA_ES, "manhwa-es.com", 10) { - - override val withoutAjax = true - override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val datePattern = "MM/dd" - override suspend fun getChapters(manga: Manga, doc: Document): List { val dateFormat = SimpleDateFormat(datePattern, sourceLocale) return doc.body().select(selectChapter).mapChapters(reversed = true) { i, li -> diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt index fd34c7c4..aa7b6590 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt @@ -7,20 +7,14 @@ import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.util.* import java.text.SimpleDateFormat -import java.util.EnumSet @MangaSourceParser("MANHWALATINO", "ManhwaLatino", "es", ContentType.HENTAI) internal class ManhwaLatino(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANHWALATINO, "manhwa-latino.com", 10) { - override val datePattern = "MM/dd" - override val withoutAjax = true - override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val selectPage = "div.page-break img.wp-manga-chapter-img" override suspend fun getChapters(manga: Manga, doc: Document): List { val root2 = doc.body().selectFirstOrThrow("div.content-area") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TmoManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TmoManga.kt index 43fadcbc..283d790d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TmoManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TmoManga.kt @@ -16,6 +16,7 @@ internal class TmoManga(context: MangaLoaderContext) : override val listUrl = "biblioteca/" override val selectGenre = "div.summary-content a.tags_manga" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.POPULARITY) override val availableStates: Set = emptySet() override val availableContentRating: Set = emptySet() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Vermanhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Vermanhwa.kt index 4800447e..ba0e9167 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Vermanhwa.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Vermanhwa.kt @@ -4,14 +4,8 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import java.util.EnumSet @MangaSourceParser("VERMANHWA", "Vermanhwa", "es", ContentType.HENTAI) internal class Vermanhwa(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.VERMANHWA, "vermanhwa.com", 10) { - override val withoutAjax = true - override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) -} + MadaraParser(context, MangaParserSource.VERMANHWA, "vermanhwa.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Indo18h.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Indo18h.kt index af59f27b..ce019030 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Indo18h.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Indo18h.kt @@ -14,6 +14,7 @@ import java.util.EnumSet internal class Indo18h(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.INDO18H, "indo18h.com", 24) { override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ManhwaHub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ManhwaHub.kt index 338bcfd9..9d8e69e8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ManhwaHub.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ManhwaHub.kt @@ -15,6 +15,7 @@ internal class ManhwaHub(context: MangaLoaderContext) : override val datePattern = "MMMM d, yyyy" override val sourceLocale: Locale = Locale.ENGLISH override val withoutAjax = true + override val isTagsExclusionSupported = false override val listUrl = "genre/manhwa" override val selectTestAsync = "ul.box-list-chapter" override val availableStates: Set = emptySet() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AncientComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AncientComics.kt index c02e59f8..823e6e08 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AncientComics.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AncientComics.kt @@ -14,6 +14,7 @@ internal class AncientComics(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.ANCIENTCOMICS, "ancientcomics.com.br") { override val datePattern: String = "dd/MM/yyyy" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atemporal.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atemporal.kt index b47b0af9..b63fa424 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atemporal.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atemporal.kt @@ -12,6 +12,7 @@ internal class Atemporal(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.ATEMPORAL, "atemporal.cloud") { override val datePattern: String = "d 'de' MMMM 'de' yyyy" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GalinhaSamurai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GalinhaSamurai.kt index 8e142e20..75c2c36f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GalinhaSamurai.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GalinhaSamurai.kt @@ -12,6 +12,7 @@ internal class GalinhaSamurai(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.GALINHASAMURAI, "galinhasamurai.com") { override val datePattern = "dd/MM/yyyy" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HuntersScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HuntersScan.kt index eacbd03b..5c2bd6af 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HuntersScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HuntersScan.kt @@ -3,16 +3,11 @@ package org.koitharu.kotatsu.parsers.site.madara.pt import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import java.util.EnumSet @MangaSourceParser("HUNTERSSCAN", "HuntersScan", "pt") internal class HuntersScan(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.HUNTERSSCAN, "hunterscomics.com", pageSize = 50) { - override val withoutAjax = true - override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val datePattern = "MM/dd/yyyy" override val tagPrefix = "series-genre/" override val listUrl = "series/" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ImperiodaBritannia.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ImperiodaBritannia.kt index bcbaa61b..918774a0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ImperiodaBritannia.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ImperiodaBritannia.kt @@ -12,6 +12,7 @@ internal class ImperiodaBritannia(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.IMPERIODABRITANNIA, "imperiodabritannia.com", 10) { override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Norterose.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Norterose.kt index 9f5e47f2..0fdb50d2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Norterose.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Norterose.kt @@ -12,6 +12,7 @@ internal class Norterose(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.NORTEROSE, "norterose.com.br", 10) { override val datePattern: String = "dd/MM/yyyy" override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Cat300.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Cat300.kt index fa7ca22c..392e7978 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Cat300.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Cat300.kt @@ -4,14 +4,9 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import java.util.EnumSet @MangaSourceParser("CAT_300", "Cat300", "th", ContentType.HENTAI) internal class Cat300(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.CAT_300, "cat300.net") { override val datePattern = "MMMM dd, yyyy" - override val withoutAjax = true - override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Doujinza.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Doujinza.kt index 46f4bff4..57a700e6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Doujinza.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Doujinza.kt @@ -12,6 +12,7 @@ import java.util.EnumSet internal class Doujinza(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.DOUJINZA, "doujinza.com", 24) { override val withoutAjax = true + override val isTagsExclusionSupported = false override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) override val datePattern = "MMMM dd, yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/RuyaManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/RuyaManga.kt index 68a8a409..b644a260 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/RuyaManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/RuyaManga.kt @@ -3,16 +3,11 @@ package org.koitharu.kotatsu.parsers.site.madara.tr import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import java.util.EnumSet @MangaSourceParser("RUYAMANGA", "RuyaManga", "tr") internal class RuyaManga(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.RUYAMANGA, "www.ruya-manga.com", 18) { override val tagPrefix = "manga-kategori/" override val datePattern = "dd/MM/yyyy" - override val withoutAjax = true - override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.ALPHABETICAL, SortOrder.RATING) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Saytruyenhay.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Saytruyenhay.kt index 13f9b16f..5099a107 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Saytruyenhay.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Saytruyenhay.kt @@ -17,6 +17,7 @@ internal class Saytruyenhay(context: MangaLoaderContext) : override val tagPrefix = "genre/" override val withoutAjax = true + override val isTagsExclusionSupported = false override val listUrl = "public/genre/manga/" override val availableStates: Set = emptySet() override val availableContentRating: Set = emptySet()