2022-09-03 16:16:30 +02:00
|
|
|
package eu.kanade.data.source
|
2022-08-31 20:41:35 +02:00
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.source.model.FilterList
|
|
|
|
|
import eu.kanade.tachiyomi.source.model.MangasPage
|
|
|
|
|
import eu.kanade.tachiyomi.source.model.MetadataMangasPage
|
2022-11-02 17:49:17 +01:00
|
|
|
import eu.kanade.tachiyomi.source.online.all.EHentai
|
2022-08-31 20:41:35 +02:00
|
|
|
import eu.kanade.tachiyomi.util.lang.awaitSingle
|
2022-11-02 17:49:17 +01:00
|
|
|
import exh.metadata.metadata.EHentaiSearchMetadata
|
2022-08-31 20:41:35 +02:00
|
|
|
|
2022-11-02 17:49:17 +01:00
|
|
|
abstract class EHentaiPagingSource(override val source: EHentai) : SourcePagingSource(source) {
|
2022-08-31 20:41:35 +02:00
|
|
|
|
|
|
|
|
private var lastMangaLink: String? = null
|
|
|
|
|
|
2022-09-03 16:16:30 +02:00
|
|
|
abstract suspend fun fetchNextPage(currentPage: Int): MangasPage
|
|
|
|
|
|
2022-08-31 20:41:35 +02:00
|
|
|
override suspend fun requestNextPage(currentPage: Int): MangasPage {
|
|
|
|
|
val lastMangaLink = lastMangaLink
|
|
|
|
|
|
2022-11-02 17:49:17 +01:00
|
|
|
val gid = if (lastMangaLink != null && source.exh) {
|
|
|
|
|
EHentaiSearchMetadata.galleryId(lastMangaLink).toInt()
|
|
|
|
|
} else {
|
|
|
|
|
null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val mangasPage = fetchNextPage(gid ?: currentPage)
|
2022-08-31 20:41:35 +02:00
|
|
|
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-09-03 16:16:30 +02:00
|
|
|
|
2022-11-02 17:49:17 +01:00
|
|
|
class EHentaiSearchPagingSource(source: EHentai, val query: String, val filters: FilterList) : EHentaiPagingSource(source) {
|
2022-09-03 16:16:30 +02:00
|
|
|
override suspend fun fetchNextPage(currentPage: Int): MangasPage {
|
|
|
|
|
return source.fetchSearchManga(currentPage, query, filters).awaitSingle()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-02 17:49:17 +01:00
|
|
|
class EHentaiPopularPagingSource(source: EHentai) : EHentaiPagingSource(source) {
|
2022-09-03 16:16:30 +02:00
|
|
|
override suspend fun fetchNextPage(currentPage: Int): MangasPage {
|
|
|
|
|
return source.fetchPopularManga(currentPage).awaitSingle()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-02 17:49:17 +01:00
|
|
|
class EHentaiLatestPagingSource(source: EHentai) : EHentaiPagingSource(source) {
|
2022-09-03 16:16:30 +02:00
|
|
|
override suspend fun fetchNextPage(currentPage: Int): MangasPage {
|
|
|
|
|
return source.fetchLatestUpdates(currentPage).awaitSingle()
|
|
|
|
|
}
|
|
|
|
|
}
|