Fix clearing database freezes the app (#8492)
(cherry picked from commit 6ce54eb845d5333cc3fc202f59585816b61b29da) # Conflicts: # app/src/main/java/eu/kanade/presentation/more/settings/screen/ClearDatabaseScreen.kt
This commit is contained in:
parent
433f492f4c
commit
b144593129
@ -23,6 +23,7 @@ import androidx.compose.runtime.collectAsState
|
|||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
@ -51,6 +52,8 @@ import eu.kanade.presentation.util.selectedBackground
|
|||||||
import eu.kanade.tachiyomi.Database
|
import eu.kanade.tachiyomi.Database
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||||
|
import eu.kanade.tachiyomi.util.lang.launchUI
|
||||||
|
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
@ -65,6 +68,7 @@ class ClearDatabaseScreen : Screen {
|
|||||||
val navigator = LocalNavigator.currentOrThrow
|
val navigator = LocalNavigator.currentOrThrow
|
||||||
val model = rememberScreenModel { ClearDatabaseScreenModel() }
|
val model = rememberScreenModel { ClearDatabaseScreenModel() }
|
||||||
val state by model.state.collectAsState()
|
val state by model.state.collectAsState()
|
||||||
|
val scope = rememberCoroutineScope()
|
||||||
|
|
||||||
when (val s = state) {
|
when (val s = state) {
|
||||||
is ClearDatabaseScreenModel.State.Loading -> LoadingScreen()
|
is ClearDatabaseScreenModel.State.Loading -> LoadingScreen()
|
||||||
@ -78,12 +82,14 @@ class ClearDatabaseScreen : Screen {
|
|||||||
confirmButton = {
|
confirmButton = {
|
||||||
TextButton(
|
TextButton(
|
||||||
onClick = {
|
onClick = {
|
||||||
// SY -->
|
scope.launchUI {
|
||||||
model.removeMangaBySourceId(keepReadManga)
|
// SY -->
|
||||||
// SY <--
|
model.removeMangaBySourceId(keepReadManga)
|
||||||
model.clearSelection()
|
// SY <--
|
||||||
model.hideConfirmation()
|
model.clearSelection()
|
||||||
context.toast(R.string.clear_database_completed)
|
model.hideConfirmation()
|
||||||
|
context.toast(R.string.clear_database_completed)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = stringResource(android.R.string.ok))
|
Text(text = stringResource(android.R.string.ok))
|
||||||
@ -246,8 +252,8 @@ private class ClearDatabaseScreenModel : StateScreenModel<ClearDatabaseScreenMod
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun removeMangaBySourceId(/* SY --> */keepReadManga: Boolean /* SY <-- */) {
|
suspend fun removeMangaBySourceId(/* SY --> */keepReadManga: Boolean /* SY <-- */) = withNonCancellableContext {
|
||||||
val state = state.value as? State.Ready ?: return
|
val state = state.value as? State.Ready ?: return@withNonCancellableContext
|
||||||
// SY -->
|
// SY -->
|
||||||
if (keepReadManga) {
|
if (keepReadManga) {
|
||||||
database.mangasQueries.deleteMangasNotInLibraryAndNotReadBySourceIds(state.selection)
|
database.mangasQueries.deleteMangasNotInLibraryAndNotReadBySourceIds(state.selection)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user