From cd48f0aed8c895865bc20414bb372cd7514ae819 Mon Sep 17 00:00:00 2001 From: tarsin Date: Thu, 11 May 2023 10:50:49 +0800 Subject: [PATCH] Code cleanup --- .../ehviewer/ui/scene/GalleryPreviewsScene.kt | 50 ++++++++----------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.kt index 9771bef8a..933e027bd 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.kt @@ -37,7 +37,6 @@ import androidx.compose.material3.Slider import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -77,7 +76,6 @@ import com.hippo.util.getParcelableCompat import com.hippo.widget.recyclerview.getSpanCountForSuitableSize import eu.kanade.tachiyomi.util.lang.launchIO import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay import kotlinx.coroutines.launch import moe.tarsin.coroutines.runSuspendCatching import java.util.Locale @@ -102,7 +100,7 @@ class GalleryPreviewsScene : BaseScene() { val coroutineScope = rememberCoroutineScope() val pages = galleryDetail.pages val pgSize = galleryDetail.previewList.size - var initialKey by rememberSaveable { mutableStateOf(1) } + var initialKey by rememberSaveable { mutableStateOf(if (toNextPage) 2 else 1) } suspend fun showGoToDialog() { val goto = dialogState.show(initial = 1, title = R.string.go_to) { @@ -126,29 +124,29 @@ class GalleryPreviewsScene : BaseScene() { } val previewPagesMap = rememberSaveable { mutableMapOf().apply { put(1, galleryDetail.previewList) } } - - // No Refresh support - fun pageSource() = object : PagingSource() { - override fun getRefreshKey(state: PagingState) = ((state.anchorPosition ?: 0) - state.config.initialLoadSize / 2).coerceAtLeast(0) - override suspend fun load(params: LoadParams): LoadResult { - val up = params.key ?: 1 - val end = up + params.loadSize - 1 - runSuspendCatching { - (up..end).mapNotNull { it.takeUnless { previewPagesMap.contains(it) } } - .parMap(Dispatchers.IO) { getPreviewListByPage(galleryDetail, it - 1).apply { previewPagesMap[it] = this } } - }.onFailure { - return LoadResult.Error(it) + val data = remember(initialKey) { + Pager(PagingConfig(1, enablePlaceholders = false, initialLoadSize = 1), initialKey) { + object : PagingSource() { + override fun getRefreshKey(state: PagingState) = null + override suspend fun load(params: LoadParams): LoadResult { + val up = params.key ?: 1 + val end = up + params.loadSize - 1 + runSuspendCatching { + (up..end).mapNotNull { it.takeUnless { previewPagesMap.contains(it) } } + .parMap(Dispatchers.IO) { getPreviewListByPage(galleryDetail, it - 1).apply { previewPagesMap[it] = this } } + }.onFailure { + return LoadResult.Error(it) + } + val r = (up..end).map { previewPagesMap[it]!! } + val prevK = if (up == 1) null else up - 1 + val nextK = if (end == galleryDetail.previewPages) null else end + 1 + return LoadResult.Page(r, prevK, nextK) + } + override val keyReuseSupported = true } - val r = (up..end).map { previewPagesMap[it]!! } - val prevK = if (up == 1) null else up - 1 - val nextK = if (end == galleryDetail.previewPages) null else end + 1 - return LoadResult.Page(r, prevK, nextK) - } - override val jumpingSupported = true - override val keyReuseSupported = true - } + }.flow.cachedIn(lifecycleScope) + }.collectAsLazyPagingItems() - val data = remember(initialKey) { Pager(PagingConfig(1, enablePlaceholders = false, initialLoadSize = 1, jumpThreshold = 3), initialKey) { pageSource() }.flow.cachedIn(lifecycleScope) }.collectAsLazyPagingItems() Scaffold( topBar = { TopAppBar( @@ -171,10 +169,6 @@ class GalleryPreviewsScene : BaseScene() { ) }, ) { paddingValues -> - LaunchedEffect(toNextPage) { - delay(500) // Should we wait this animation? - if (toNextPage) state.scrollToItem(pgSize) - } LazyVerticalGrid( columns = GridCells.Fixed(columnCount), modifier = Modifier.nestedScroll(scrollBehaviour.nestedScrollConnection),