Properly handle EHentai browse duplication
This commit is contained in:
parent
18a119e9cf
commit
e8100fc958
@ -43,6 +43,7 @@ import eu.kanade.tachiyomi.util.system.logcat
|
|||||||
import exh.log.xLogE
|
import exh.log.xLogE
|
||||||
import exh.savedsearches.EXHSavedSearch
|
import exh.savedsearches.EXHSavedSearch
|
||||||
import exh.savedsearches.JsonSavedSearch
|
import exh.savedsearches.JsonSavedSearch
|
||||||
|
import exh.source.isEhBasedSource
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.flow.asFlow
|
import kotlinx.coroutines.flow.asFlow
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
@ -342,7 +343,13 @@ open class BrowseSourcePresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
open fun createPager(query: String, filters: FilterList): Pager {
|
open fun createPager(query: String, filters: FilterList): Pager {
|
||||||
return SourcePager(source, query, filters)
|
// SY -->
|
||||||
|
return if (source.isEhBasedSource()) {
|
||||||
|
EHentaiPager(source, query, filters)
|
||||||
|
} else {
|
||||||
|
SourcePager(source, query, filters)
|
||||||
|
}
|
||||||
|
// SY <--
|
||||||
}
|
}
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
package eu.kanade.tachiyomi.ui.browse.source.browse
|
||||||
|
|
||||||
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
|
import eu.kanade.tachiyomi.source.model.FilterList
|
||||||
|
import eu.kanade.tachiyomi.source.model.MetadataMangasPage
|
||||||
|
import eu.kanade.tachiyomi.util.lang.awaitSingle
|
||||||
|
|
||||||
|
open class EHentaiPager(source: CatalogueSource, query: String, filters: FilterList) : SourcePager(source, query, filters) {
|
||||||
|
|
||||||
|
private var lastMangaLink: String? = null
|
||||||
|
|
||||||
|
override suspend fun requestNextPage() {
|
||||||
|
val page = currentPage
|
||||||
|
val lastMangaLink = lastMangaLink
|
||||||
|
|
||||||
|
val observable = if (query.isBlank() && filters.isEmpty()) {
|
||||||
|
source.fetchPopularManga(page)
|
||||||
|
} else {
|
||||||
|
source.fetchSearchManga(page, query, filters)
|
||||||
|
}
|
||||||
|
|
||||||
|
val mangasPage = observable.awaitSingle()
|
||||||
|
|
||||||
|
mangasPage.mangas.lastOrNull()?.let {
|
||||||
|
this.lastMangaLink = it.url
|
||||||
|
}
|
||||||
|
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)
|
||||||
|
onPageReceived(
|
||||||
|
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 {
|
||||||
|
onPageReceived(mangasPage)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
onPageReceived(mangasPage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user