[MangaDex][ComicK] Fix branching again

pull/180/head
Koitharu 3 years ago
parent 0366ad0e57
commit cae7073f87
No known key found for this signature in database
GPG Key ID: 8E861F8CE6E7CE27

@ -168,41 +168,36 @@ internal class ComickFunParser(context: MangaLoaderContext) : MangaParser(contex
).parseJson().getJSONArray("chapters")
val dateFormat = SimpleDateFormat("yyyy-MM-dd")
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)
var number = 0
for ((key, value) in dc) {
number++
val (vol, chap) = key
for (jo in value) {
val lang = jo.getString("lang")
val locale = Locale.forLanguageTag(lang)
val team =
jo.optJSONArray("group_name")?.asIterable<String>()?.joinToString()?.takeUnless { it.isBlank() }
var branch = locale.getDisplayName(locale).toTitleCase(locale)
if (branches[lang].orEmpty().size > 1 && team != null) {
branch += " ($team)"
}
chaptersBuilder += MangaChapter(
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 = number,
number = branchedChapters[branch]?.size?.plus(1) ?: 0,
url = jo.getString("hid"),
scanlator = team,
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()

@ -243,43 +243,38 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context
"yyyy-MM-dd'T'HH:mm:ss'+00:00'",
Locale.ROOT,
)
val branches = list.associateGrouping { jo ->
jo.getJSONObject("attributes").getStringOrNull("translatedLanguage") to
jo.getJSONArray("relationships").associateByKey("type")["scanlation_group"]
?.getJSONObject("attributes")?.getStringOrNull("name")
}
val dc = list.groupBy { jo -> jo.getJSONObject("attributes").getFloatOrDefault("chapter", 0f) }
val chaptersBuilder = ChaptersListBuilder(list.size)
var index = 0
for ((number, value) in dc) {
for (jo in value) {
val branchedChapters = HashMap<String?, HashMap<Float, MangaChapter>>()
for (jo in list) {
val id = jo.getString("id")
val attrs = jo.getJSONObject("attributes")
if (!attrs.isNull("externalUrl")) {
continue
}
val lang = attrs.getStringOrNull("translatedLanguage")
val locale = lang?.let { Locale.forLanguageTag(it) }
val number = jo.getJSONObject("attributes").getFloatOrDefault("chapter", 0f)
val locale = attrs.getStringOrNull("translatedLanguage")?.let { Locale.forLanguageTag(it) }
val lc = locale?.getDisplayName(locale)?.toTitleCase(locale)
val relations = jo.getJSONArray("relationships").associateByKey("type")
val team = relations["scanlation_group"]?.getJSONObject("attributes")?.getStringOrNull("name")
?.takeUnless { it.isBlank() }
var branch = locale?.getDisplayName(locale)?.toTitleCase(locale)
if (branches[lang].orEmpty().size > 1 && team != null) {
branch += " ($team)"
val branch = (list.indices).firstNotNullOf { i ->
val b = if (i == 0) lc else "$lc ($i)"
if (branchedChapters[b]?.get(number) == null) b else null
}
chaptersBuilder += MangaChapter(
val chapter = MangaChapter(
id = generateUid(id),
name = attrs.getStringOrNull("title")?.takeUnless(String::isEmpty)
?: "Chapter #$number",
number = if (number <= 0f) (index + 1) else number.toInt(),
?: "Chapter #${number.toString().removeSuffix(".0")}",
number = if (number <= 0f) (branchedChapters[branch]?.size?.plus(1) ?: 0) else number.toInt(),
url = id,
scanlator = team,
uploadDate = dateFormat.tryParse(attrs.getString("publishAt")),
branch = branch,
source = source,
)
if (chaptersBuilder.add(chapter)) {
branchedChapters.getOrPut(branch, ::HashMap)[number] = chapter
}
index++
}
return chaptersBuilder.toList()
}

Loading…
Cancel
Save