diff --git a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt index 3a4400ad0..c5e752283 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt @@ -354,6 +354,7 @@ private fun MangaScreenSmallImpl( SwipeRefresh( state = rememberSwipeRefreshState(state.isRefreshingInfo || state.isRefreshingChapter), onRefresh = onRefresh, + swipeEnabled = !chapters.any { it.selected }, indicatorPadding = contentPadding, indicator = { s, trigger -> SwipeRefreshIndicator( @@ -538,6 +539,8 @@ fun MangaScreenLargeImpl( val layoutDirection = LocalLayoutDirection.current val density = LocalDensity.current + val chapters = remember(state) { state.processedChapters.toList() } + // SY --> val metadataSource = remember(state.source.id) { state.source.getMainSource>() } // SY <-- @@ -547,6 +550,7 @@ fun MangaScreenLargeImpl( SwipeRefresh( state = rememberSwipeRefreshState(state.isRefreshingInfo || state.isRefreshingChapter), onRefresh = onRefresh, + swipeEnabled = !chapters.any { it.selected }, indicatorPadding = PaddingValues( start = insetPadding.calculateStartPadding(layoutDirection), top = with(density) { topBarHeight.toDp() }, @@ -561,7 +565,6 @@ fun MangaScreenLargeImpl( }, ) { val chapterListState = rememberLazyListState() - val chapters = remember(state) { state.processedChapters.toList() } val internalOnBackPressed = { if (chapters.any { it.selected }) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt index c43fad079..9be9c329e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt @@ -99,6 +99,7 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map @@ -257,8 +258,12 @@ class MangaPresenter( } getMangaAndChapters.subscribe(mangaId) + .distinctUntilChanged() // SY --> - .combine(getMergedChapterByMangaId.subscribe(mangaId)) { (manga, chapters), mergedChapters -> + .combine( + getMergedChapterByMangaId.subscribe(mangaId) + .distinctUntilChanged(), + ) { (manga, chapters), mergedChapters -> if (manga.source == MERGED_SOURCE_ID) { manga to mergedChapters } else manga to chapters @@ -287,13 +292,18 @@ class MangaPresenter( } allChapterScanlators = chapters.flatMap { MdUtil.getScanlators(it.scanlator) }.distinct() } - .combine(getFlatMetadata.subscribe(mangaId)) { pair, flatMetadata -> + .combine( + getFlatMetadata.subscribe(mangaId) + .distinctUntilChanged(), + ) { pair, flatMetadata -> CombineState(pair, flatMetadata) } .combine( combine( - getMergedMangaById.subscribe(mangaId), - getMergedReferencesById.subscribe(mangaId), + getMergedMangaById.subscribe(mangaId) + .distinctUntilChanged(), + getMergedReferencesById.subscribe(mangaId) + .distinctUntilChanged(), ) { manga, references -> if (manga.isNotEmpty()) { val sourceManager = Injekt.get()