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.ServerListeners
import ca.gosyer.jui.domain.manga.model.Manga import ca.gosyer.jui.domain.manga.model.Manga
import ca.gosyer.jui.domain.manga.service.MangaRepository import ca.gosyer.jui.domain.manga.service.MangaRepository
import io.ktor.http.encodeURLQueryComponent
import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flow
@@ -35,7 +36,7 @@ class UpdateMangaMeta @Inject constructor(
manga: Manga, manga: Manga,
readerMode: String = manga.meta.juiReaderMode readerMode: String = manga.meta.juiReaderMode
) = flow { ) = flow {
if (readerMode != manga.meta.juiReaderMode) { if (readerMode.encodeURLQueryComponent() != manga.meta.juiReaderMode.encodeURLQueryComponent()) {
mangaRepository.updateMangaMeta( mangaRepository.updateMangaMeta(
manga.id, manga.id,
"juiReaderMode", "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.prefs.asStateIn
import ca.gosyer.jui.uicore.vm.ContextWrapper import ca.gosyer.jui.uicore.vm.ContextWrapper
import ca.gosyer.jui.uicore.vm.ViewModel import ca.gosyer.jui.uicore.vm.ViewModel
import io.ktor.http.decodeURLQueryComponent
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
@@ -114,12 +115,13 @@ class ReaderMenuViewModel @Inject constructor(
.map { it.toImmutableList() } .map { it.toImmutableList() }
.stateIn(scope, SharingStarted.Eagerly, persistentListOf()) .stateIn(scope, SharingStarted.Eagerly, persistentListOf())
val readerMode = combine(readerPreferences.mode().getAsFlow(), _manga) { mode, manga -> val readerMode = combine(readerPreferences.mode().getAsFlow(), _manga) { mode, manga ->
val mangaMode = manga?.meta?.juiReaderMode?.decodeURLQueryComponent()
if ( if (
manga != null && mangaMode != null &&
manga.meta.juiReaderMode != MangaMeta.DEFAULT_READER_MODE && mangaMode != MangaMeta.DEFAULT_READER_MODE &&
manga.meta.juiReaderMode in readerModes.value mangaMode in readerModes.value
) { ) {
manga.meta.juiReaderMode mangaMode
} else { } else {
mode 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.SkipNext
import androidx.compose.material.icons.rounded.SkipPrevious import androidx.compose.material.icons.rounded.SkipPrevious
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
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
@@ -63,6 +62,7 @@ import ca.gosyer.jui.uicore.resources.stringResource
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.plus import kotlinx.collections.immutable.plus
import kotlinx.collections.immutable.toPersistentList
import kotlin.math.roundToInt import kotlin.math.roundToInt
@Composable @Composable
@@ -221,10 +221,10 @@ fun ReaderSheet(
@Composable @Composable
fun ReaderModeSetting(readerModes: ImmutableList<String>, selectedMode: String, onSetReaderMode: (String) -> Unit) { 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 defaultModeString = stringResource(MR.strings.default_reader_mode)
val displayModes by derivedStateOf { modes.replace(0, defaultModeString) } val displayModes = remember { modes.replace(0, defaultModeString).toPersistentList() }
val selectedModeIndex by derivedStateOf { modes.indexOf(selectedMode) } val selectedModeIndex = remember(selectedMode) { modes.indexOf(selectedMode) }
Row( Row(
Modifier.fillMaxWidth() Modifier.fillMaxWidth()
.defaultMinSize(minHeight = 56.dp) .defaultMinSize(minHeight = 56.dp)