From 7d6a9b10e4bde179d33cd3333824ce2fc51c97ff Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Tue, 30 Jul 2024 13:19:41 +0800 Subject: [PATCH] Fix crash when opening archives simultaneously --- .../kotlin/com/hippo/ehviewer/ui/CommonOperations.kt | 12 ++++++------ .../com/hippo/ehviewer/ui/reader/ReaderScreen.kt | 5 ++++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt index bc0346ddf..f4fe5ce92 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt @@ -281,14 +281,14 @@ suspend fun removeFromFavorites(galleryInfo: BaseGalleryInfo) = doModifyFavorite localFavorited = EhDB.containLocalFavorites(galleryInfo.gid), ) -context (DestinationsNavigator) -fun navToReader( - info: BaseGalleryInfo, - page: Int = -1, -) = navigate(ReaderScreenDestination(ReaderScreenArgs.Gallery(info, page))) +fun DestinationsNavigator.navToReader(info: BaseGalleryInfo, page: Int = -1) = + navToReader(ReaderScreenArgs.Gallery(info, page)) fun DestinationsNavigator.navToReader(uri: Uri) = - navigate(ReaderScreenDestination(ReaderScreenArgs.Archive(uri))) + navToReader(ReaderScreenArgs.Archive(uri)) + +private fun DestinationsNavigator.navToReader(args: ReaderScreenArgs) = + navigate(ReaderScreenDestination(args)) { launchSingleTop = true } context(DialogState, Context, DestinationsNavigator) suspend fun doGalleryInfoAction(info: BaseGalleryInfo) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt index 929f5f140..847d1954e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt @@ -34,6 +34,7 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.State import androidx.compose.runtime.getValue +import androidx.compose.runtime.key import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState @@ -114,7 +115,9 @@ fun AnimatedVisibilityScope.ReaderScreen(args: ReaderScreenArgs, navigator: Dest ) { error -> if (error == null) { val info = (args as? ReaderScreenArgs.Gallery)?.info - ReaderScreen(pageLoader, info, navigator) + key(pageLoader) { + ReaderScreen(pageLoader, info, navigator) + } } else { Box(Modifier.fillMaxSize().background(bgColor), contentAlignment = Alignment.Center) { Text(