|
|
|
@ -168,41 +168,36 @@ internal class ComickFunParser(context: MangaLoaderContext) : MangaParser(contex
|
|
|
|
).parseJson().getJSONArray("chapters")
|
|
|
|
).parseJson().getJSONArray("chapters")
|
|
|
|
val dateFormat = SimpleDateFormat("yyyy-MM-dd")
|
|
|
|
val dateFormat = SimpleDateFormat("yyyy-MM-dd")
|
|
|
|
val list = ja.toJSONList().reversed()
|
|
|
|
val list = ja.toJSONList().reversed()
|
|
|
|
val dc = list.groupBy { jo -> jo.getStringOrNull("vol") to jo.getStringOrNull("chap") }
|
|
|
|
|
|
|
|
val branches = list.associateGrouping { jo ->
|
|
|
|
|
|
|
|
jo.getString("lang") to jo.optJSONArray("group_name")
|
|
|
|
|
|
|
|
?.asIterable<String>()
|
|
|
|
|
|
|
|
?.joinToString()
|
|
|
|
|
|
|
|
?.takeUnless { it.isBlank() }
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
val chaptersBuilder = ChaptersListBuilder(list.size)
|
|
|
|
val chaptersBuilder = ChaptersListBuilder(list.size)
|
|
|
|
var number = 0
|
|
|
|
val branchedChapters = HashMap<String?, HashMap<Pair<String?, String?>, MangaChapter>>()
|
|
|
|
for ((key, value) in dc) {
|
|
|
|
for (jo in list) {
|
|
|
|
number++
|
|
|
|
val vol = jo.getStringOrNull("vol")
|
|
|
|
val (vol, chap) = key
|
|
|
|
val chap = jo.getStringOrNull("chap")
|
|
|
|
for (jo in value) {
|
|
|
|
val volChap = vol to chap
|
|
|
|
val lang = jo.getString("lang")
|
|
|
|
val locale = Locale.forLanguageTag(jo.getString("lang"))
|
|
|
|
val locale = Locale.forLanguageTag(lang)
|
|
|
|
val lc = locale.getDisplayName(locale).toTitleCase(locale)
|
|
|
|
val team =
|
|
|
|
val branch = (list.indices).firstNotNullOf { i ->
|
|
|
|
jo.optJSONArray("group_name")?.asIterable<String>()?.joinToString()?.takeUnless { it.isBlank() }
|
|
|
|
val b = if (i == 0) lc else "$lc ($i)"
|
|
|
|
var branch = locale.getDisplayName(locale).toTitleCase(locale)
|
|
|
|
if (branchedChapters[b]?.get(volChap) == null) b else null
|
|
|
|
if (branches[lang].orEmpty().size > 1 && team != null) {
|
|
|
|
}
|
|
|
|
branch += " ($team)"
|
|
|
|
val chapter = MangaChapter(
|
|
|
|
}
|
|
|
|
id = generateUid(jo.getLong("id")),
|
|
|
|
chaptersBuilder += MangaChapter(
|
|
|
|
name = buildString {
|
|
|
|
id = generateUid(jo.getLong("id")),
|
|
|
|
vol?.let { append("Vol ").append(it).append(' ') }
|
|
|
|
name = buildString {
|
|
|
|
chap?.let { append("Chap ").append(it) }
|
|
|
|
vol?.let { append("Vol ").append(it).append(' ') }
|
|
|
|
jo.getStringOrNull("title")?.let { append(": ").append(it) }
|
|
|
|
chap?.let { append("Chap ").append(it) }
|
|
|
|
},
|
|
|
|
jo.getStringOrNull("title")?.let { append(": ").append(it) }
|
|
|
|
number = branchedChapters[branch]?.size?.plus(1) ?: 0,
|
|
|
|
},
|
|
|
|
url = jo.getString("hid"),
|
|
|
|
number = number,
|
|
|
|
scanlator = jo.optJSONArray("group_name")?.asIterable<String>()?.joinToString()
|
|
|
|
url = jo.getString("hid"),
|
|
|
|
?.takeUnless { it.isBlank() },
|
|
|
|
scanlator = team,
|
|
|
|
uploadDate = dateFormat.tryParse(jo.getString("created_at").substringBefore('T')),
|
|
|
|
uploadDate = dateFormat.tryParse(jo.getString("created_at").substringBefore('T')),
|
|
|
|
branch = branch,
|
|
|
|
branch = branch,
|
|
|
|
source = source,
|
|
|
|
source = source,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
if (chaptersBuilder.add(chapter)) {
|
|
|
|
|
|
|
|
branchedChapters.getOrPut(branch, ::HashMap)[volChap] = chapter
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return chaptersBuilder.toList()
|
|
|
|
return chaptersBuilder.toList()
|
|
|
|
|