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

@ -5,10 +5,7 @@ import org.jsoup.nodes.Element
import org.koitharu.kotatsu.parsers.InternalParsersApi import org.koitharu.kotatsu.parsers.InternalParsersApi
import org.koitharu.kotatsu.parsers.MangaParser import org.koitharu.kotatsu.parsers.MangaParser
import org.koitharu.kotatsu.parsers.exception.ParseException import org.koitharu.kotatsu.parsers.exception.ParseException
import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.*
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaPage
import org.koitharu.kotatsu.parsers.model.MangaTag
/** /**
@ -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 val MangaParser.domain: String
get() { get() {
return config[configKeyDomain] return config[configKeyDomain]

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

Loading…
Cancel
Save