From b1fa9d1d2273a1f6687f0aac185f53095e5bbd5e Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 2 Dec 2023 15:02:48 +0200 Subject: [PATCH] Fix mapping local chapters #577 --- .../kotatsu/details/data/MangaDetails.kt | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) 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 + } }