diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/data/MangaDetails.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/data/MangaDetails.kt index cc68e0a6c..30c814b96 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/data/MangaDetails.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/data/MangaDetails.kt @@ -21,8 +21,7 @@ data class MangaDetails( val branches: Set get() = chapters.keys - val allChapters: List - get() = manga.chapters.orEmpty() + val allChapters: List by lazy { mergeChapters() } val isLocal get() = manga.isLocal @@ -40,4 +39,26 @@ data class MangaDetails( description = description, isLoaded = isLoaded, ) + + private fun mergeChapters(): List { + val chapters = manga.chapters + val localChapters = local?.manga?.chapters.orEmpty() + if (chapters.isNullOrEmpty()) { + return localChapters + } + val localMap = if (localChapters.isNotEmpty()) { + localChapters.associateByTo(LinkedHashMap(localChapters.size)) { it.id } + } else { + null + } + val result = ArrayList(chapters.size) + for (chapter in chapters) { + val local = localMap?.remove(chapter.id) + result += local ?: chapter + } + if (!localMap.isNullOrEmpty()) { + result.addAll(localMap.values) + } + return result + } }