|
|
|
|
@ -7,10 +7,7 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey
|
|
|
|
|
import org.koitharu.kotatsu.parsers.core.LegacyPagedMangaParser
|
|
|
|
|
import org.koitharu.kotatsu.parsers.model.*
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.*
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.json.asTypedList
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.json.getFloatOrDefault
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.json.mapJSON
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.json.unescapeJson
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.json.*
|
|
|
|
|
import java.text.SimpleDateFormat
|
|
|
|
|
import java.util.*
|
|
|
|
|
|
|
|
|
|
@ -112,7 +109,6 @@ internal abstract class HeanCms(
|
|
|
|
|
private fun parseMangaList(response: JSONObject): List<Manga> {
|
|
|
|
|
return response.getJSONArray("data").mapJSON { it ->
|
|
|
|
|
val id = it.getLong("id")
|
|
|
|
|
val url = "/comic/${it.getString("series_slug")}"
|
|
|
|
|
val publicUrl = "/series/${it.getString("series_slug")}"
|
|
|
|
|
val title = it.getString("title")
|
|
|
|
|
val cover = if (it.getString("thumbnail").startsWith("https://")) {
|
|
|
|
|
@ -122,8 +118,8 @@ internal abstract class HeanCms(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Manga(
|
|
|
|
|
id = id,
|
|
|
|
|
url = url,
|
|
|
|
|
id = generateUid(id),
|
|
|
|
|
url = id.toString(),
|
|
|
|
|
title = title,
|
|
|
|
|
altTitles = setOfNotNull(it.getString("alternative_names").takeIf { it.isNotBlank() }),
|
|
|
|
|
publicUrl = publicUrl.toAbsoluteUrl(domain),
|
|
|
|
|
@ -148,7 +144,7 @@ internal abstract class HeanCms(
|
|
|
|
|
protected open val datePattern = "yyyy-MM-dd"
|
|
|
|
|
|
|
|
|
|
override suspend fun getDetails(manga: Manga): Manga {
|
|
|
|
|
val seriesId = manga.id
|
|
|
|
|
val seriesId = manga.url.toLongOrNull() ?: manga.id // backward compatibility
|
|
|
|
|
val url = "https://$apiPath/chapter/query?page=1&perPage=9999&series_id=$seriesId"
|
|
|
|
|
val response = webClient.httpGet(url).parseJson()
|
|
|
|
|
val data = response.getJSONArray("data").asTypedList<JSONObject>()
|
|
|
|
|
@ -158,7 +154,7 @@ internal abstract class HeanCms(
|
|
|
|
|
val chapterUrl =
|
|
|
|
|
"/series/${it.getJSONObject("series").getString("series_slug")}/${it.getString("chapter_slug")}"
|
|
|
|
|
MangaChapter(
|
|
|
|
|
id = it.getLong("id"),
|
|
|
|
|
id = generateUid(it.getLong("id")),
|
|
|
|
|
title = it.getString("chapter_name"),
|
|
|
|
|
number = i + 1f,
|
|
|
|
|
volume = 0,
|
|
|
|
|
@ -200,13 +196,13 @@ internal abstract class HeanCms(
|
|
|
|
|
?.let { "[$it]" }
|
|
|
|
|
?: return emptySet()
|
|
|
|
|
|
|
|
|
|
return JSONArray(tags).mapJSON {
|
|
|
|
|
return JSONArray(tags).mapJSONToSet {
|
|
|
|
|
MangaTag(
|
|
|
|
|
key = it.getInt("id").toString(),
|
|
|
|
|
title = it.getString("name").toTitleCase(sourceLocale),
|
|
|
|
|
source = source,
|
|
|
|
|
)
|
|
|
|
|
}.toSet()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|