Deduplicate entries when browsing (#1957)

(cherry picked from commit f81da3dcce9afba883b6a3accdd3bf4ea21cfa81)

# Conflicts:
#	CHANGELOG.md
#	data/src/main/java/tachiyomi/data/source/SourcePagingSource.kt
This commit is contained in:
AntsyLich 2025-04-03 01:48:54 +06:00 committed by Jobobby04
parent 023c78d0e8
commit b0f645d906
2 changed files with 10 additions and 7 deletions

View File

@ -169,7 +169,9 @@ abstract class SearchScreenModel(
source.getSearchManga(1, query, source.getFilterList())
}
val titles = page.mangas.map { it.toDomainManga(source.id) }
val titles = page.mangas
.map { it.toDomainManga(source.id) }
.distinctBy { it.url }
.let { networkToLocalManga(it) }
if (isActive) {

View File

@ -41,6 +41,8 @@ abstract class BaseSourcePagingSource(
protected val networkToLocalManga: NetworkToLocalManga = Injekt.get(),
) : SourcePagingSource() {
private val seenManga = hashSetOf<String>()
abstract suspend fun requestNextPage(currentPage: Int): MangasPage
override suspend fun load(
@ -70,21 +72,20 @@ abstract class BaseSourcePagingSource(
): LoadResult.Page<Long, /*SY --> */ Pair<Manga, RaisedSearchMetadata?>/*SY <-- */> {
val page = params.key ?: 1
val manga = mangasPage.mangas.map { it.toDomainManga(source!!.id) }
.let { networkToLocalManga(it) }
// SY -->
val metadata = if (mangasPage is MetadataMangasPage) {
mangasPage.mangasMetadata
} else {
emptyList()
}
val manga = mangasPage.mangas.mapIndexed { index, sManga -> sManga.toDomainManga(source!!.id) to metadata.getOrNull(index) }
.filter { seenManga.add(it.first.url) }
.let { manga -> manga.zip(networkToLocalManga(manga.map { it.first })).map { it.second to it.first.second } }
// SY <--
return LoadResult.Page(
data = manga// SY -->
.mapIndexed { index, sManga -> sManga to metadata.getOrNull(index) },
// SY <--,
data = manga,
prevKey = null,
nextKey = if (mangasPage.hasNextPage) page + 1 else null,
)