From affeca05f631729ddb0f4d706a4011152cf3ce1c Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Fri, 19 Jun 2026 00:15:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BB=8E=E6=9C=AA?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=E4=B9=A6=E6=9E=B6=E5=BC=B9=E7=AA=97=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E5=90=8E=E8=BF=94=E5=9B=9E=E4=BB=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=9C=AA=E5=8A=A0=E5=85=A5=E4=B9=A6=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/info/BookInfoRouteScreen.kt | 16 ++++++++++++++++ .../legado/app/ui/book/info/BookInfoViewModel.kt | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoRouteScreen.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoRouteScreen.kt index f8fbe1fb4..b74b57557 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoRouteScreen.kt +++ b/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) { diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt index 589d1eddd..852c470b8 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt +++ b/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