komikku/app/src/main/java/eu/kanade/data/source/EHentaiPagingSource.kt
Andreas 99d5d8b91f Merge Latest and Browse into one screen (#7921)
* Merge Latest and Browse into one

* Add back Latest button

* Change context to IO instead of launching a job

* Use loading screen when loading initial page

(cherry picked from commit cc6aef693e1a15f695ffa7eebd968004a6557010)

# Conflicts:
#	app/src/main/java/eu/kanade/data/source/SourceRepositoryImpl.kt
#	app/src/main/java/eu/kanade/presentation/browse/BrowseLatestScreen.kt
#	app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt
#	app/src/main/java/eu/kanade/presentation/browse/SourceSearchScreen.kt
#	app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt
#	app/src/main/java/eu/kanade/presentation/browse/components/BrowseLatestToolbar.kt
#	app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt
#	app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchController.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesTab.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowsePagingSource.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/latest/LatestUpdatesController.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/latest/LatestUpdatesPresenter.kt
2022-09-03 19:43:55 -04:00

63 lines
2.4 KiB
Kotlin

package eu.kanade.data.source
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.MetadataMangasPage
import eu.kanade.tachiyomi.util.lang.awaitSingle
abstract class EHentaiPagingSource(source: CatalogueSource) : SourcePagingSource(source) {
private var lastMangaLink: String? = null
abstract suspend fun fetchNextPage(currentPage: Int): MangasPage
override suspend fun requestNextPage(currentPage: Int): MangasPage {
val lastMangaLink = lastMangaLink
val mangasPage = fetchNextPage(currentPage)
mangasPage.mangas.lastOrNull()?.let {
this.lastMangaLink = it.url
}
return if (lastMangaLink != null) {
val index = mangasPage.mangas.indexOfFirst { it.url == lastMangaLink }
if (index != -1) {
val lastIndex = mangasPage.mangas.size
val startIndex = (index + 1).coerceAtMost(mangasPage.mangas.lastIndex)
if (mangasPage is MetadataMangasPage) {
mangasPage.copy(
mangas = mangasPage.mangas.subList(startIndex, lastIndex),
mangasMetadata = mangasPage.mangasMetadata.subList(startIndex, lastIndex),
)
} else {
mangasPage.copy(
mangas = mangasPage.mangas.subList(startIndex, lastIndex),
)
}
} else {
mangasPage
}
} else {
mangasPage
}
}
}
class EHentaiSearchPagingSource(source: CatalogueSource, val query: String, val filters: FilterList) : EHentaiPagingSource(source) {
override suspend fun fetchNextPage(currentPage: Int): MangasPage {
return source.fetchSearchManga(currentPage, query, filters).awaitSingle()
}
}
class EHentaiPopularPagingSource(source: CatalogueSource) : EHentaiPagingSource(source) {
override suspend fun fetchNextPage(currentPage: Int): MangasPage {
return source.fetchPopularManga(currentPage).awaitSingle()
}
}
class EHentaiLatestPagingSource(source: CatalogueSource) : EHentaiPagingSource(source) {
override suspend fun fetchNextPage(currentPage: Int): MangasPage {
return source.fetchLatestUpdates(currentPage).awaitSingle()
}
}