Fix filter capabilities/options default values

Koitharu 2 years ago
parent 3918bfafdf
commit 6d972a13fe
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

1
.gitignore vendored

@ -82,3 +82,4 @@ bin/
src/test/resources/cookies.txt src/test/resources/cookies.txt
local.properties local.properties
.kotlin/

@ -68,7 +68,7 @@ public abstract class MangaParser @InternalParsersApi constructor(
* @param order one of [availableSortOrders] or [defaultSortOrder] for default value * @param order one of [availableSortOrders] or [defaultSortOrder] for default value
* @param filter is a set of filter rules * @param filter is a set of filter rules
*/ */
public abstract suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> public abstract suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilter): List<Manga>
/** /**
* Parse details for [Manga]: chapters list, description, large cover, etc. * Parse details for [Manga]: chapters list, description, large cover, etc.

@ -2,7 +2,7 @@ package org.koitharu.kotatsu.parsers
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaListFilterV2 import org.koitharu.kotatsu.parsers.model.MangaListFilter
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.model.SortOrder
import org.koitharu.kotatsu.parsers.util.Paginator import org.koitharu.kotatsu.parsers.util.Paginator
@ -21,7 +21,7 @@ public abstract class PagedMangaParser(
@JvmField @JvmField
protected val searchPaginator: Paginator = Paginator(searchPageSize) protected val searchPaginator: Paginator = Paginator(searchPageSize)
final override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { final override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
return getList( return getList(
paginator = if (filter.query.isNullOrEmpty()) { paginator = if (filter.query.isNullOrEmpty()) {
paginator paginator
@ -34,13 +34,13 @@ public abstract class PagedMangaParser(
) )
} }
public abstract suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> public abstract suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga>
private suspend fun getList( private suspend fun getList(
paginator: Paginator, paginator: Paginator,
offset: Int, offset: Int,
order: SortOrder, order: SortOrder,
filter: MangaListFilterV2, filter: MangaListFilter,
): List<Manga> { ): List<Manga> {
val page = paginator.getPage(offset) val page = paginator.getPage(offset)
val list = getListPage(page, order, filter) val list = getListPage(page, order, filter)

@ -1,7 +1,7 @@
package org.koitharu.kotatsu.parsers package org.koitharu.kotatsu.parsers
import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaListFilterV2 import org.koitharu.kotatsu.parsers.model.MangaListFilter
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.model.SortOrder
@ -11,12 +11,12 @@ public abstract class SinglePageMangaParser(
source: MangaParserSource, source: MangaParserSource,
) : MangaParser(context, source) { ) : MangaParser(context, source) {
final override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { final override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
if (offset > 0) { if (offset > 0) {
return emptyList() return emptyList()
} }
return getList(order, filter) return getList(order, filter)
} }
public abstract suspend fun getList(order: SortOrder, filter: MangaListFilterV2): List<Manga> public abstract suspend fun getList(order: SortOrder, filter: MangaListFilter): List<Manga>
} }

@ -2,7 +2,7 @@ package org.koitharu.kotatsu.parsers.model
import java.util.* import java.util.*
public data class MangaListFilterV2( public data class MangaListFilter(
@JvmField val query: String? = null, @JvmField val query: String? = null,
@JvmField val tags: Set<MangaTag> = emptySet(), @JvmField val tags: Set<MangaTag> = emptySet(),
@JvmField val tagsExclude: Set<MangaTag> = emptySet(), @JvmField val tagsExclude: Set<MangaTag> = emptySet(),
@ -33,6 +33,6 @@ public data class MangaListFilterV2(
public companion object { public companion object {
@JvmStatic @JvmStatic
public val EMPTY: MangaListFilterV2 = MangaListFilterV2() public val EMPTY: MangaListFilter = MangaListFilter()
} }
} }

@ -6,44 +6,44 @@ public data class MangaListFilterCapabilities @InternalParsersApi constructor(
/** /**
* Whether parser supports filtering by more than one tag * Whether parser supports filtering by more than one tag
* @see [MangaListFilterV2.tags] * @see [MangaListFilter.tags]
* @see [MangaListFilterOptions.availableTags] * @see [MangaListFilterOptions.availableTags]
*/ */
val isMultipleTagsSupported: Boolean, val isMultipleTagsSupported: Boolean = false,
/** /**
* Whether parser supports tagsExclude field in filter * Whether parser supports tagsExclude field in filter
* @see [MangaListFilterV2.tagsExclude] * @see [MangaListFilter.tagsExclude]
* @see [MangaListFilterOptions.availableTags] * @see [MangaListFilterOptions.availableTags]
*/ */
val isTagsExclusionSupported: Boolean, val isTagsExclusionSupported: Boolean = false,
/** /**
* Whether parser supports searching by string query * Whether parser supports searching by string query
* @see [MangaListFilterV2.query] * @see [MangaListFilter.query]
*/ */
val isSearchSupported: Boolean, val isSearchSupported: Boolean = false,
/** /**
* Whether parser supports searching by string query combined within other filters * Whether parser supports searching by string query combined within other filters
*/ */
val isSearchWithFiltersSupported: Boolean, val isSearchWithFiltersSupported: Boolean = false,
/** /**
* Whether parser supports searching/filtering by year * Whether parser supports searching/filtering by year
* @see [MangaListFilterV2.year] * @see [MangaListFilter.year]
*/ */
val isYearSupported: Boolean = false, val isYearSupported: Boolean = false,
/** /**
* Whether parser supports searching by year range * Whether parser supports searching by year range
* @see [MangaListFilterV2.yearFrom] and [MangaListFilterV2.yearTo] * @see [MangaListFilter.yearFrom] and [MangaListFilter.yearTo]
*/ */
val isYearRangeSupported: Boolean = false, val isYearRangeSupported: Boolean = false,
/** /**
* Whether parser supports searching Original Languages * Whether parser supports searching Original Languages
* @see [MangaListFilterV2.originalLocale] * @see [MangaListFilter.originalLocale]
* @see [MangaListFilterOptions.availableLocales] * @see [MangaListFilterOptions.availableLocales]
*/ */
val isOriginalLocaleSupported: Boolean = false, val isOriginalLocaleSupported: Boolean = false,

