diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ComickFunParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ComickFunParser.kt index d4aa5eacf..6e4c69452 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ComickFunParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ComickFunParser.kt @@ -171,7 +171,8 @@ internal class ComickFunParser(context: MangaLoaderContext) : MangaParser(contex 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") - ?.joinToString { it.toString() } + ?.asIterable() + ?.joinToString() ?.takeUnless { it.isBlank() } } val chaptersBuilder = ChaptersListBuilder(list.size) @@ -182,7 +183,8 @@ internal class ComickFunParser(context: MangaLoaderContext) : MangaParser(contex for (jo in value) { val lang = jo.getString("lang") val locale = Locale.forLanguageTag(lang) - val team = jo.optJSONArray("group_name")?.joinToString { it.toString() }?.takeUnless { it.isBlank() } + val team = + jo.optJSONArray("group_name")?.asIterable()?.joinToString()?.takeUnless { it.isBlank() } var branch = locale.getDisplayName(locale).toTitleCase(locale) if (branches[lang].orEmpty().size > 1 && team != null) { branch += " ($team)" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/json/JSONTypedIterator.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/json/JSONTypedIterator.kt new file mode 100644 index 000000000..f4bcb5e12 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/json/JSONTypedIterator.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.util.json + +import org.json.JSONArray + +class JSONTypedIterator( + private val array: JSONArray, + private val cls: Class, +) : Iterator { + + private val total = array.length() + private var index = 0 + + override fun hasNext() = index < total + + override fun next(): T { + return cls.cast(array.get(index++)) + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/json/JSONValuesIterator.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/json/JSONValuesIterator.kt index b43943f36..5c5c2c6ae 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/json/JSONValuesIterator.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/json/JSONValuesIterator.kt @@ -14,4 +14,4 @@ class JSONValuesIterator( val key = keyIterator.next() return jo.get(key) } -} \ No newline at end of file +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/json/JsonExt.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/json/JsonExt.kt index 7a994a84e..ecf29d9be 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/json/JsonExt.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/json/JsonExt.kt @@ -141,3 +141,7 @@ fun JSONArray?.isNullOrEmpty(): Boolean { fun JSONArray.toJSONList(): List { return List(length()) { i -> getJSONObject(i) } } + +inline fun JSONArray.asIterable(): Iterable = Iterable { + JSONTypedIterator(this, T::class.java) +}