Fix PagedMangaParsers

pull/397/head
Koitharu 2 years ago
parent 24573d12f5
commit e7ac1c1feb
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -91,12 +91,12 @@ abstract class MangaParser @InternalParsersApi constructor(
"Use getList with filter instead", "Use getList with filter instead",
replaceWith = ReplaceWith("getList(offset, filter)"), replaceWith = ReplaceWith("getList(offset, filter)"),
) )
abstract suspend fun getList( open suspend fun getList(
offset: Int, offset: Int,
query: String?, query: String?,
tags: Set<MangaTag>?, tags: Set<MangaTag>?,
sortOrder: SortOrder, sortOrder: SortOrder,
): List<Manga> ): List<Manga> = throw NotImplementedError("Please implement getList(offset, filter) instead")
/** /**
* Parse list of manga with search by text query * Parse list of manga with search by text query

@ -1,10 +1,7 @@
package org.koitharu.kotatsu.parsers package org.koitharu.kotatsu.parsers
import androidx.annotation.RestrictTo import androidx.annotation.RestrictTo
import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.*
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.util.Paginator import org.koitharu.kotatsu.parsers.util.Paginator
@InternalParsersApi @InternalParsersApi
@ -21,12 +18,16 @@ abstract class PagedMangaParser(
@JvmField @JvmField
protected val searchPaginator = Paginator(searchPageSize) protected val searchPaginator = Paginator(searchPageSize)
override suspend fun getList(offset: Int, query: String): List<Manga> { final override suspend fun getList(offset: Int, filter: MangaListFilter?): List<Manga> {
return getList(searchPaginator, offset, query, null, defaultSortOrder) return getList(
} paginator = if (filter is MangaListFilter.Search) {
searchPaginator
override suspend fun getList(offset: Int, tags: Set<MangaTag>?, sortOrder: SortOrder?): List<Manga> { } else {
return getList(paginator, offset, null, tags, sortOrder ?: defaultSortOrder) paginator
},
offset = offset,
filter = filter,
)
} }
@InternalParsersApi @InternalParsersApi
@ -38,17 +39,28 @@ abstract class PagedMangaParser(
sortOrder: SortOrder, sortOrder: SortOrder,
): List<Manga> = throw UnsupportedOperationException("You should use getListPage for PagedMangaParser") ): List<Manga> = throw UnsupportedOperationException("You should use getListPage for PagedMangaParser")
abstract suspend fun getListPage(page: Int, query: String?, tags: Set<MangaTag>?, sortOrder: SortOrder): List<Manga> open suspend fun getListPage(
page: Int,
query: String?,
tags: Set<MangaTag>?,
sortOrder: SortOrder,
): List<Manga> = throw NotImplementedError("Please implement getListPage(page, filter) instead")
open suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
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( private suspend fun getList(
paginator: Paginator, paginator: Paginator,
offset: Int, offset: Int,
query: String?, filter: MangaListFilter?,
tags: Set<MangaTag>?,
sortOrder: SortOrder,
): List<Manga> { ): List<Manga> {
val page = paginator.getPage(offset) val page = paginator.getPage(offset)
val list = getListPage(page, query, tags, sortOrder) val list = getListPage(page, filter)
paginator.onListReceived(offset, page, list.size) paginator.onListReceived(offset, page, list.size)
return list return list
} }

Loading…
Cancel
Save