Mangadex add filter.states and info states

devi 2 years ago
parent b8ca21d588
commit 7d67b718a5

@ -30,19 +30,12 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context
override val configKeyDomain = ConfigKey.Domain("mangadex.org") override val configKeyDomain = ConfigKey.Domain("mangadex.org")
override val availableSortOrders: EnumSet<SortOrder> = EnumSet.of( override val availableSortOrders: EnumSet<SortOrder> = EnumSet.allOf(SortOrder::class.java)
SortOrder.UPDATED,
SortOrder.ALPHABETICAL, override val availableStates: Set<MangaState> = EnumSet.allOf(MangaState::class.java)
SortOrder.NEWEST,
SortOrder.POPULARITY,
)
override suspend fun getList( override suspend fun getList(offset: Int, filter: MangaListFilter?): List<Manga> {
offset: Int,
query: String?,
tags: Set<MangaTag>?,
sortOrder: SortOrder,
): List<Manga> {
val domain = domain val domain = domain
val url = buildString { val url = buildString {
append("https://api.") append("https://api.")
@ -52,29 +45,46 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context
append("&offset=") append("&offset=")
append(offset) append(offset)
append("&includes[]=cover_art&includes[]=author&includes[]=artist&") append("&includes[]=cover_art&includes[]=author&includes[]=artist&")
tags?.forEach { tag -> when (filter) {
append("includedTags[]=") is MangaListFilter.Search -> {
append(tag.key) append("title=")
append(filter.query)
append('&') append('&')
} }
if (!query.isNullOrEmpty()) {
append("title=") is MangaListFilter.Advanced -> {
append(query.urlEncoded()) filter.tags.forEach { tag ->
append("includedTags[]=")
append(tag.key)
append('&') append('&')
} }
append(CONTENT_RATING) append(CONTENT_RATING)
append("&order") append("&order")
append( append(
when (sortOrder) { when (filter.sortOrder) {
SortOrder.UPDATED, SortOrder.UPDATED -> "[latestUploadedChapter]=desc"
-> "[latestUploadedChapter]=desc" SortOrder.RATING -> "[rating]=desc"
SortOrder.ALPHABETICAL -> "[title]=asc" SortOrder.ALPHABETICAL -> "[title]=asc"
SortOrder.NEWEST -> "[createdAt]=desc" SortOrder.NEWEST -> "[createdAt]=desc"
SortOrder.POPULARITY -> "[followedCount]=desc" SortOrder.POPULARITY -> "[followedCount]=desc"
else -> "[followedCount]=desc"
}, },
) )
filter.states.forEach {
append("&status[]=")
when (it) {
MangaState.ONGOING -> append("ongoing")
MangaState.FINISHED -> append("completed")
MangaState.ABANDONED -> append("cancelled")
MangaState.PAUSED -> append("hiatus")
}
}
}
null -> {
append("&order[latestUploadedChapter]=desc")
}
}
} }
val json = webClient.httpGet(url).parseJson().getJSONArray("data") val json = webClient.httpGet(url).parseJson().getJSONArray("data")
return json.mapJSON { jo -> return json.mapJSON { jo ->
@ -110,9 +120,11 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context
source = source, source = source,
) )
}, },
state = when (jo.getStringOrNull("status")) { state = when (attrs.getStringOrNull("status")) {
"ongoing" -> MangaState.ONGOING "ongoing" -> MangaState.ONGOING
"completed" -> MangaState.FINISHED "completed" -> MangaState.FINISHED
"hiatus" -> MangaState.PAUSED
"cancelled" -> MangaState.ABANDONED
else -> null else -> null
}, },
author = (relations["author"] ?: relations["artist"]) author = (relations["author"] ?: relations["artist"])

Loading…
Cancel
Save