[ComicK] Fix manga state

pull/400/head
Koitharu 2 years ago
parent cecba7623e
commit 46e863ef79
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -15,7 +15,7 @@ import java.text.SimpleDateFormat
import java.util.*
/**
* https://api.comick.fun/docs/static/index.html
* cc
*/
private const val CHAPTERS_LIMIT = 99999
@ -67,7 +67,7 @@ internal class ComickFunParser(context: MangaLoaderContext) : PagedMangaParser(c
else -> "uploaded"
},
)
filter.states.forEach {
filter.states.oneOrThrowIfMany()?.let {
url.addQueryParameter(
"status",
when (it) {
@ -96,13 +96,13 @@ internal class ComickFunParser(context: MangaLoaderContext) : PagedMangaParser(c
largeCoverUrl = null,
description = jo.getStringOrNull("desc"),
tags = jo.selectGenres(tagsMap),
state = runCatching {
if (jo.getBoolean("translation_completed")) {
MangaState.FINISHED
} else {
MangaState.ONGOING
}
}.getOrNull(),
state = when (jo.getIntOrDefault("status", 0)) {
1 -> MangaState.ONGOING
2 -> MangaState.FINISHED
3 -> MangaState.ABANDONED
4 -> MangaState.PAUSED
else -> null
},
author = null,
source = source,
)

@ -5,10 +5,7 @@ import org.jsoup.nodes.Element
import org.koitharu.kotatsu.parsers.InternalParsersApi
import org.koitharu.kotatsu.parsers.MangaParser
import org.koitharu.kotatsu.parsers.exception.ParseException
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaPage
import org.koitharu.kotatsu.parsers.model.MangaTag
import org.koitharu.kotatsu.parsers.model.*
/**
@ -61,6 +58,15 @@ fun Set<MangaTag>?.oneOrThrowIfMany(): MangaTag? {
}
}
@InternalParsersApi
fun Set<MangaState>?.oneOrThrowIfMany(): MangaState? {
return when {
isNullOrEmpty() -> null
size == 1 -> first()
else -> throw IllegalArgumentException("Multiple states are not supported by this source")
}
}
val MangaParser.domain: String
get() {
return config[configKeyDomain]

@ -6,6 +6,7 @@ import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.extension.ExtendWith
import org.junit.jupiter.params.ParameterizedTest
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaListFilter
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.model.SortOrder
import org.koitharu.kotatsu.parsers.util.domain
@ -35,8 +36,8 @@ internal class MangaParserTest {
@MangaSources
fun pagination(source: MangaSource) = runTest {
val parser = context.newParserInstance(source)
val page1 = parser.getList(0, sortOrder = null, tags = null)
val page2 = parser.getList(page1.size, sortOrder = null, tags = null)
val page1 = parser.getList(0, filter = null)
val page2 = parser.getList(page1.size, filter = null)
if (parser is PagedMangaParser) {
assert(parser.pageSize == page1.size) {
"Page size is ${page1.size} but ${parser.pageSize} expected"
@ -55,12 +56,18 @@ internal class MangaParserTest {
@MangaSources
fun search(source: MangaSource) = runTest {
val parser = context.newParserInstance(source)
val subject = parser.getList(0, sortOrder = SortOrder.POPULARITY, tags = null).minByOrNull {
val subject = parser.getList(
offset = 0,
filter = MangaListFilter.Advanced(
sortOrder = SortOrder.POPULARITY,
tags = emptySet(), locale = null, states = emptySet(),
),
).minByOrNull {
it.title.length
} ?: error("No manga found")
val query = subject.title
check(query.isNotBlank()) { "Manga title '$query' is blank" }
val list = parser.getList(0, query)
val list = parser.getList(0, MangaListFilter.Search(query))
assert(list.isNotEmpty()) { "Empty search results by \"$query\"" }
assert(list.singleOrNull { it.url == subject.url && it.id == subject.id } != null) {
"Single subject '${subject.title} (${subject.publicUrl})' not found in search results"

Loading…
Cancel
Save