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,
SortOrder.NEWEST,
SortOrder.POPULARITY,
)
override suspend fun getList( override val availableStates: Set<MangaState> = EnumSet.allOf(MangaState::class.java)
offset: Int,
query: String?,
tags: Set<MangaTag>?, override suspend fun getList(offset: Int, filter: MangaListFilter?): List<Manga> {
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('&') append(filter.query)
} append('&')
if (!query.isNullOrEmpty()) { }
append("title=")
append(query.urlEncoded())
append('&')
}
append(CONTENT_RATING)
append("&order")
append(
when (sortOrder) {
SortOrder.UPDATED,
-> "[latestUploadedChapter]=desc"
SortOrder.ALPHABETICAL -> "[title]=asc" is MangaListFilter.Advanced -> {
SortOrder.NEWEST -> "[createdAt]=desc" filter.tags.forEach { tag ->
SortOrder.POPULARITY -> "[followedCount]=desc" append("includedTags[]=")
else -> "[followedCount]=desc" append(tag.key)
}, append('&')
) }
append(CONTENT_RATING)
append("&order")
append(
when (filter.sortOrder) {
SortOrder.UPDATED -> "[latestUploadedChapter]=desc"
SortOrder.RATING -> "[rating]=desc"
SortOrder.ALPHABETICAL -> "[title]=asc"
SortOrder.NEWEST -> "[createdAt]=desc"
SortOrder.POPULARITY -> "[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