Add year range.

devi 2 years ago committed by Koitharu
parent 8a3c0e02f6
commit 494ecdfec8

@ -63,6 +63,12 @@ abstract class MangaParser @InternalParsersApi constructor(
open val isSearchYearSupported: Boolean = false open val isSearchYearSupported: Boolean = false
/**
* Whether parser supports searching by year range
*/
open val isSearchYearRangeSupported: Boolean = false
/** /**
* Whether parser supports searching Original Languages * Whether parser supports searching Original Languages
*/ */
@ -183,6 +189,8 @@ abstract class MangaParser @InternalParsersApi constructor(
contentRating = emptySet(), contentRating = emptySet(),
query = null, query = null,
year = null, year = null,
yearFrom = null,
yearTo = null,
), ),
) )
} }

@ -15,8 +15,8 @@ sealed interface MangaListFilter {
(tagsExclude.isEmpty() || parser.isTagsExclusionSupported) && (tagsExclude.isEmpty() || parser.isTagsExclusionSupported) &&
(contentRating.isEmpty() || parser.availableContentRating.containsAll(contentRating)) && (contentRating.isEmpty() || parser.availableContentRating.containsAll(contentRating)) &&
(states.isEmpty() || parser.availableStates.containsAll(states) && (states.isEmpty() || parser.availableStates.containsAll(states) &&
(parser.searchSupportedWithMultipleFilters) && (parser.searchSupportedWithMultipleFilters) &&(parser.isSearchOriginalLanguages) &&
(parser.isSearchYearSupported) && (parser.isSearchOriginalLanguages)) (parser.isSearchYearSupported) && (parser.isSearchYearRangeSupported))
is Search -> parser.isSearchSupported is Search -> parser.isSearchSupported
} }
@ -40,10 +40,12 @@ sealed interface MangaListFilter {
@JvmField val contentRating: Set<ContentRating>, @JvmField val contentRating: Set<ContentRating>,
@JvmField val query: String?, @JvmField val query: String?,
@JvmField val year: Int?, @JvmField val year: Int?,
@JvmField val yearFrom: Int?,
@JvmField val yearTo: Int?,
) : MangaListFilter { ) : MangaListFilter {
override fun isEmpty(): Boolean = override fun isEmpty(): Boolean =
tags.isEmpty() && tagsExclude.isEmpty() && locale == null && localeMangas == null && states.isEmpty() && contentRating.isEmpty() && query == null && year == null tags.isEmpty() && tagsExclude.isEmpty() && locale == null && localeMangas == null && states.isEmpty() && contentRating.isEmpty() && query == null && year == null && yearFrom == null && yearTo == null
fun newBuilder() = Builder(sortOrder) fun newBuilder() = Builder(sortOrder)
.tags(tags) .tags(tags)
@ -54,6 +56,8 @@ sealed interface MangaListFilter {
.contentRatings(contentRating) .contentRatings(contentRating)
.query(query) .query(query)
.year(year) .year(year)
.yearFrom(yearFrom)
.yearTo(yearTo)
class Builder(sortOrder: SortOrder) { class Builder(sortOrder: SortOrder) {
@ -66,6 +70,8 @@ sealed interface MangaListFilter {
private var _contentRating: Set<ContentRating>? = null private var _contentRating: Set<ContentRating>? = null
private var _query: String? = null private var _query: String? = null
private var _year: Int? = null private var _year: Int? = null
private var _yearFrom: Int? = null
private var _yearTo: Int? = null
fun sortOrder(order: SortOrder) = apply { fun sortOrder(order: SortOrder) = apply {
_sortOrder = order _sortOrder = order
@ -103,6 +109,14 @@ sealed interface MangaListFilter {
_year = year _year = year
} }
fun yearFrom(yearFrom: Int?) = apply {
_yearFrom = yearFrom
}
fun yearTo(yearTo: Int?) = apply {
_yearTo = yearTo
}
fun build() = Advanced( fun build() = Advanced(
@ -115,6 +129,8 @@ sealed interface MangaListFilter {
contentRating = _contentRating.orEmpty(), contentRating = _contentRating.orEmpty(),
query = _query, query = _query,
year = _year, year = _year,
yearFrom = _yearFrom,
yearTo = _yearTo,
) )
} }
} }

@ -29,6 +29,8 @@ internal class ComickFunParser(context: MangaLoaderContext) :
override val isTagsExclusionSupported = true override val isTagsExclusionSupported = true
override val isSearchYearRangeSupported = true
override val availableSortOrders: Set<SortOrder> = EnumSet.of( override val availableSortOrders: Set<SortOrder> = EnumSet.of(
SortOrder.POPULARITY, SortOrder.POPULARITY,
SortOrder.UPDATED, SortOrder.UPDATED,
@ -93,6 +95,14 @@ internal class ComickFunParser(context: MangaLoaderContext) :
}, },
) )
} }
filter.yearFrom?.let {
url.addQueryParameter("from", filter.yearFrom.toString() )
}
filter.yearTo?.let {
url.addQueryParameter("to", filter.yearTo.toString() )
}
} }
} }
val ja = webClient.httpGet(url.build()).parseJsonArray() val ja = webClient.httpGet(url.build()).parseJsonArray()

@ -62,6 +62,8 @@ internal class MangaParserTest {
contentRating = emptySet(), contentRating = emptySet(),
query = null, query = null,
year = null, year = null,
yearFrom = null,
yearTo = null,
), ),
).minByOrNull { ).minByOrNull {
it.title.length it.title.length
@ -139,6 +141,8 @@ internal class MangaParserTest {
contentRating = setOf(), contentRating = setOf(),
query = null, query = null,
year = null, year = null,
yearFrom = null,
yearTo = null,
) )
val list = parser.getList(offset = 0, filter) val list = parser.getList(offset = 0, filter)
checkMangaList(list, filter.locale.toString()) checkMangaList(list, filter.locale.toString())

Loading…
Cancel
Save