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

This commit is contained in:
HapeLee
2026-06-19 00:20:06 +08:00
parent 69c36fb795
commit affeca05f6
2 changed files with 32 additions and 0 deletions
@@ -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) {
@@ -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