فهرست منبع

fix: 修复从未加入书架弹窗确认后返回仍显示未加入书架

HapeLee 4 ماه پیش
والد
کامیت
affeca05f6

+ 16 - 0
app/src/main/java/io/legado/app/ui/book/info/BookInfoRouteScreen.kt

@@ -12,7 +12,10 @@ import androidx.compose.runtime.Composable
 import androidx.compose.runtime.DisposableEffect
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.ui.platform.LocalContext
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.LocalLifecycleOwner
 import io.legado.app.R
 import io.legado.app.help.book.isAudio
 import io.legado.app.help.book.isImage
@@ -58,6 +61,7 @@ fun BookInfoRouteScreen(
 ) {
     val context = LocalContext.current
     val activity = context as AppCompatActivity
+    val lifecycleOwner = LocalLifecycleOwner.current
 
     val tocActivityResult = rememberLauncherForActivityResult(TocActivityResult()) {
         viewModel.onTocResult(it)
@@ -104,6 +108,18 @@ fun BookInfoRouteScreen(
         }
     }
 
+    DisposableEffect(lifecycleOwner, viewModel) {
+        val observer = LifecycleEventObserver { _, event ->
+            if (event == Lifecycle.Event.ON_RESUME) {
+                viewModel.refreshShelfState()
+            }
+        }
+        lifecycleOwner.lifecycle.addObserver(observer)
+        onDispose {
+            lifecycleOwner.lifecycle.removeObserver(observer)
+        }
+    }
+
     LaunchedEffect(viewModel, activity) {
         viewModel.effects.collectLatest { effect ->
             when (effect) {

+ 16 - 0
app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt

@@ -351,6 +351,22 @@ class BookInfoViewModel(
         }
     }
 
+    fun refreshShelfState() {
+        val bookUrl = currentBook?.bookUrl ?: return
+        execute {
+            appDb.bookDao.getBook(bookUrl)
+        }.onSuccess { dbBook ->
+            val nextInBookshelf = dbBook != null && !dbBook.isNotShelf
+            if (nextInBookshelf) {
+                currentBook = dbBook
+            }
+            if (inBookshelf != nextInBookshelf || nextInBookshelf) {
+                inBookshelf = nextInBookshelf
+                syncUiState()
+            }
+        }
+    }
+
     fun toggleCanUpdate() {
         currentBook?.let { book ->
             book.canUpdate = !book.canUpdate