Fix reader mode not updating after changing the value

This commit is contained in:
Syer10
2022-12-31 12:39:56 -05:00
parent a8d40c7390
commit 2badb7994b
3 changed files with 12 additions and 9 deletions

View File

@@ -9,6 +9,7 @@ package ca.gosyer.jui.domain.manga.interactor
import ca.gosyer.jui.domain.ServerListeners
import ca.gosyer.jui.domain.manga.model.Manga
import ca.gosyer.jui.domain.manga.service.MangaRepository
import io.ktor.http.encodeURLQueryComponent
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flow
@@ -35,7 +36,7 @@ class UpdateMangaMeta @Inject constructor(
manga: Manga,
readerMode: String = manga.meta.juiReaderMode
) = flow {
if (readerMode != manga.meta.juiReaderMode) {
if (readerMode.encodeURLQueryComponent() != manga.meta.juiReaderMode.encodeURLQueryComponent()) {
mangaRepository.updateMangaMeta(
manga.id,
"juiReaderMode",

View File

@@ -37,6 +37,7 @@ import ca.gosyer.jui.ui.reader.model.ViewerChapters
import ca.gosyer.jui.uicore.prefs.asStateIn
import ca.gosyer.jui.uicore.vm.ContextWrapper
import ca.gosyer.jui.uicore.vm.ViewModel
import io.ktor.http.decodeURLQueryComponent
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
@@ -114,12 +115,13 @@ class ReaderMenuViewModel @Inject constructor(
.map { it.toImmutableList() }
.stateIn(scope, SharingStarted.Eagerly, persistentListOf())
val readerMode = combine(readerPreferences.mode().getAsFlow(), _manga) { mode, manga ->
val mangaMode = manga?.meta?.juiReaderMode?.decodeURLQueryComponent()
if (
manga != null &&
manga.meta.juiReaderMode != MangaMeta.DEFAULT_READER_MODE &&
manga.meta.juiReaderMode in readerModes.value
mangaMode != null &&
mangaMode != MangaMeta.DEFAULT_READER_MODE &&
mangaMode in readerModes.value
) {
manga.meta.juiReaderMode
mangaMode
} else {
mode
}

View File

@@ -41,7 +41,6 @@ import androidx.compose.material.icons.rounded.NavigateNext
import androidx.compose.material.icons.rounded.SkipNext
import androidx.compose.material.icons.rounded.SkipPrevious
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@@ -63,6 +62,7 @@ import ca.gosyer.jui.uicore.resources.stringResource
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.plus
import kotlinx.collections.immutable.toPersistentList
import kotlin.math.roundToInt
@Composable
@@ -221,10 +221,10 @@ fun ReaderSheet(
@Composable
fun ReaderModeSetting(readerModes: ImmutableList<String>, selectedMode: String, onSetReaderMode: (String) -> Unit) {
val modes by derivedStateOf { persistentListOf(MangaMeta.DEFAULT_READER_MODE) + readerModes }
val modes = remember { persistentListOf(MangaMeta.DEFAULT_READER_MODE) + readerModes }
val defaultModeString = stringResource(MR.strings.default_reader_mode)
val displayModes by derivedStateOf { modes.replace(0, defaultModeString) }
val selectedModeIndex by derivedStateOf { modes.indexOf(selectedMode) }
val displayModes = remember { modes.replace(0, defaultModeString).toPersistentList() }
val selectedModeIndex = remember(selectedMode) { modes.indexOf(selectedMode) }
Row(
Modifier.fillMaxWidth()
.defaultMinSize(minHeight = 56.dp)