fix: 修复从未加入书架弹窗确认后返回仍显示未加入书架
This commit is contained in:
2 files changed
+32
No files matched your search
@@ -12,7 +12,10 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.runtime.DisposableEffect
|
import androidx.compose.runtime.DisposableEffect
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.lifecycle.Lifecycle
|
||||||
|
import androidx.lifecycle.LifecycleEventObserver
|
||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
|
import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.help.book.isAudio
|
import io.legado.app.help.book.isAudio
|
||||||
import io.legado.app.help.book.isImage
|
import io.legado.app.help.book.isImage
|
||||||
@@ -58,6 +61,7 @@ fun BookInfoRouteScreen(
|
|||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val activity = context as AppCompatActivity
|
val activity = context as AppCompatActivity
|
||||||
|
val lifecycleOwner = LocalLifecycleOwner.current
|
||||||
|
|
||||||
val tocActivityResult = rememberLauncherForActivityResult(TocActivityResult()) {
|
val tocActivityResult = rememberLauncherForActivityResult(TocActivityResult()) {
|
||||||
viewModel.onTocResult(it)
|
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) {
|
LaunchedEffect(viewModel, activity) {
|
||||||
viewModel.effects.collectLatest { effect ->
|
viewModel.effects.collectLatest { effect ->
|
||||||
when (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() {
|
fun toggleCanUpdate() {
|
||||||
currentBook?.let { book ->
|
currentBook?.let { book ->
|
||||||
book.canUpdate = !book.canUpdate
|
book.canUpdate = !book.canUpdate
|
||||||
|
|||||||
Reference in new issue
Block a user