|
@@ -135,8 +135,13 @@ class MangaInfoScreenModel(
|
|
|
/**
|
|
|
* Helper function to update the UI state only if it's currently in success state
|
|
|
*/
|
|
|
- private fun updateSuccessState(func: (MangaScreenState.Success) -> MangaScreenState.Success) {
|
|
|
- mutableState.update { if (it is MangaScreenState.Success) func(it) else it }
|
|
|
+ private inline fun updateSuccessState(func: (MangaScreenState.Success) -> MangaScreenState.Success) {
|
|
|
+ mutableState.update {
|
|
|
+ when (it) {
|
|
|
+ MangaScreenState.Loading -> it
|
|
|
+ is MangaScreenState.Success -> func(it)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
init {
|
|
@@ -278,12 +283,7 @@ class MangaInfoScreenModel(
|
|
|
val duplicate = getDuplicateLibraryManga.await(manga.title)
|
|
|
|
|
|
if (duplicate != null) {
|
|
|
- mutableState.update { state ->
|
|
|
- when (state) {
|
|
|
- MangaScreenState.Loading -> state
|
|
|
- is MangaScreenState.Success -> state.copy(dialog = Dialog.DuplicateManga(manga, duplicate))
|
|
|
- }
|
|
|
- }
|
|
|
+ updateSuccessState { it.copy(dialog = Dialog.DuplicateManga(manga, duplicate)) }
|
|
|
return@launchIO
|
|
|
}
|
|
|
}
|
|
@@ -340,16 +340,13 @@ class MangaInfoScreenModel(
|
|
|
coroutineScope.launch {
|
|
|
val categories = getCategories()
|
|
|
val selection = getMangaCategoryIds(manga)
|
|
|
- mutableState.update { state ->
|
|
|
- when (state) {
|
|
|
- MangaScreenState.Loading -> state
|
|
|
- is MangaScreenState.Success -> state.copy(
|
|
|
- dialog = Dialog.ChangeCategory(
|
|
|
- manga = manga,
|
|
|
- initialSelection = categories.mapAsCheckboxState { it.id in selection },
|
|
|
- ),
|
|
|
- )
|
|
|
- }
|
|
|
+ updateSuccessState { successState ->
|
|
|
+ successState.copy(
|
|
|
+ dialog = Dialog.ChangeCategory(
|
|
|
+ manga = manga,
|
|
|
+ initialSelection = categories.mapAsCheckboxState { it.id in selection },
|
|
|
+ ),
|
|
|
+ )
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -954,52 +951,23 @@ class MangaInfoScreenModel(
|
|
|
}
|
|
|
|
|
|
fun dismissDialog() {
|
|
|
- mutableState.update { state ->
|
|
|
- when (state) {
|
|
|
- MangaScreenState.Loading -> state
|
|
|
- is MangaScreenState.Success -> state.copy(dialog = null)
|
|
|
- }
|
|
|
- }
|
|
|
+ updateSuccessState { it.copy(dialog = null) }
|
|
|
}
|
|
|
|
|
|
fun showDeleteChapterDialog(chapters: List<Chapter>) {
|
|
|
- mutableState.update { state ->
|
|
|
- when (state) {
|
|
|
- MangaScreenState.Loading -> state
|
|
|
- is MangaScreenState.Success -> state.copy(dialog = Dialog.DeleteChapters(chapters))
|
|
|
- }
|
|
|
- }
|
|
|
+ updateSuccessState { it.copy(dialog = Dialog.DeleteChapters(chapters)) }
|
|
|
}
|
|
|
|
|
|
fun showSettingsDialog() {
|
|
|
- mutableState.update { state ->
|
|
|
- when (state) {
|
|
|
- MangaScreenState.Loading -> state
|
|
|
- is MangaScreenState.Success -> state.copy(dialog = Dialog.SettingsSheet)
|
|
|
- }
|
|
|
- }
|
|
|
+ updateSuccessState { it.copy(dialog = Dialog.SettingsSheet) }
|
|
|
}
|
|
|
|
|
|
fun showTrackDialog() {
|
|
|
- mutableState.update { state ->
|
|
|
- when (state) {
|
|
|
- MangaScreenState.Loading -> state
|
|
|
- is MangaScreenState.Success -> {
|
|
|
- state.copy(dialog = Dialog.TrackSheet)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ updateSuccessState { it.copy(dialog = Dialog.TrackSheet) }
|
|
|
}
|
|
|
|
|
|
fun showCoverDialog() {
|
|
|
- mutableState.update { state ->
|
|
|
- when (state) {
|
|
|
- MangaScreenState.Loading -> state
|
|
|
- is MangaScreenState.Success -> {
|
|
|
- state.copy(dialog = Dialog.FullCover)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ updateSuccessState { it.copy(dialog = Dialog.FullCover) }
|
|
|
}
|
|
|
}
|
|
|
|