diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt index 3e9fd6063..cfcef9af3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt @@ -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) { diff --git a/data/src/main/java/tachiyomi/data/source/SourcePagingSource.kt b/data/src/main/java/tachiyomi/data/source/SourcePagingSource.kt index 6e6d7c0ab..7caaaced0 100644 --- a/data/src/main/java/tachiyomi/data/source/SourcePagingSource.kt +++ b/data/src/main/java/tachiyomi/data/source/SourcePagingSource.kt @@ -41,6 +41,8 @@ abstract class BaseSourcePagingSource( protected val networkToLocalManga: NetworkToLocalManga = Injekt.get(), ) : SourcePagingSource() { + private val seenManga = hashSetOf() + abstract suspend fun requestNextPage(currentPage: Int): MangasPage override suspend fun load( @@ -70,21 +72,20 @@ abstract class BaseSourcePagingSource( ): LoadResult.Page */ Pair/*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, )