[MangaDex][ComicK] Fix branching again
This commit is contained in:
@@ -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(
|
||||
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,
|
||||
url = jo.getString("hid"),
|
||||
scanlator = team,
|
||||
uploadDate = dateFormat.tryParse(jo.getString("created_at").substringBefore('T')),
|
||||
branch = branch,
|
||||
source = source,
|
||||
)
|
||||
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) ?: 0,
|
||||
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()
|
||||
|
||||
@@ -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 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 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)"
|
||||
}
|
||||
chaptersBuilder += MangaChapter(
|
||||
id = generateUid(id),
|
||||
name = attrs.getStringOrNull("title")?.takeUnless(String::isEmpty)
|
||||
?: "Chapter #$number",
|
||||
number = if (number <= 0f) (index + 1) else number.toInt(),
|
||||
url = id,
|
||||
scanlator = team,
|
||||
uploadDate = dateFormat.tryParse(attrs.getString("publishAt")),
|
||||
branch = branch,
|
||||
source = source,
|
||||
)
|
||||
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 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() }
|
||||
val branch = (list.indices).firstNotNullOf { i ->
|
||||
val b = if (i == 0) lc else "$lc ($i)"
|
||||
if (branchedChapters[b]?.get(number) == null) b else null
|
||||
}
|
||||
val chapter = MangaChapter(
|
||||
id = generateUid(id),
|
||||
name = attrs.getStringOrNull("title")?.takeUnless(String::isEmpty)
|
||||
?: "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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user