[ComicK] Fix manga state
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user