|
|
|
@ -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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|