diff --git a/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/manga/interactor/UpdateMangaMeta.kt b/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/manga/interactor/UpdateMangaMeta.kt index ee9ea737..e103e3a3 100644 --- a/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/manga/interactor/UpdateMangaMeta.kt +++ b/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/manga/interactor/UpdateMangaMeta.kt @@ -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", diff --git a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderMenuViewModel.kt b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderMenuViewModel.kt index 44130b66..6ab54168 100644 --- a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderMenuViewModel.kt +++ b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderMenuViewModel.kt @@ -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 } diff --git a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderSideMenu.kt b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderSideMenu.kt index d79fb352..f388e0be 100644 --- a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderSideMenu.kt +++ b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderSideMenu.kt @@ -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, 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)