From e7ac1c1feb7aebf2d0e14ec0e3452fa8207efc35 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Thu, 23 Nov 2023 12:13:32 +0200 Subject: [PATCH] Fix PagedMangaParsers --- .../koitharu/kotatsu/parsers/MangaParser.kt | 4 +- .../kotatsu/parsers/PagedMangaParser.kt | 42 ++++++++++++------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt index f8d4a7fd..5ee0df95 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/MangaParser.kt @@ -91,12 +91,12 @@ abstract class MangaParser @InternalParsersApi constructor( "Use getList with filter instead", replaceWith = ReplaceWith("getList(offset, filter)"), ) - abstract suspend fun getList( + open suspend fun getList( offset: Int, query: String?, tags: Set?, sortOrder: SortOrder, - ): List + ): List = throw NotImplementedError("Please implement getList(offset, filter) instead") /** * Parse list of manga with search by text query diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/PagedMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/PagedMangaParser.kt index 25f5d742..fffb1d01 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/PagedMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/PagedMangaParser.kt @@ -1,10 +1,7 @@ package org.koitharu.kotatsu.parsers import androidx.annotation.RestrictTo -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaTag -import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.util.Paginator @InternalParsersApi @@ -21,12 +18,16 @@ abstract class PagedMangaParser( @JvmField protected val searchPaginator = Paginator(searchPageSize) - override suspend fun getList(offset: Int, query: String): List { - return getList(searchPaginator, offset, query, null, defaultSortOrder) - } - - override suspend fun getList(offset: Int, tags: Set?, sortOrder: SortOrder?): List { - return getList(paginator, offset, null, tags, sortOrder ?: defaultSortOrder) + final override suspend fun getList(offset: Int, filter: MangaListFilter?): List { + return getList( + paginator = if (filter is MangaListFilter.Search) { + searchPaginator + } else { + paginator + }, + offset = offset, + filter = filter, + ) } @InternalParsersApi @@ -38,17 +39,28 @@ abstract class PagedMangaParser( sortOrder: SortOrder, ): List = throw UnsupportedOperationException("You should use getListPage for PagedMangaParser") - abstract suspend fun getListPage(page: Int, query: String?, tags: Set?, sortOrder: SortOrder): List + open suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List = throw NotImplementedError("Please implement getListPage(page, filter) instead") + + open suspend fun getListPage(page: Int, filter: MangaListFilter?): List { + return when (filter) { + is MangaListFilter.Advanced -> getListPage(page, null, filter.tags, filter.sortOrder) + is MangaListFilter.Search -> getListPage(page, filter.query, null, defaultSortOrder) + null -> getListPage(page, null, null, defaultSortOrder) + } + } private suspend fun getList( paginator: Paginator, offset: Int, - query: String?, - tags: Set?, - sortOrder: SortOrder, + filter: MangaListFilter?, ): List { val page = paginator.getPage(offset) - val list = getListPage(page, query, tags, sortOrder) + val list = getListPage(page, filter) paginator.onListReceived(offset, page, list.size) return list }