* 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
63 lines
2.4 KiB
Kotlin
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()
|
|
}
|
|
}
|