added caching for title list to speed up loading

master
Naga 2 years ago
parent 3c08119ccc
commit 9e984510d4

@ -131,13 +131,6 @@ internal abstract class WebtoonsParser(
} }
} }
private val allTitleCache = SuspendLazy {
makeRequest("/lineWebtoon/webtoon/titleList.json?")
.getJSONObject("titleList")
.getJSONArray("titles")
.toJSONList()
}
private val allGenreCache = SuspendLazy { private val allGenreCache = SuspendLazy {
makeRequest("/lineWebtoon/webtoon/genreList.json") makeRequest("/lineWebtoon/webtoon/genreList.json")
.getJSONObject("genreList") .getJSONObject("genreList")
@ -146,14 +139,11 @@ internal abstract class WebtoonsParser(
.associateBy { tag -> tag.key } .associateBy { tag -> tag.key }
} }
private suspend fun getAllGenreList(): Map<String, MangaTag>{ private val allTitleCache = SuspendLazy {
return allGenreCache.get() makeRequest("/lineWebtoon/webtoon/titleList.json?")
} .getJSONObject("titleList")
.getJSONArray("titles")
private suspend fun getAllTitleList(): List<Manga> { .mapJSON { jo ->
val genres = getAllGenreList()
return allTitleCache.get().map { jo ->
val titleNo = jo.getLong("titleNo") val titleNo = jo.getLong("titleNo")
Manga( Manga(
id = generateUid(titleNo), id = generateUid(titleNo),
@ -165,7 +155,7 @@ internal abstract class WebtoonsParser(
author = jo.getStringOrNull("writingAuthorName"), author = jo.getStringOrNull("writingAuthorName"),
isNsfw = jo.getBooleanOrDefault("ageGradeNotice", isNsfwSource), isNsfw = jo.getBooleanOrDefault("ageGradeNotice", isNsfwSource),
rating = jo.getFloatOrDefault("starScoreAverage", -10f) / 10f, rating = jo.getFloatOrDefault("starScoreAverage", -10f) / 10f,
tags = setOfNotNull(genres[jo.getString("representGenre")]), tags = setOfNotNull(allGenreCache.get()[jo.getString("representGenre")]),
description = jo.getString("synopsis"), description = jo.getString("synopsis"),
state = null, state = null,
source = source, source = source,
@ -176,6 +166,17 @@ internal abstract class WebtoonsParser(
} }
} }
private suspend fun getAllGenreList(): Map<String, MangaTag>{
return allGenreCache.get()
}
/*
private suspend fun getAllTitleList(): List<Manga> {
val genres = getAllGenreList()
}
*/
override suspend fun getList(offset: Int, filter: MangaListFilter?): List<Manga> { override suspend fun getList(offset: Int, filter: MangaListFilter?): List<Manga> {
if (offset > 0) { if (offset > 0) {
return emptyList() return emptyList()
@ -212,7 +213,7 @@ internal abstract class WebtoonsParser(
val genre = filter.tags.oneOrThrowIfMany()?.key ?: "ALL" val genre = filter.tags.oneOrThrowIfMany()?.key ?: "ALL"
val genres = getAllGenreList() val genres = getAllGenreList()
val result = getAllTitleList() val result = allTitleCache.get()
val sortedResult = when (filter.sortOrder) { val sortedResult = when (filter.sortOrder) {
SortOrder.UPDATED -> result.sortedBy { it.date } SortOrder.UPDATED -> result.sortedBy { it.date }
@ -230,7 +231,7 @@ internal abstract class WebtoonsParser(
} }
null -> { null -> {
getAllTitleList() allTitleCache.get()
} }
} }

Loading…
Cancel
Save