@ -8,7 +8,7 @@ public data class MangaListFilterOptions @InternalParsersApi constructor(
/** /**
* Available tags (genres) * Available tags (genres)
*/ */
public val availableTags: Set<MangaTag>, public val availableTags: Set<MangaTag> = emptySet(),
/** /**
* Supported [MangaState] variants for filtering. May be empty. * Supported [MangaState] variants for filtering. May be empty.

@ -65,10 +65,6 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = true, isTagsExclusionSupported = true,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -122,7 +118,7 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser(
"zbato.org", "zbato.org",
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
when { when {
!filter.query.isNullOrEmpty() -> { !filter.query.isNullOrEmpty() -> {
return search(page, filter.query) return search(page, filter.query)

@ -41,10 +41,7 @@ internal class ComickFunParser(context: MangaLoaderContext) :
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = true, isTagsExclusionSupported = true,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = true, isYearRangeSupported = true,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -61,7 +58,7 @@ internal class ComickFunParser(context: MangaLoaderContext) :
availableLocales = emptySet(), availableLocales = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val domain = domain val domain = domain
val url = urlBuilder() val url = urlBuilder()
.host("api.$domain") .host("api.$domain")

@ -55,10 +55,6 @@ internal class ExHentaiParser(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = true, isTagsExclusionSupported = true,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override val isAuthorized: Boolean override val isAuthorized: Boolean
@ -87,10 +83,6 @@ internal class ExHentaiParser(
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = tagsMap.get().values.toSet(), availableTags = tagsMap.get().values.toSet(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = setOf( availableLocales = setOf(
Locale.JAPANESE, Locale.JAPANESE,
Locale.ENGLISH, Locale.ENGLISH,
@ -110,7 +102,7 @@ internal class ExHentaiParser(
), ),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val next = nextPages.get(page, 0L) val next = nextPages.get(page, 0L)
if (page > 0 && next == 0L) { if (page > 0 && next == 0L) {
@ -431,7 +423,7 @@ internal class ExHentaiParser(
?.toLongOrNull() ?: 1 ?.toLongOrNull() ?: 1
} }
private fun MangaListFilterV2.toSearchQuery(): String? { private fun MangaListFilter.toSearchQuery(): String? {
val joiner = StringUtil.StringJoiner(" ") val joiner = StringUtil.StringJoiner(" ")
for (tag in tags) { for (tag in tags) {
if (tag.key.isNumeric()) { if (tag.key.isNumeric()) {

@ -73,15 +73,11 @@ internal class HitomiLaParser(context: MangaLoaderContext) : MangaParser(context
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableLocales = localeMap.keys, availableLocales = localeMap.keys,
) )
@ -122,7 +118,7 @@ internal class HitomiLaParser(context: MangaLoaderContext) : MangaParser(context
private var cachedSearchIds: List<Int> = emptyList() private var cachedSearchIds: List<Int> = emptyList()
override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> = when { override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilter): List<Manga> = when {
filter.query.isNullOrEmpty() -> { filter.query.isNullOrEmpty() -> {
if (filter.tags.isEmpty()) { if (filter.tags.isEmpty()) {
when (order) { when (order) {

@ -25,9 +25,7 @@ internal class ImHentai(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -45,7 +43,7 @@ internal class ImHentai(context: MangaLoaderContext) :
override suspend fun getListPage( override suspend fun getListPage(
page: Int, page: Int,
order: SortOrder, order: SortOrder,
filter: MangaListFilterV2, filter: MangaListFilter,
): List<Manga> { ): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")

@ -25,16 +25,11 @@ internal abstract class LineWebtoonsParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
private val signer by lazy { private val signer by lazy {
@ -147,7 +142,7 @@ internal abstract class LineWebtoonsParser(
} }
} }
override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val manga = when { val manga = when {
!filter.query.isNullOrEmpty() -> { !filter.query.isNullOrEmpty() -> {
makeRequest("/lineWebtoon/webtoon/searchChallenge?query=${filter.query.urlEncoded()}&startIndex=${offset + 1}&pageSize=20") makeRequest("/lineWebtoon/webtoon/searchChallenge?query=${filter.query.urlEncoded()}&startIndex=${offset + 1}&pageSize=20")

@ -64,7 +64,7 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context
) )
} }
override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val domain = domain val domain = domain
val url = buildString { val url = buildString {
append("https://api.") append("https://api.")

@ -76,10 +76,6 @@ internal abstract class MangaFireParser(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = true, isTagsExclusionSupported = true,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -91,7 +87,7 @@ internal abstract class MangaFireParser(
availableLocales = emptySet(), availableLocales = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = "https://$domain/filter".toHttpUrl().newBuilder().apply { val url = "https://$domain/filter".toHttpUrl().newBuilder().apply {
addQueryParameter("page", page.toString()) addQueryParameter("page", page.toString())
addQueryParameter("language[]", siteLang) addQueryParameter("language[]", siteLang)

@ -26,10 +26,6 @@ internal class MangaPark(context: MangaLoaderContext) :
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = true, isTagsExclusionSupported = true,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -73,7 +69,7 @@ internal class MangaPark(context: MangaLoaderContext) :
context.cookieJar.insertCookies(domain, "nsfw", "2") context.cookieJar.insertCookies(domain, "nsfw", "2")
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -42,21 +42,14 @@ internal abstract class MangaPlusParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions()
availableTags = emptySet(),
availableStates = emptySet(),
availableContentRating = emptySet(),
)
private val extraHeaders = Headers.headersOf("Session-Token", UUID.randomUUID().toString()) private val extraHeaders = Headers.headersOf("Session-Token", UUID.randomUUID().toString())
override suspend fun getList(order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(order: SortOrder, filter: MangaListFilter): List<Manga> {
return when { return when {
filter.query.isNullOrEmpty() -> { filter.query.isNullOrEmpty() -> {
when (order) { when (order) {

@ -71,12 +71,7 @@ internal class MangaReaderToParser(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -88,7 +83,7 @@ internal class MangaReaderToParser(context: MangaLoaderContext) :
availableLocales = emptySet(), availableLocales = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = "https://$domain".toHttpUrl().newBuilder().apply { val url = "https://$domain".toHttpUrl().newBuilder().apply {
when { when {
!filter.query.isNullOrEmpty() -> { !filter.query.isNullOrEmpty() -> {

@ -45,10 +45,6 @@ internal abstract class NineMangaParser(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = true, isTagsExclusionSupported = true,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -73,7 +69,7 @@ internal abstract class NineMangaParser(
return chain.proceed(newRequest) return chain.proceed(newRequest)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -36,21 +36,11 @@ internal class NineNineNineHentaiParser(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = setOf( availableLocales = setOf(
Locale.ENGLISH, Locale.ENGLISH,
Locale.CHINESE, Locale.CHINESE,
@ -118,7 +108,7 @@ internal class NineNineNineHentaiParser(context: MangaLoaderContext) :
} }
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
return if (filter.query.isNullOrEmpty()) { return if (filter.query.isNullOrEmpty()) {
if (filter.tags.isEmpty() && order == SortOrder.POPULARITY) { if (filter.tags.isEmpty() && order == SortOrder.POPULARITY) {
getPopularList(page, filter.locale) getPopularList(page, filter.locale)

@ -49,10 +49,7 @@ internal abstract class WebtoonsParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override val userAgentKey = ConfigKey.UserAgent("nApps (Android 12;; linewebtoon; 3.1.0)") override val userAgentKey = ConfigKey.UserAgent("nApps (Android 12;; linewebtoon; 3.1.0)")
@ -192,7 +189,7 @@ internal abstract class WebtoonsParser(
} }
override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val webtoons = when { val webtoons = when {
!filter.query.isNullOrEmpty() -> { !filter.query.isNullOrEmpty() -> {
makeRequest("/lineWebtoon/webtoon/searchWebtoon?query=${filter.query.urlEncoded()}").getJSONObject("webtoonSearch") makeRequest("/lineWebtoon/webtoon/searchWebtoon?query=${filter.query.urlEncoded()}").getJSONObject("webtoonSearch")

@ -42,25 +42,14 @@ internal abstract class AnimeBootstrapParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -28,7 +28,7 @@ internal class PapScan(context: MangaLoaderContext) :
SortOrder.ALPHABETICAL_DESC, SortOrder.ALPHABETICAL_DESC,
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -24,12 +24,7 @@ internal class FlixScans(context: MangaLoaderContext) : PagedMangaParser(context
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -46,7 +41,7 @@ internal class FlixScans(context: MangaLoaderContext) : PagedMangaParser(context
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val json = when { val json = when {
!filter.query.isNullOrEmpty() -> { !filter.query.isNullOrEmpty() -> {
if (page > 1) { if (page > 1) {

@ -19,17 +19,10 @@ internal class MangaStorm(context: MangaLoaderContext) : PagedMangaParser(contex
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions()
availableTags = emptySet(),
availableStates = emptySet(),
availableContentRating = emptySet(),
)
override val userAgentKey = ConfigKey.UserAgent(UserAgents.CHROME_DESKTOP) override val userAgentKey = ConfigKey.UserAgent(UserAgents.CHROME_DESKTOP)
@ -38,7 +31,7 @@ internal class MangaStorm(context: MangaLoaderContext) : PagedMangaParser(contex
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -27,13 +27,7 @@ internal class TeamXNovel(context: MangaLoaderContext) : PagedMangaParser(contex
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -45,7 +39,7 @@ internal class TeamXNovel(context: MangaLoaderContext) : PagedMangaParser(contex
availableLocales = emptySet(), availableLocales = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -28,15 +28,11 @@ internal class AnibelParser(context: MangaLoaderContext) : MangaParser(context,
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -48,7 +44,7 @@ internal class AnibelParser(context: MangaLoaderContext) : MangaParser(context,
SortOrder.NEWEST, SortOrder.NEWEST,
) )
override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val filters = when { val filters = when {
!filter.query.isNullOrEmpty() -> { !filter.query.isNullOrEmpty() -> {
return if (offset == 0) { return if (offset == 0) {

@ -29,13 +29,7 @@ internal abstract class CupFoxParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -47,7 +41,7 @@ internal abstract class CupFoxParser(
availableLocales = emptySet(), availableLocales = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -30,12 +30,7 @@ internal class AsuraScansParser(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -52,7 +47,7 @@ internal class AsuraScansParser(context: MangaLoaderContext) :
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -24,25 +24,14 @@ internal class BeeToon(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -20,24 +20,17 @@ internal class CloneMangaParser(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions()
availableTags = emptySet(),
availableStates = emptySet(),
availableContentRating = emptySet(),
)
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
super.onCreateConfig(keys) super.onCreateConfig(keys)
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getList(order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(order: SortOrder, filter: MangaListFilter): List<Manga> {
if (!filter.query.isNullOrEmpty()) { if (!filter.query.isNullOrEmpty()) {
return emptyList() return emptyList()
} }

@ -23,10 +23,7 @@ internal class ComicExtra(context: MangaLoaderContext) : PagedMangaParser(contex
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -40,7 +37,7 @@ internal class ComicExtra(context: MangaLoaderContext) : PagedMangaParser(contex
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -27,16 +27,11 @@ internal class DynastyScans(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -44,7 +39,7 @@ internal class DynastyScans(context: MangaLoaderContext) :
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
when { when {
!filter.query.isNullOrEmpty() -> { !filter.query.isNullOrEmpty() -> {
val url = buildString { val url = buildString {

@ -25,9 +25,6 @@ internal class FlixScansOrg(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = false,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -41,7 +38,7 @@ internal class FlixScansOrg(context: MangaLoaderContext) :
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val json = when { val json = when {
!filter.query.isNullOrEmpty() -> { !filter.query.isNullOrEmpty() -> {
throw IllegalArgumentException(ErrorMessages.SEARCH_NOT_SUPPORTED) throw IllegalArgumentException(ErrorMessages.SEARCH_NOT_SUPPORTED)

@ -21,16 +21,11 @@ internal class MangaGeko(context: MangaLoaderContext) : PagedMangaParser(context
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -38,7 +33,7 @@ internal class MangaGeko(context: MangaLoaderContext) : PagedMangaParser(context
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -22,16 +22,11 @@ internal class MangaKawaiiEn(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -43,7 +38,7 @@ internal class MangaKawaiiEn(context: MangaLoaderContext) :
.add("Accept-Language", "en") .add("Accept-Language", "en")
.build() .build()
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -30,10 +30,7 @@ internal class MangaTownParser(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -45,7 +42,7 @@ internal class MangaTownParser(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -33,12 +33,7 @@ internal class Mangaowl(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -58,7 +53,7 @@ internal class Mangaowl(context: MangaLoaderContext) :
override suspend fun getListPage( override suspend fun getListPage(
page: Int, page: Int,
order: SortOrder, order: SortOrder,
filter: MangaListFilterV2, filter: MangaListFilter,
): List<Manga> { ): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")

@ -36,7 +36,6 @@ internal class Manhwa18Parser(context: MangaLoaderContext) :
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = true, isTagsExclusionSupported = true,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -58,7 +57,7 @@ internal class Manhwa18Parser(context: MangaLoaderContext) :
) )
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -26,10 +26,7 @@ internal class ManhwasMen(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -41,7 +38,7 @@ internal class ManhwasMen(context: MangaLoaderContext) :
override suspend fun getListPage( override suspend fun getListPage(
page: Int, page: Int,
order: SortOrder, order: SortOrder,
filter: MangaListFilterV2, filter: MangaListFilter,
): List<Manga> { ): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")

@ -17,24 +17,17 @@ internal class Po2Scans(context: MangaLoaderContext) : SinglePageMangaParser(con
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions()
availableTags = emptySet(),
availableStates = emptySet(),
availableContentRating = emptySet(),
)
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
super.onCreateConfig(keys) super.onCreateConfig(keys)
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getList(order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -24,16 +24,11 @@ internal class Pururin(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -41,7 +36,7 @@ internal class Pururin(context: MangaLoaderContext) :
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -34,10 +34,7 @@ internal class VyManga(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -46,7 +43,7 @@ internal class VyManga(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -27,26 +27,11 @@ internal class TempleScanEsp(context: MangaLoaderContext) :
} }
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities()
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = false,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
)
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions()
availableTags = emptySet(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = emptySet(),
)
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -41,18 +41,15 @@ internal class TuMangaOnlineParser(context: MangaLoaderContext) : PagedMangaPars
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = EnumSet.of(ContentRating.SAFE, ContentRating.ADULT), availableContentRating = EnumSet.of(ContentRating.SAFE, ContentRating.ADULT),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -44,10 +44,6 @@ internal abstract class FmreaderParser(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = true, isTagsExclusionSupported = true,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
init { init {
@ -88,7 +84,7 @@ internal abstract class FmreaderParser(
availableLocales = emptySet(), availableLocales = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -22,7 +22,7 @@ internal class Manhwa18Com(context: MangaLoaderContext) :
override val selectPage = "div#chapter-content img" override val selectPage = "div#chapter-content img"
override val selectBodyTag = "div.advanced-wrapper .genre_label" override val selectBodyTag = "div.advanced-wrapper .genre_label"
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -21,7 +21,7 @@ internal class OlimpoScans(context: MangaLoaderContext) :
isTagsExclusionSupported = false, isTagsExclusionSupported = false,
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -34,13 +34,7 @@ internal abstract class FoolSlideParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
init { init {
@ -48,16 +42,9 @@ internal abstract class FoolSlideParser(
searchPaginator.firstPage = 1 searchPaginator.firstPage = 1
} }
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions()
availableTags = emptySet(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = emptySet(),
)
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val doc = when { val doc = when {
!filter.query.isNullOrEmpty() -> { !filter.query.isNullOrEmpty() -> {
if (page > 1) { if (page > 1) {

@ -47,7 +47,6 @@ internal class BentomangaParser(context: MangaLoaderContext) :
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = true, isTagsExclusionSupported = true,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -56,7 +55,7 @@ internal class BentomangaParser(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = urlBuilder() val url = urlBuilder()
.host(domain) .host(domain)
.addPathSegment("manga_list") .addPathSegment("manga_list")

@ -25,18 +25,9 @@ internal class FuryoSociety(context: MangaLoaderContext) :
override val userAgentKey = ConfigKey.UserAgent(UserAgents.CHROME_DESKTOP) override val userAgentKey = ConfigKey.UserAgent(UserAgents.CHROME_DESKTOP)
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities()
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = false,
isSearchWithFiltersSupported = false,
)
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions()
availableTags = emptySet(),
availableStates = emptySet(),
availableContentRating = emptySet(),
)
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
super.onCreateConfig(keys) super.onCreateConfig(keys)
@ -52,7 +43,7 @@ internal class FuryoSociety(context: MangaLoaderContext) :
) )
} }
override suspend fun getList(order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -22,9 +22,7 @@ internal class LegacyScansParser(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -38,7 +36,7 @@ internal class LegacyScansParser(context: MangaLoaderContext) :
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val end = page * pageSize val end = page * pageSize
val start = end - (pageSize - 1) val start = end - (pageSize - 1)

@ -20,16 +20,11 @@ internal class LireScan(context: MangaLoaderContext) : PagedMangaParser(context,
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -37,7 +32,7 @@ internal class LireScan(context: MangaLoaderContext) : PagedMangaParser(context,
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val doc = when { val doc = when {
!filter.query.isNullOrEmpty() -> { !filter.query.isNullOrEmpty() -> {
if (page > 1) { if (page > 1) {

@ -30,12 +30,6 @@ internal class LugnicaScans(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = false,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -68,7 +62,7 @@ internal class LugnicaScans(context: MangaLoaderContext) :
) )
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
when { when {
!filter.query.isNullOrEmpty() -> { !filter.query.isNullOrEmpty() -> {
throw IllegalArgumentException(ErrorMessages.SEARCH_NOT_SUPPORTED) throw IllegalArgumentException(ErrorMessages.SEARCH_NOT_SUPPORTED)

@ -21,16 +21,11 @@ internal class MangaKawaii(context: MangaLoaderContext) : PagedMangaParser(conte
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -42,7 +37,7 @@ internal class MangaKawaii(context: MangaLoaderContext) : PagedMangaParser(conte
.add("Accept-Language", "fr") .add("Accept-Language", "fr")
.build() .build()
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -36,10 +36,7 @@ internal class MangaMana(context: MangaLoaderContext) : PagedMangaParser(context
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -53,7 +50,7 @@ internal class MangaMana(context: MangaLoaderContext) : PagedMangaParser(context
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val postData = buildString { val postData = buildString {
append("page=") append("page=")
append(page) append(page)

@ -29,22 +29,11 @@ internal class ScansMangasMe(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -52,7 +41,7 @@ internal class ScansMangasMe(context: MangaLoaderContext) :
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getList(order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -26,22 +26,11 @@ internal class ScantradUnion(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -49,7 +38,7 @@ internal class ScantradUnion(context: MangaLoaderContext) :
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -70,9 +70,7 @@ internal abstract class FuzzyDoodleParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -81,7 +79,7 @@ internal abstract class FuzzyDoodleParser(
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -32,21 +32,11 @@ internal abstract class GalleryAdultsParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = setOf( availableLocales = setOf(
Locale.ENGLISH, Locale.ENGLISH,
Locale.FRENCH, Locale.FRENCH,
@ -68,7 +58,7 @@ internal abstract class GalleryAdultsParser(
override suspend fun getListPage( override suspend fun getListPage(
page: Int, page: Int,
order: SortOrder, order: SortOrder,
filter: MangaListFilterV2, filter: MangaListFilter,
): List<Manga> { ): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")

@ -42,7 +42,7 @@ internal class Hentai3(context: MangaLoaderContext) :
), ),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -38,7 +38,7 @@ internal class HentaiEnvy(context: MangaLoaderContext) :
), ),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -45,7 +45,7 @@ internal class HentaiEra(context: MangaLoaderContext) :
) )
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -53,7 +53,7 @@ internal class HentaiForce(context: MangaLoaderContext) :
return doc.selectFirstOrThrow(idImg).src() ?: doc.parseFailed("Image src not found") return doc.selectFirstOrThrow(idImg).src() ?: doc.parseFailed("Image src not found")
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -25,7 +25,7 @@ internal class HentaiFox(context: MangaLoaderContext) :
override val availableSortOrders: Set<SortOrder> = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY) override val availableSortOrders: Set<SortOrder> = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY)
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -42,7 +42,7 @@ internal class NHentaiParser(context: MangaLoaderContext) :
.set("User-Agent", config[userAgentKey]) .set("User-Agent", config[userAgentKey])
.build() .build()
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -27,21 +27,16 @@ internal abstract class GattsuParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
protected open val tagPrefix = "tag" protected open val tagPrefix = "tag"
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -16,15 +16,11 @@ internal class UniversoHentai(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
private suspend fun fetchAvailableTags(): Set<MangaTag> { private suspend fun fetchAvailableTags(): Set<MangaTag> {

@ -18,23 +18,10 @@ internal abstract class GuyaParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions()
availableTags = emptySet(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = emptySet(),
)
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
super.onCreateConfig(keys) super.onCreateConfig(keys)
@ -43,7 +30,7 @@ internal abstract class GuyaParser(
override val configKeyDomain = ConfigKey.Domain(domain) override val configKeyDomain = ConfigKey.Domain(domain)
override suspend fun getList(order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -48,12 +48,7 @@ internal abstract class HeanCms(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -65,7 +60,7 @@ internal abstract class HeanCms(
availableLocales = emptySet(), availableLocales = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(apiPath) append(apiPath)

@ -32,12 +32,7 @@ internal abstract class HeanCmsAlt(
protected open val datePattern = "MMMM d, yyyy" protected open val datePattern = "MMMM d, yyyy"
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities()
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = false,
isSearchWithFiltersSupported = false,
)
init { init {
paginator.firstPage = 1 paginator.firstPage = 1
@ -47,13 +42,9 @@ internal abstract class HeanCmsAlt(
protected open val selectManga = "div.grid.grid-cols-2 div:not([class]):contains(M)" protected open val selectManga = "div.grid.grid-cols-2 div:not([class]):contains(M)"
protected open val selectMangaTitle = "h5" protected open val selectMangaTitle = "h5"
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions()
availableTags = emptySet(),
availableStates = emptySet(),
availableContentRating = emptySet(),
)
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -37,31 +37,20 @@ internal abstract class HotComicsParser(
protected open val isSearchSupported: Boolean = true protected open val isSearchSupported: Boolean = true
override val filterCapabilities: MangaListFilterCapabilities final override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = isSearchSupported, isSearchSupported = isSearchSupported,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = emptySet(),
) )
override fun getRequestHeaders(): Headers = Headers.Builder() override fun getRequestHeaders(): Headers = Headers.Builder()
.add("User-Agent", UserAgents.CHROME_DESKTOP) .add("User-Agent", UserAgents.CHROME_DESKTOP)
.build() .build()
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
if (onePage && page > 1) { if (onePage && page > 1) {
return emptyList() return emptyList()
} }

@ -28,15 +28,12 @@ internal class DoujinDesuParser(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED), availableStates = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED),
availableContentRating = emptySet(),
) )
override fun getRequestHeaders(): Headers = Headers.Builder() override fun getRequestHeaders(): Headers = Headers.Builder()
@ -44,7 +41,7 @@ internal class DoujinDesuParser(context: MangaLoaderContext) :
.add("Referer", "https://$domain/") .add("Referer", "https://$domain/")
.build() .build()
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = urlBuilder().apply { val url = urlBuilder().apply {
addPathSegment("manga") addPathSegment("manga")
addPathSegment("page") addPathSegment("page")

@ -19,16 +19,11 @@ internal class HentaiCrot(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -36,7 +31,7 @@ internal class HentaiCrot(context: MangaLoaderContext) :
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -19,16 +19,11 @@ internal class PixHentai(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -36,7 +31,7 @@ internal class PixHentai(context: MangaLoaderContext) :
keys.add(userAgentKey) keys.add(userAgentKey)
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -31,12 +31,7 @@ internal abstract class IkenParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
@ -47,13 +42,9 @@ internal abstract class IkenParser(
MangaState.ABANDONED, MangaState.ABANDONED,
MangaState.UPCOMING, MangaState.UPCOMING,
), ),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -23,16 +23,11 @@ internal class NicovideoSeigaParser(context: MangaLoaderContext) :
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -60,7 +55,7 @@ internal class NicovideoSeigaParser(context: MangaLoaderContext) :
override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("nicovideo.jp") override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("nicovideo.jp")
override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(offset: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val page = (offset / 20f).toIntUp().inc() val page = (offset / 20f).toIntUp().inc()
val domain = getDomain("seiga") val domain = getDomain("seiga")
val url = when { val url = when {

@ -57,19 +57,14 @@ internal abstract class KeyoappParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override suspend fun getList(order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getList(order: SortOrder, filter: MangaListFilter): List<Manga> {
var query = "" var query = ""
var tag = "" var tag = ""

@ -34,19 +34,15 @@ internal abstract class LikeMangaParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.PAUSED), availableStates = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.PAUSED),
availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -32,19 +32,12 @@ internal abstract class MadaraParser(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = true, isTagsExclusionSupported = true,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = EnumSet.allOf(MangaState::class.java), availableStates = EnumSet.allOf(MangaState::class.java),
availableContentRating = EnumSet.of(ContentRating.SAFE, ContentRating.ADULT), availableContentRating = EnumSet.of(ContentRating.SAFE, ContentRating.ADULT),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = emptySet(),
) )
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
@ -208,7 +201,7 @@ internal abstract class MadaraParser(
// can be changed to retrieve tags see getTags // can be changed to retrieve tags see getTags
protected open val listUrl = "manga/" protected open val listUrl = "manga/"
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
if (withoutAjax) { if (withoutAjax) {
val pages = page + 1 val pages = page + 1

@ -30,7 +30,7 @@ internal class Manga18Fx(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -37,7 +37,7 @@ internal class Manhwa18Cc(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -1,10 +1,6 @@
package org.koitharu.kotatsu.parsers.site.madara.en package org.koitharu.kotatsu.parsers.site.madara.en
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.*
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext
import okhttp3.Headers import okhttp3.Headers
import okhttp3.Request import okhttp3.Request
import okhttp3.RequestBody import okhttp3.RequestBody
@ -16,7 +12,7 @@ import org.koitharu.kotatsu.parsers.model.*
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.*
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.EnumSet import java.util.*
@MangaSourceParser("ADULT_WEBTOON", "AdultWebtoon", "en", ContentType.HENTAI) @MangaSourceParser("ADULT_WEBTOON", "AdultWebtoon", "en", ContentType.HENTAI)
internal class AdultWebtoon(context: MangaLoaderContext) : internal class AdultWebtoon(context: MangaLoaderContext) :
@ -38,7 +34,7 @@ internal class AdultWebtoon(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val pages = page + 1 val pages = page + 1
val url = buildString { val url = buildString {

@ -30,7 +30,7 @@ internal class Hentai4Free(context: MangaLoaderContext) :
searchPaginator.firstPage = 1 searchPaginator.firstPage = 1
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -32,7 +32,7 @@ internal class HentaiManga(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val pages = page + 1 val pages = page + 1
val url = buildString { val url = buildString {

@ -1,10 +1,6 @@
package org.koitharu.kotatsu.parsers.site.madara.en package org.koitharu.kotatsu.parsers.site.madara.en
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.*
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext
import okhttp3.Headers import okhttp3.Headers
import okhttp3.Request import okhttp3.Request
import okhttp3.RequestBody import okhttp3.RequestBody
@ -16,7 +12,7 @@ import org.koitharu.kotatsu.parsers.model.*
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.*
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.EnumSet import java.util.*
@MangaSourceParser("HENTAIWEBTOON", "HentaiWebtoon", "en", ContentType.HENTAI) @MangaSourceParser("HENTAIWEBTOON", "HentaiWebtoon", "en", ContentType.HENTAI)
internal class HentaiWebtoon(context: MangaLoaderContext) : internal class HentaiWebtoon(context: MangaLoaderContext) :
@ -36,7 +32,7 @@ internal class HentaiWebtoon(context: MangaLoaderContext) :
availableStates = emptySet(), availableStates = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val pages = page + 1 val pages = page + 1
val url = buildString { val url = buildString {

@ -31,7 +31,7 @@ internal class IsekaiScan(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -27,7 +27,7 @@ internal class IsekaiScanEuParser(context: MangaLoaderContext) :
searchPaginator.firstPage = 1 searchPaginator.firstPage = 1
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -37,7 +37,7 @@ internal class MangaDass(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -9,7 +9,7 @@ import org.koitharu.kotatsu.parsers.model.*
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.*
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.EnumSet import java.util.*
@MangaSourceParser("MANGADNA", "MangaDna", "en", ContentType.HENTAI) @MangaSourceParser("MANGADNA", "MangaDna", "en", ContentType.HENTAI)
internal class MangaDna(context: MangaLoaderContext) : internal class MangaDna(context: MangaLoaderContext) :
@ -32,7 +32,7 @@ internal class MangaDna(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -35,7 +35,7 @@ internal class MangaPure(context: MangaLoaderContext) :
) )
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -38,7 +38,7 @@ internal class Manhwaz(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -1,10 +1,6 @@
package org.koitharu.kotatsu.parsers.site.madara.en package org.koitharu.kotatsu.parsers.site.madara.en
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.*
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext
import okhttp3.Headers import okhttp3.Headers
import okhttp3.Request import okhttp3.Request
import okhttp3.RequestBody import okhttp3.RequestBody
@ -16,7 +12,7 @@ import org.koitharu.kotatsu.parsers.model.*
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.*
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.EnumSet import java.util.*
@MangaSourceParser("MANYTOON", "ManyToon", "en", ContentType.HENTAI) @MangaSourceParser("MANYTOON", "ManyToon", "en", ContentType.HENTAI)
internal class ManyToon(context: MangaLoaderContext) : internal class ManyToon(context: MangaLoaderContext) :
@ -40,7 +36,7 @@ internal class ManyToon(context: MangaLoaderContext) :
) )
} }
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val pages = page + 1 val pages = page + 1
val url = buildString { val url = buildString {

@ -2,7 +2,10 @@ package org.koitharu.kotatsu.parsers.site.madara.es
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaListFilter
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.site.madara.MadaraParser
import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.*
import java.util.* import java.util.*
@ -24,7 +27,7 @@ internal class DragonTranslationParser(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -33,7 +33,7 @@ internal class TmoManga(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -34,7 +34,7 @@ internal class ManhwaHub(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -6,11 +6,9 @@ import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.model.*
import org.koitharu.kotatsu.parsers.model.MangaState
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.*
import java.util.* import java.util.*
import kotlin.collections.Set
@Broken @Broken
@MangaSourceParser("SAYTRUYENHAY", "PheTruyen", "vi") @MangaSourceParser("SAYTRUYENHAY", "PheTruyen", "vi")
@ -38,7 +36,7 @@ internal class Saytruyenhay(context: MangaLoaderContext) :
availableContentRating = emptySet(), availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -60,24 +60,15 @@ internal abstract class MadthemeParser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = true, isMultipleTagsSupported = true,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
isYearSupported = false,
isYearRangeSupported = false,
isOriginalLocaleSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED), availableStates = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED),
availableContentRating = emptySet(),
availableContentTypes = emptySet(),
availableDemographics = emptySet(),
availableLocales = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -17,7 +17,7 @@ internal class ManhuaScan(context: MangaLoaderContext) :
override val sourceLocale: Locale = Locale.ENGLISH override val sourceLocale: Locale = Locale.ENGLISH
override val listUrl = "search" override val listUrl = "search"
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

@ -54,19 +54,14 @@ internal abstract class Manga18Parser(
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities( get() = MangaListFilterCapabilities(
isMultipleTagsSupported = false,
isTagsExclusionSupported = false,
isSearchSupported = true, isSearchSupported = true,
isSearchWithFiltersSupported = false,
) )
override suspend fun getFilterOptions() = MangaListFilterOptions( override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = fetchAvailableTags(), availableTags = fetchAvailableTags(),
availableStates = emptySet(),
availableContentRating = emptySet(),
) )
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilterV2): List<Manga> { override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save