|
|
|
@ -14,10 +14,6 @@ import org.koitharu.kotatsu.parsers.util.json.*
|
|
|
|
import java.text.SimpleDateFormat
|
|
|
|
import java.text.SimpleDateFormat
|
|
|
|
import java.util.*
|
|
|
|
import java.util.*
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* cc
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private const val CHAPTERS_LIMIT = 99999
|
|
|
|
private const val CHAPTERS_LIMIT = 99999
|
|
|
|
|
|
|
|
|
|
|
|
@MangaSourceParser("COMICK_FUN", "ComicK")
|
|
|
|
@MangaSourceParser("COMICK_FUN", "ComicK")
|
|
|
|
@ -31,10 +27,13 @@ internal class ComickFunParser(context: MangaLoaderContext) :
|
|
|
|
keys.add(userAgentKey)
|
|
|
|
keys.add(userAgentKey)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override val isTagsExclusionSupported = true
|
|
|
|
|
|
|
|
|
|
|
|
override val availableSortOrders: Set<SortOrder> = EnumSet.of(
|
|
|
|
override val availableSortOrders: Set<SortOrder> = EnumSet.of(
|
|
|
|
SortOrder.POPULARITY,
|
|
|
|
SortOrder.POPULARITY,
|
|
|
|
SortOrder.UPDATED,
|
|
|
|
SortOrder.UPDATED,
|
|
|
|
SortOrder.RATING,
|
|
|
|
SortOrder.RATING,
|
|
|
|
|
|
|
|
SortOrder.NEWEST,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
override val availableStates: Set<MangaState> =
|
|
|
|
override val availableStates: Set<MangaState> =
|
|
|
|
@ -62,17 +61,26 @@ internal class ComickFunParser(context: MangaLoaderContext) :
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
is MangaListFilter.Advanced -> {
|
|
|
|
is MangaListFilter.Advanced -> {
|
|
|
|
filter.tags.forEach { tag ->
|
|
|
|
|
|
|
|
url.addQueryParameter("genres", tag.key)
|
|
|
|
filter.tags.forEach {
|
|
|
|
|
|
|
|
url.addQueryParameter("genres", it.key)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filter.tagsExclude.forEach {
|
|
|
|
|
|
|
|
url.addQueryParameter("excludes", it.key)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
url.addQueryParameter(
|
|
|
|
url.addQueryParameter(
|
|
|
|
"sort",
|
|
|
|
"sort",
|
|
|
|
when (filter.sortOrder) {
|
|
|
|
when (filter.sortOrder) {
|
|
|
|
SortOrder.POPULARITY -> "view"
|
|
|
|
SortOrder.POPULARITY -> "view"
|
|
|
|
|
|
|
|
SortOrder.UPDATED -> "uploaded"
|
|
|
|
|
|
|
|
SortOrder.NEWEST -> "created_at"
|
|
|
|
SortOrder.RATING -> "rating"
|
|
|
|
SortOrder.RATING -> "rating"
|
|
|
|
else -> "uploaded"
|
|
|
|
else -> "uploaded"
|
|
|
|
},
|
|
|
|
},
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
filter.states.oneOrThrowIfMany()?.let {
|
|
|
|
filter.states.oneOrThrowIfMany()?.let {
|
|
|
|
url.addQueryParameter(
|
|
|
|
url.addQueryParameter(
|
|
|
|
"status",
|
|
|
|
"status",
|
|
|
|
@ -217,40 +225,6 @@ internal class ComickFunParser(context: MangaLoaderContext) :
|
|
|
|
source = source,
|
|
|
|
source = source,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*val chaptersBuilder = ChaptersListBuilder(list.size)
|
|
|
|
|
|
|
|
val branchedChapters = HashMap<String?, HashMap<Pair<String?, String?>, MangaChapter>>()
|
|
|
|
|
|
|
|
for (jo in list) {
|
|
|
|
|
|
|
|
val vol = jo.getStringOrNull("vol")
|
|
|
|
|
|
|
|
val chap = jo.getStringOrNull("chap")
|
|
|
|
|
|
|
|
val volChap = vol to chap
|
|
|
|
|
|
|
|
val locale = Locale.forLanguageTag(jo.getString("lang"))
|
|
|
|
|
|
|
|
val lc = locale.getDisplayName(locale).toTitleCase(locale)
|
|
|
|
|
|
|
|
val branch = (list.indices).firstNotNullOf { i ->
|
|
|
|
|
|
|
|
val b = if (i == 0) lc else "$lc ($i)"
|
|
|
|
|
|
|
|
if (branchedChapters[b]?.get(volChap) == null) b else null
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
val chapter = MangaChapter(
|
|
|
|
|
|
|
|
id = generateUid(jo.getLong("id")),
|
|
|
|
|
|
|
|
name = buildString {
|
|
|
|
|
|
|
|
vol?.let { append("Vol ").append(it).append(' ') }
|
|
|
|
|
|
|
|
chap?.let { append("Chap ").append(it) }
|
|
|
|
|
|
|
|
jo.getStringOrNull("title")?.let { append(": ").append(it) }
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
number = branchedChapters[branch]?.size?.plus(1) ?: 1,
|
|
|
|
|
|
|
|
url = jo.getString("hid"),
|
|
|
|
|
|
|
|
scanlator = jo.optJSONArray("group_name")?.asIterable<String>()?.joinToString()
|
|
|
|
|
|
|
|
?.takeUnless { it.isBlank() },
|
|
|
|
|
|
|
|
uploadDate = dateFormat.tryParse(jo.getString("created_at").substringBefore('T')),
|
|
|
|
|
|
|
|
branch = branch,
|
|
|
|
|
|
|
|
source = source,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
if (chaptersBuilder.add(chapter)) {
|
|
|
|
|
|
|
|
branchedChapters.getOrPut(branch, ::HashMap)[volChap] = chapter
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return chaptersBuilder.toList()*/
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun JSONObject.selectGenres(tags: SparseArrayCompat<MangaTag>): Set<MangaTag> {
|
|
|
|
private fun JSONObject.selectGenres(tags: SparseArrayCompat<MangaTag>): Set<MangaTag> {
|
|
|
|
|