diff --git a/app/src/main/java/exh/md/handlers/FollowsHandler.kt b/app/src/main/java/exh/md/handlers/FollowsHandler.kt index 7b6f4f3c2..9d59532b3 100644 --- a/app/src/main/java/exh/md/handlers/FollowsHandler.kt +++ b/app/src/main/java/exh/md/handlers/FollowsHandler.kt @@ -59,7 +59,7 @@ class FollowsHandler( val hasMoreResults = mangaListResponse.limit + mangaListResponse.offset under mangaListResponse.total val statusListResponse = client.newCall(mangaStatusListRequest(mangaListResponse.results)).await().parseAs() - val results = followsParseMangaPage(mangaListResponse.results, statusListResponse) + val results = followsParseMangaPage(mangaListResponse.results, statusListResponse.statuses) MetadataMangasPage(results.map { it.first }, hasMoreResults, results.map { it.second }) } @@ -69,7 +69,7 @@ class FollowsHandler( * Parse follows api to manga page * used when multiple follows */ - private fun followsParseMangaPage(response: List, statusListResponse: MangaStatusListResponse): List> { + private fun followsParseMangaPage(response: List, statuses: Map): List> { val comparator = compareBy> { it.second.followStatus } .thenBy { it.first.title } @@ -79,7 +79,7 @@ class FollowsHandler( lang, useLowQualityCovers ).toSManga() to MangaDexSearchMetadata().apply { - followStatus = FollowStatus.fromDex(statusListResponse.statuses[it.data.id]).int + followStatus = FollowStatus.fromDex(statuses[it.data.id]).int } }.sortedWith(comparator) } @@ -218,15 +218,22 @@ class FollowsHandler( val newResponse = client.newCall(followsListRequest(offset)).await() if (newResponse.code != 204) { val newMangaListResponse = newResponse.parseAs(MdUtil.jsonParser) - results.addAll(newMangaListResponse.results) + results += newMangaListResponse.results hasMoreResults = newMangaListResponse.limit + newMangaListResponse.offset under newMangaListResponse.total lastOffset = newMangaListResponse.offset } else { hasMoreResults = false } } - val statusListResponse = client.newCall(mangaStatusListRequest(results)).await().parseAs() - followsParseMangaPage(results, statusListResponse) + val statuses = results.chunked(100) + .map { + client.newCall(mangaStatusListRequest(results)).await().parseAs().statuses + }.fold(mutableMapOf()) { acc, curr -> + acc.putAll(curr) + acc + } + + followsParseMangaPage(results, statuses) } }