diff --git a/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt index 0547867d..cb473685 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt @@ -162,7 +162,7 @@ class BookRepositoryImpl @Inject constructor( * * @return If [Resource.Success] and returns null, then the book is up-to-date. */ - override suspend fun checkTextForUpdate(bookId: Int): Resource, List>?> { + override suspend fun checkForTextUpdate(bookId: Int): Resource, List>?> { yield() try { diff --git a/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt b/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt index 446bb21e..7f9eb55b 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt @@ -31,7 +31,7 @@ interface BookRepository { textPath: String ): List - suspend fun checkTextForUpdate(bookId: Int): Resource, List>?> + suspend fun checkForTextUpdate(bookId: Int): Resource, List>?> suspend fun insertBook( bookWithTextAndCover: BookWithTextAndCover diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/CheckTextForUpdate.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/CheckForTextUpdate.kt similarity index 75% rename from app/src/main/java/ua/acclorite/book_story/domain/use_case/CheckTextForUpdate.kt rename to app/src/main/java/ua/acclorite/book_story/domain/use_case/CheckForTextUpdate.kt index ea9b35df..9034de88 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/CheckTextForUpdate.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/use_case/CheckForTextUpdate.kt @@ -5,9 +5,9 @@ import ua.acclorite.book_story.domain.repository.BookRepository import ua.acclorite.book_story.domain.util.Resource import javax.inject.Inject -class CheckTextForUpdate @Inject constructor(private val repository: BookRepository) { +class CheckForTextUpdate @Inject constructor(private val repository: BookRepository) { suspend fun execute(bookId: Int): Resource, List>?> { - return repository.checkTextForUpdate(bookId) + return repository.checkForTextUpdate(bookId) } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainEvent.kt index 0f48b2af..32f3a059 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainEvent.kt @@ -4,43 +4,43 @@ import androidx.compose.runtime.Immutable @Immutable sealed class MainEvent { - data class OnChangeLanguage(val lang: String) : MainEvent() - data class OnChangeTheme(val theme: String) : MainEvent() - data class OnChangeDarkTheme(val darkTheme: String) : MainEvent() - data class OnChangePureDark(val pureDark: String) : MainEvent() - data class OnChangeThemeContrast(val themeContrast: String) : MainEvent() - data class OnChangeFontFamily(val fontFamily: String) : MainEvent() - data class OnChangeFontStyle(val fontStyle: Boolean) : MainEvent() - data class OnChangeFontSize(val fontSize: Int) : MainEvent() - data class OnChangeLineHeight(val lineHeight: Int) : MainEvent() - data class OnChangeParagraphHeight(val paragraphHeight: Int) : MainEvent() - data class OnChangeParagraphIndentation(val indentation: Int) : MainEvent() - data class OnChangeShowStartScreen(val bool: Boolean) : MainEvent() - data class OnChangeCheckForUpdates(val bool: Boolean) : MainEvent() - data class OnChangeSidePadding(val sidePadding: Int) : MainEvent() - data class OnChangeDoubleClickTranslation(val bool: Boolean) : MainEvent() - data class OnChangeFastColorPresetChange(val bool: Boolean) : MainEvent() - data class OnChangeBrowseFilesStructure(val structure: String) : MainEvent() - data class OnChangeBrowseLayout(val layout: String) : MainEvent() - data class OnChangeBrowseAutoGridSize(val bool: Boolean) : MainEvent() - data class OnChangeBrowseGridSize(val size: Int) : MainEvent() - data class OnChangeBrowsePinFavoriteDirectories(val bool: Boolean) : MainEvent() - data class OnChangeBrowseSortOrder(val order: String) : MainEvent() - data class OnChangeBrowseSortOrderDescending(val bool: Boolean) : MainEvent() - data class OnChangeBrowseIncludedFilterItem(val item: String) : MainEvent() - data class OnChangeTextAlignment(val alignment: String) : MainEvent() - data class OnChangeDoublePressExit(val bool: Boolean) : MainEvent() - data class OnChangeLetterSpacing(val spacing: Int) : MainEvent() - data class OnChangeAbsoluteDark(val bool: Boolean) : MainEvent() - data class OnChangeCutoutPadding(val bool: Boolean) : MainEvent() - data class OnChangeFullscreen(val bool: Boolean) : MainEvent() - data class OnChangeKeepScreenOn(val bool: Boolean) : MainEvent() - data class OnChangeVerticalPadding(val padding: Int) : MainEvent() - data class OnChangeHideBarsOnFastScroll(val bool: Boolean) : MainEvent() - data class OnChangePerceptionExpander(val bool: Boolean) : MainEvent() - data class OnChangePerceptionExpanderPadding(val padding: Int) : MainEvent() - data class OnChangePerceptionExpanderThickness(val thickness: Int) : MainEvent() - data class OnChangeCheckForTextUpdate(val bool: Boolean) : MainEvent() - data class OnChangeCheckForTextUpdateToast(val bool: Boolean) : MainEvent() - data class OnChangeScreenOrientation(val orientation: String) : MainEvent() + data class OnChangeLanguage(val value: String) : MainEvent() + data class OnChangeTheme(val value: String) : MainEvent() + data class OnChangeDarkTheme(val value: String) : MainEvent() + data class OnChangePureDark(val value: String) : MainEvent() + data class OnChangeThemeContrast(val value: String) : MainEvent() + data class OnChangeFontFamily(val value: String) : MainEvent() + data class OnChangeFontStyle(val value: Boolean) : MainEvent() + data class OnChangeFontSize(val value: Int) : MainEvent() + data class OnChangeLineHeight(val value: Int) : MainEvent() + data class OnChangeParagraphHeight(val value: Int) : MainEvent() + data class OnChangeParagraphIndentation(val value: Int) : MainEvent() + data class OnChangeShowStartScreen(val value: Boolean) : MainEvent() + data class OnChangeCheckForUpdates(val value: Boolean) : MainEvent() + data class OnChangeSidePadding(val value: Int) : MainEvent() + data class OnChangeDoubleClickTranslation(val value: Boolean) : MainEvent() + data class OnChangeFastColorPresetChange(val value: Boolean) : MainEvent() + data class OnChangeBrowseFilesStructure(val value: String) : MainEvent() + data class OnChangeBrowseLayout(val value: String) : MainEvent() + data class OnChangeBrowseAutoGridSize(val value: Boolean) : MainEvent() + data class OnChangeBrowseGridSize(val value: Int) : MainEvent() + data class OnChangeBrowsePinFavoriteDirectories(val value: Boolean) : MainEvent() + data class OnChangeBrowseSortOrder(val value: String) : MainEvent() + data class OnChangeBrowseSortOrderDescending(val value: Boolean) : MainEvent() + data class OnChangeBrowseIncludedFilterItem(val value: String) : MainEvent() + data class OnChangeTextAlignment(val value: String) : MainEvent() + data class OnChangeDoublePressExit(val value: Boolean) : MainEvent() + data class OnChangeLetterSpacing(val value: Int) : MainEvent() + data class OnChangeAbsoluteDark(val value: Boolean) : MainEvent() + data class OnChangeCutoutPadding(val value: Boolean) : MainEvent() + data class OnChangeFullscreen(val value: Boolean) : MainEvent() + data class OnChangeKeepScreenOn(val value: Boolean) : MainEvent() + data class OnChangeVerticalPadding(val value: Int) : MainEvent() + data class OnChangeHideBarsOnFastScroll(val value: Boolean) : MainEvent() + data class OnChangePerceptionExpander(val value: Boolean) : MainEvent() + data class OnChangePerceptionExpanderPadding(val value: Int) : MainEvent() + data class OnChangePerceptionExpanderThickness(val value: Int) : MainEvent() + data class OnChangeCheckForTextUpdate(val value: Boolean) : MainEvent() + data class OnChangeCheckForTextUpdateToast(val value: Boolean) : MainEvent() + data class OnChangeScreenOrientation(val value: String) : MainEvent() } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainState.kt index 8d2a6f22..96ce7713 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainState.kt @@ -13,9 +13,9 @@ import ua.acclorite.book_story.presentation.core.constants.DataStoreConstants import ua.acclorite.book_story.presentation.screens.settings.nested.browse.data.BrowseFilesStructure import ua.acclorite.book_story.presentation.screens.settings.nested.browse.data.BrowseLayout import ua.acclorite.book_story.presentation.screens.settings.nested.browse.data.BrowseSortOrder +import ua.acclorite.book_story.presentation.screens.settings.nested.browse.data.toBrowseFilesStructure import ua.acclorite.book_story.presentation.screens.settings.nested.browse.data.toBrowseLayout import ua.acclorite.book_story.presentation.screens.settings.nested.browse.data.toBrowseSortOrder -import ua.acclorite.book_story.presentation.screens.settings.nested.browse.data.toFilesStructure import ua.acclorite.book_story.presentation.screens.settings.nested.reader.data.ReaderScreenOrientation import ua.acclorite.book_story.presentation.screens.settings.nested.reader.data.ReaderTextAlignment import ua.acclorite.book_story.presentation.screens.settings.nested.reader.data.toReaderScreenOrientation @@ -187,7 +187,7 @@ data class MainState( ) { fastColorPresetChange }, browseFilesStructure = provideValue( - BROWSE_FILES_STRUCTURE, convert = { toFilesStructure() } + BROWSE_FILES_STRUCTURE, convert = { toBrowseFilesStructure() } ) { browseFilesStructure }, browseLayout = provideValue( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainViewModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainViewModel.kt index 2cc8b23e..e04e5b9d 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainViewModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainViewModel.kt @@ -1,5 +1,6 @@ package ua.acclorite.book_story.presentation.data +import androidx.datastore.preferences.core.Preferences import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel @@ -11,6 +12,7 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import ua.acclorite.book_story.domain.use_case.ChangeLanguage import ua.acclorite.book_story.domain.use_case.CheckForUpdates import ua.acclorite.book_story.domain.use_case.GetAllSettings @@ -20,9 +22,9 @@ import ua.acclorite.book_story.presentation.core.constants.DataStoreConstants import ua.acclorite.book_story.presentation.core.util.BaseViewModel import ua.acclorite.book_story.presentation.screens.library.data.LibraryViewModel import ua.acclorite.book_story.presentation.screens.settings.data.SettingsViewModel +import ua.acclorite.book_story.presentation.screens.settings.nested.browse.data.toBrowseFilesStructure import ua.acclorite.book_story.presentation.screens.settings.nested.browse.data.toBrowseLayout import ua.acclorite.book_story.presentation.screens.settings.nested.browse.data.toBrowseSortOrder -import ua.acclorite.book_story.presentation.screens.settings.nested.browse.data.toFilesStructure import ua.acclorite.book_story.presentation.screens.settings.nested.reader.data.toReaderScreenOrientation import ua.acclorite.book_story.presentation.screens.settings.nested.reader.data.toTextAlignment import ua.acclorite.book_story.presentation.ui.toDarkTheme @@ -31,9 +33,7 @@ import ua.acclorite.book_story.presentation.ui.toTheme import ua.acclorite.book_story.presentation.ui.toThemeContrast import javax.inject.Inject -/** - * Stores all variables such as theme, language etc - */ + @HiltViewModel class MainViewModel @Inject constructor( private val stateHandle: SavedStateHandle, @@ -56,494 +56,312 @@ class MainViewModel @Inject constructor( override val state = _state.asStateFlow() override fun onEvent(event: MainEvent) { - when (event) { - is MainEvent.OnChangeLanguage -> { - viewModelScope.launch(Dispatchers.Main) { - changeLanguage.execute(event.lang) - updateStateWithSavedHandle { - it.copy( - language = event.lang - ) - } - } - } + viewModelScope.launch(Dispatchers.IO) { + when (event) { + is MainEvent.OnChangeLanguage -> handleLanguageUpdate(event.value) - is MainEvent.OnChangeDarkTheme -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.DARK_THEME, event.darkTheme) - updateStateWithSavedHandle { - it.copy( - darkTheme = event.darkTheme.toDarkTheme() - ) + is MainEvent.OnChangeDarkTheme -> handleDatastoreUpdate( + key = DataStoreConstants.DARK_THEME, + value = event.value, + updateState = { + it.copy(darkTheme = toDarkTheme()) } - } - } + ) - is MainEvent.OnChangePureDark -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.PURE_DARK, event.pureDark) - updateStateWithSavedHandle { - it.copy( - pureDark = event.pureDark.toPureDark() - ) + is MainEvent.OnChangePureDark -> handleDatastoreUpdate( + key = DataStoreConstants.PURE_DARK, + value = event.value, + updateState = { + it.copy(pureDark = toPureDark()) } - } - } + ) - is MainEvent.OnChangeThemeContrast -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.THEME_CONTRAST, event.themeContrast) - updateStateWithSavedHandle { - it.copy( - themeContrast = event.themeContrast.toThemeContrast() - ) + is MainEvent.OnChangeThemeContrast -> handleDatastoreUpdate( + key = DataStoreConstants.THEME_CONTRAST, + value = event.value, + updateState = { + it.copy(themeContrast = toThemeContrast()) } - } - } + ) - is MainEvent.OnChangeTheme -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.THEME, event.theme) - updateStateWithSavedHandle { - it.copy( - theme = event.theme.toTheme() - ) + is MainEvent.OnChangeTheme -> handleDatastoreUpdate( + key = DataStoreConstants.THEME, + value = event.value, + updateState = { + it.copy(theme = toTheme()) } - } - } + ) - is MainEvent.OnChangeFontFamily -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.FONT, event.fontFamily) - updateStateWithSavedHandle { + is MainEvent.OnChangeFontFamily -> handleDatastoreUpdate( + key = DataStoreConstants.FONT, + value = event.value, + updateState = { it.copy( - fontFamily = Constants.FONTS.find { font -> font.id == event.fontFamily }?.id + fontFamily = Constants.FONTS.find { font -> font.id == event.value }?.id ?: Constants.FONTS[0].id ) } - } - } + ) - is MainEvent.OnChangeFontStyle -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.IS_ITALIC, event.fontStyle) - updateStateWithSavedHandle { - it.copy( - isItalic = event.fontStyle - ) + is MainEvent.OnChangeFontStyle -> handleDatastoreUpdate( + key = DataStoreConstants.IS_ITALIC, + value = event.value, + updateState = { + it.copy(isItalic = this) } - } - } + ) - is MainEvent.OnChangeFontSize -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.FONT_SIZE, event.fontSize) - updateStateWithSavedHandle { - it.copy( - fontSize = event.fontSize - ) + is MainEvent.OnChangeFontSize -> handleDatastoreUpdate( + key = DataStoreConstants.FONT_SIZE, + value = event.value, + updateState = { + it.copy(fontSize = this) } - } - } + ) - is MainEvent.OnChangeLineHeight -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.LINE_HEIGHT, event.lineHeight) - updateStateWithSavedHandle { - it.copy( - lineHeight = event.lineHeight - ) + is MainEvent.OnChangeLineHeight -> handleDatastoreUpdate( + key = DataStoreConstants.LINE_HEIGHT, + value = event.value, + updateState = { + it.copy(lineHeight = this) } - } - } + ) - is MainEvent.OnChangeParagraphHeight -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.PARAGRAPH_HEIGHT, event.paragraphHeight) - updateStateWithSavedHandle { - it.copy( - paragraphHeight = event.paragraphHeight - ) + is MainEvent.OnChangeParagraphHeight -> handleDatastoreUpdate( + key = DataStoreConstants.PARAGRAPH_HEIGHT, + value = event.value, + updateState = { + it.copy(paragraphHeight = this) } - } - } + ) - is MainEvent.OnChangeParagraphIndentation -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.PARAGRAPH_INDENTATION, - event.indentation - ) - updateStateWithSavedHandle { - it.copy( - paragraphIndentation = event.indentation - ) + is MainEvent.OnChangeParagraphIndentation -> handleDatastoreUpdate( + key = DataStoreConstants.PARAGRAPH_INDENTATION, + value = event.value, + updateState = { + it.copy(paragraphIndentation = this) } - } - } + ) - is MainEvent.OnChangeShowStartScreen -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.SHOW_START_SCREEN, event.bool) - updateStateWithSavedHandle { - it.copy( - showStartScreen = event.bool - ) + is MainEvent.OnChangeShowStartScreen -> handleDatastoreUpdate( + key = DataStoreConstants.SHOW_START_SCREEN, + value = event.value, + updateState = { + it.copy(showStartScreen = this) } - } - } + ) - is MainEvent.OnChangeCheckForUpdates -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.CHECK_FOR_UPDATES, event.bool) - updateStateWithSavedHandle { - it.copy( - checkForUpdates = event.bool - ) + is MainEvent.OnChangeCheckForUpdates -> handleDatastoreUpdate( + key = DataStoreConstants.CHECK_FOR_UPDATES, + value = event.value, + updateState = { + it.copy(checkForUpdates = this) } - } - } + ) - is MainEvent.OnChangeSidePadding -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.SIDE_PADDING, event.sidePadding) - updateStateWithSavedHandle { - it.copy( - sidePadding = event.sidePadding - ) + is MainEvent.OnChangeSidePadding -> handleDatastoreUpdate( + key = DataStoreConstants.SIDE_PADDING, + value = event.value, + updateState = { + it.copy(sidePadding = this) } - } - } + ) - is MainEvent.OnChangeDoubleClickTranslation -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.DOUBLE_CLICK_TRANSLATION, event.bool) - updateStateWithSavedHandle { - it.copy( - doubleClickTranslation = event.bool - ) + is MainEvent.OnChangeDoubleClickTranslation -> handleDatastoreUpdate( + key = DataStoreConstants.DOUBLE_CLICK_TRANSLATION, + value = event.value, + updateState = { + it.copy(doubleClickTranslation = this) } - } - } + ) - is MainEvent.OnChangeFastColorPresetChange -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.FAST_COLOR_PRESET_CHANGE, event.bool) - updateStateWithSavedHandle { - it.copy( - fastColorPresetChange = event.bool - ) + is MainEvent.OnChangeFastColorPresetChange -> handleDatastoreUpdate( + key = DataStoreConstants.FAST_COLOR_PRESET_CHANGE, + value = event.value, + updateState = { + it.copy(fastColorPresetChange = this) } - } - } + ) - is MainEvent.OnChangeBrowseFilesStructure -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.BROWSE_FILES_STRUCTURE, event.structure) - updateStateWithSavedHandle { - it.copy( - browseFilesStructure = event.structure.toFilesStructure() - ) + is MainEvent.OnChangeBrowseFilesStructure -> handleDatastoreUpdate( + key = DataStoreConstants.BROWSE_FILES_STRUCTURE, + value = event.value, + updateState = { + it.copy(browseFilesStructure = toBrowseFilesStructure()) } - } - } + ) - is MainEvent.OnChangeBrowseLayout -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.BROWSE_LAYOUT, event.layout) - updateStateWithSavedHandle { - it.copy( - browseLayout = event.layout.toBrowseLayout() - ) + is MainEvent.OnChangeBrowseLayout -> handleDatastoreUpdate( + key = DataStoreConstants.BROWSE_LAYOUT, + value = event.value, + updateState = { + it.copy(browseLayout = toBrowseLayout()) } - } - } + ) - is MainEvent.OnChangeBrowseAutoGridSize -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.BROWSE_AUTO_GRID_SIZE, event.bool) - updateStateWithSavedHandle { - it.copy( - browseAutoGridSize = event.bool - ) + is MainEvent.OnChangeBrowseAutoGridSize -> handleDatastoreUpdate( + key = DataStoreConstants.BROWSE_AUTO_GRID_SIZE, + value = event.value, + updateState = { + it.copy(browseAutoGridSize = this) } - } - } + ) - is MainEvent.OnChangeBrowseGridSize -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.BROWSE_GRID_SIZE, event.size) - updateStateWithSavedHandle { - it.copy( - browseGridSize = event.size - ) + is MainEvent.OnChangeBrowseGridSize -> handleDatastoreUpdate( + key = DataStoreConstants.BROWSE_GRID_SIZE, + value = event.value, + updateState = { + it.copy(browseGridSize = this) } - } - } + ) - is MainEvent.OnChangeBrowsePinFavoriteDirectories -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.BROWSE_PIN_FAVORITE_DIRECTORIES, - event.bool - ) - updateStateWithSavedHandle { - it.copy( - browsePinFavoriteDirectories = event.bool - ) + is MainEvent.OnChangeBrowsePinFavoriteDirectories -> handleDatastoreUpdate( + key = DataStoreConstants.BROWSE_PIN_FAVORITE_DIRECTORIES, + value = event.value, + updateState = { + it.copy(browsePinFavoriteDirectories = this) } - } - } + ) - is MainEvent.OnChangeBrowseSortOrder -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.BROWSE_SORT_ORDER, event.order) - updateStateWithSavedHandle { - it.copy( - browseSortOrder = event.order.toBrowseSortOrder() - ) + is MainEvent.OnChangeBrowseSortOrder -> handleDatastoreUpdate( + key = DataStoreConstants.BROWSE_SORT_ORDER, + value = event.value, + updateState = { + it.copy(browseSortOrder = toBrowseSortOrder()) } - } - } + ) - is MainEvent.OnChangeBrowseSortOrderDescending -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.BROWSE_SORT_ORDER_DESCENDING, - event.bool - ) - updateStateWithSavedHandle { - it.copy( - browseSortOrderDescending = event.bool - ) + is MainEvent.OnChangeBrowseSortOrderDescending -> handleDatastoreUpdate( + key = DataStoreConstants.BROWSE_SORT_ORDER_DESCENDING, + value = event.value, + updateState = { + it.copy(browseSortOrderDescending = this) } - } - } + ) - is MainEvent.OnChangeBrowseIncludedFilterItem -> { - viewModelScope.launch(Dispatchers.IO) { - val set = _state.value.browseIncludedFilterItems.toMutableSet() - if (!set.add(event.item)) { - set.remove(event.item) - } + is MainEvent.OnChangeBrowseIncludedFilterItem -> handleBrowseIncludedFilterItemUpdate( + event.value + ) - setDatastore.execute(DataStoreConstants.BROWSE_INCLUDED_FILTER_ITEMS, set) - updateStateWithSavedHandle { - it.copy( - browseIncludedFilterItems = set.toList() - ) + is MainEvent.OnChangeTextAlignment -> handleDatastoreUpdate( + key = DataStoreConstants.TEXT_ALIGNMENT, + value = event.value, + updateState = { + it.copy(textAlignment = toTextAlignment()) } - } - } + ) - is MainEvent.OnChangeTextAlignment -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.TEXT_ALIGNMENT, - event.alignment - ) - updateStateWithSavedHandle { - it.copy( - textAlignment = event.alignment.toTextAlignment() - ) + is MainEvent.OnChangeDoublePressExit -> handleDatastoreUpdate( + key = DataStoreConstants.DOUBLE_PRESS_EXIT, + value = event.value, + updateState = { + it.copy(doublePressExit = this) } - } - } + ) - is MainEvent.OnChangeDoublePressExit -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.DOUBLE_PRESS_EXIT, - event.bool - ) - updateStateWithSavedHandle { - it.copy( - doublePressExit = event.bool - ) + is MainEvent.OnChangeLetterSpacing -> handleDatastoreUpdate( + key = DataStoreConstants.LETTER_SPACING, + value = event.value, + updateState = { + it.copy(letterSpacing = this) } - } - } + ) - is MainEvent.OnChangeLetterSpacing -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.LETTER_SPACING, - event.spacing - ) - updateStateWithSavedHandle { - it.copy( - letterSpacing = event.spacing - ) + is MainEvent.OnChangeAbsoluteDark -> handleDatastoreUpdate( + key = DataStoreConstants.ABSOLUTE_DARK, + value = event.value, + updateState = { + it.copy(absoluteDark = this) } - } - } + ) - is MainEvent.OnChangeAbsoluteDark -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.ABSOLUTE_DARK, - event.bool - ) - updateStateWithSavedHandle { - it.copy( - absoluteDark = event.bool - ) + is MainEvent.OnChangeCutoutPadding -> handleDatastoreUpdate( + key = DataStoreConstants.CUTOUT_PADDING, + value = event.value, + updateState = { + it.copy(cutoutPadding = this) } - } - } + ) - is MainEvent.OnChangeCutoutPadding -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.CUTOUT_PADDING, - event.bool - ) - updateStateWithSavedHandle { - it.copy( - cutoutPadding = event.bool - ) + is MainEvent.OnChangeFullscreen -> handleDatastoreUpdate( + key = DataStoreConstants.FULLSCREEN, + value = event.value, + updateState = { + it.copy(fullscreen = this) } - } - } + ) - is MainEvent.OnChangeFullscreen -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.FULLSCREEN, - event.bool - ) - updateStateWithSavedHandle { - it.copy( - fullscreen = event.bool - ) + is MainEvent.OnChangeKeepScreenOn -> handleDatastoreUpdate( + key = DataStoreConstants.KEEP_SCREEN_ON, + value = event.value, + updateState = { + it.copy(keepScreenOn = this) } - } - } + ) - is MainEvent.OnChangeKeepScreenOn -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.KEEP_SCREEN_ON, - event.bool - ) - updateStateWithSavedHandle { - it.copy( - keepScreenOn = event.bool - ) + is MainEvent.OnChangeVerticalPadding -> handleDatastoreUpdate( + key = DataStoreConstants.VERTICAL_PADDING, + value = event.value, + updateState = { + it.copy(verticalPadding = this) } - } - } + ) - is MainEvent.OnChangeVerticalPadding -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.VERTICAL_PADDING, - event.padding - ) - updateStateWithSavedHandle { - it.copy( - verticalPadding = event.padding - ) + is MainEvent.OnChangeHideBarsOnFastScroll -> handleDatastoreUpdate( + key = DataStoreConstants.HIDE_BARS_ON_FAST_SCROLL, + value = event.value, + updateState = { + it.copy(hideBarsOnFastScroll = this) } - } - } + ) - is MainEvent.OnChangeHideBarsOnFastScroll -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.HIDE_BARS_ON_FAST_SCROLL, - event.bool - ) - updateStateWithSavedHandle { - it.copy( - hideBarsOnFastScroll = event.bool - ) + is MainEvent.OnChangePerceptionExpander -> handleDatastoreUpdate( + key = DataStoreConstants.PERCEPTION_EXPANDER, + value = event.value, + updateState = { + it.copy(perceptionExpander = this) } - } - } + ) - is MainEvent.OnChangePerceptionExpander -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.PERCEPTION_EXPANDER, - event.bool - ) - updateStateWithSavedHandle { - it.copy( - perceptionExpander = event.bool - ) + is MainEvent.OnChangePerceptionExpanderPadding -> handleDatastoreUpdate( + key = DataStoreConstants.PERCEPTION_EXPANDER_PADDING, + value = event.value, + updateState = { + it.copy(perceptionExpanderPadding = this) } - } - } + ) - is MainEvent.OnChangePerceptionExpanderPadding -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.PERCEPTION_EXPANDER_PADDING, - event.padding - ) - updateStateWithSavedHandle { - it.copy( - perceptionExpanderPadding = event.padding - ) + is MainEvent.OnChangePerceptionExpanderThickness -> handleDatastoreUpdate( + key = DataStoreConstants.PERCEPTION_EXPANDER_THICKNESS, + value = event.value, + updateState = { + it.copy(perceptionExpanderThickness = this) } - } - } + ) - is MainEvent.OnChangePerceptionExpanderThickness -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.PERCEPTION_EXPANDER_THICKNESS, - event.thickness - ) - updateStateWithSavedHandle { - it.copy( - perceptionExpanderThickness = event.thickness - ) + is MainEvent.OnChangeCheckForTextUpdate -> handleDatastoreUpdate( + key = DataStoreConstants.CHECK_FOR_TEXT_UPDATE, + value = event.value, + updateState = { + it.copy(checkForTextUpdate = this) } - } - } + ) - is MainEvent.OnChangeCheckForTextUpdate -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.CHECK_FOR_TEXT_UPDATE, - event.bool - ) - updateStateWithSavedHandle { - it.copy( - checkForTextUpdate = event.bool - ) + is MainEvent.OnChangeCheckForTextUpdateToast -> handleDatastoreUpdate( + key = DataStoreConstants.CHECK_FOR_TEXT_UPDATE_TOAST, + value = event.value, + updateState = { + it.copy(checkForTextUpdateToast = this) } - } - } + ) - is MainEvent.OnChangeCheckForTextUpdateToast -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.CHECK_FOR_TEXT_UPDATE_TOAST, - event.bool - ) - updateStateWithSavedHandle { - it.copy( - checkForTextUpdateToast = event.bool - ) + is MainEvent.OnChangeScreenOrientation -> handleDatastoreUpdate( + key = DataStoreConstants.SCREEN_ORIENTATION, + value = event.value, + updateState = { + it.copy(screenOrientation = toReaderScreenOrientation()) } - } - } - - is MainEvent.OnChangeScreenOrientation -> { - viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute( - DataStoreConstants.SCREEN_ORIENTATION, - event.orientation - ) - updateStateWithSavedHandle { - it.copy( - screenOrientation = event.orientation.toReaderScreenOrientation() - ) - } - } + ) } } } @@ -565,6 +383,7 @@ class MainViewModel @Inject constructor( ) } } + /* - - - - - - - - - - - */ updateStateWithSavedHandle { settings } isSettingsReady.update { true } @@ -602,6 +421,29 @@ class MainViewModel @Inject constructor( } } + private suspend fun handleLanguageUpdate(value: String) { + withContext(Dispatchers.Main) { + changeLanguage.execute(value) + updateStateWithSavedHandle { + it.copy(language = value) + } + } + } + + private suspend fun handleBrowseIncludedFilterItemUpdate(value: String) { + val set = _state.value.browseIncludedFilterItems.toMutableSet() + if (!set.add(value)) { + set.remove(value) + } + handleDatastoreUpdate( + key = DataStoreConstants.BROWSE_INCLUDED_FILTER_ITEMS, + value = set, + updateState = { + it.copy(browseIncludedFilterItems = toList()) + } + ) + } + /** * Updates [MainState] along with [SavedStateHandle]. */ @@ -613,4 +455,20 @@ class MainViewModel @Inject constructor( function(it) } } + + /** + * Handles and updates Datastore. + */ + private suspend fun handleDatastoreUpdate( + key: Preferences.Key, + value: V, + updateState: V.(MainState) -> MainState + ) { + withContext(Dispatchers.IO) { + setDatastore.execute(key = key, value = value) + updateStateWithSavedHandle { + value.updateState(it) + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/BookInfoScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/BookInfoScreen.kt index 76d8a6c4..fcf8b19c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/BookInfoScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/BookInfoScreen.kt @@ -102,7 +102,7 @@ private fun BookInfoScreen(snackbarState: SnackbarHostState) { refreshing = state.value.updating || state.value.checkingForUpdate, onRefresh = { onEvent( - BookInfoEvent.OnCheckForUpdate( + BookInfoEvent.OnCheckForTextUpdate( snackbarState, context ) @@ -122,7 +122,7 @@ private fun BookInfoScreen(snackbarState: SnackbarHostState) { if (state.value.showMoveDialog) { BookInfoMoveDialog() } - if (state.value.showConfirmUpdateDialog) { + if (state.value.showConfirmTextUpdateDialog) { BookInfoConfirmUpdateDialog(snackbarHostState = snackbarState) } @@ -261,7 +261,7 @@ private fun BookInfoScreen(snackbarState: SnackbarHostState) { } if (!state.value.updating) { - onEvent(BookInfoEvent.OnCancelUpdate) + onEvent(BookInfoEvent.OnCancelTextUpdate) onNavigate { navigateBack() } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/components/BookInfoTopBar.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/components/BookInfoTopBar.kt index a836cb14..5d871ee2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/components/BookInfoTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/components/BookInfoTopBar.kt @@ -89,7 +89,7 @@ fun BookInfoTopBar( } } else { GoBackButton(onNavigate = onNavigate, enabled = !state.value.updating) { - onEvent(BookInfoEvent.OnCancelUpdate) + onEvent(BookInfoEvent.OnCancelTextUpdate) } } }, @@ -114,7 +114,7 @@ fun BookInfoTopBar( enabled = !state.value.updating && !state.value.checkingForUpdate ) { onEvent( - BookInfoEvent.OnCheckForUpdate( + BookInfoEvent.OnCheckForTextUpdate( snackbarState, context ) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/components/dialog/BookInfoConfirmUpdateDialog.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/components/dialog/BookInfoConfirmUpdateDialog.kt index e24b4d95..c5879d2c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/components/dialog/BookInfoConfirmUpdateDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/components/dialog/BookInfoConfirmUpdateDialog.kt @@ -36,10 +36,10 @@ fun BookInfoConfirmUpdateDialog(snackbarHostState: SnackbarHostState) { ), actionText = stringResource(id = R.string.confirm), isActionEnabled = true, - onDismiss = { onEvent(BookInfoEvent.OnDismissConfirmUpdateDialog) }, + onDismiss = { onEvent(BookInfoEvent.OnDismissConfirmTextUpdateDialog) }, onAction = { onEvent( - BookInfoEvent.OnConfirmUpdate( + BookInfoEvent.OnConfirmTextUpdate( snackbarState = snackbarHostState, context = context, refreshList = { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoEvent.kt index 50400528..9594f942 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoEvent.kt @@ -101,25 +101,25 @@ sealed class BookInfoEvent { val snackbarState: SnackbarHostState ) : BookInfoEvent() - data class OnCheckForUpdate( - val snackbarState: SnackbarHostState, - val context: Context - ) : BookInfoEvent() - data class OnNavigateToReaderScreen( val onNavigate: OnNavigate ) : BookInfoEvent() - data object OnDismissConfirmUpdateDialog : BookInfoEvent() + data class OnCheckForTextUpdate( + val snackbarState: SnackbarHostState, + val context: Context + ) : BookInfoEvent() - data class OnShowConfirmUpdateDialog( + data object OnDismissConfirmTextUpdateDialog : BookInfoEvent() + + data class OnShowConfirmTextUpdateDialog( val updatedText: List, val updatedChapters: List ) : BookInfoEvent() - data object OnCancelUpdate : BookInfoEvent() + data object OnCancelTextUpdate : BookInfoEvent() - data class OnConfirmUpdate( + data class OnConfirmTextUpdate( val snackbarState: SnackbarHostState, val context: Context, val refreshList: (Book) -> Unit diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoState.kt index 01014743..37bb27b7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoState.kt @@ -13,7 +13,7 @@ data class BookInfoState( val checkingForUpdate: Boolean = false, val updating: Boolean = false, - val showConfirmUpdateDialog: Boolean = false, + val showConfirmTextUpdateDialog: Boolean = false, val updatedText: List? = null, val updatedChapters: List? = null, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoViewModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoViewModel.kt index ad535e82..61920b8c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoViewModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/book_info/data/BookInfoViewModel.kt @@ -26,7 +26,7 @@ import ua.acclorite.book_story.domain.model.BookWithText import ua.acclorite.book_story.domain.model.Category import ua.acclorite.book_story.domain.model.History import ua.acclorite.book_story.domain.use_case.CanResetCover -import ua.acclorite.book_story.domain.use_case.CheckTextForUpdate +import ua.acclorite.book_story.domain.use_case.CheckForTextUpdate import ua.acclorite.book_story.domain.use_case.DeleteBooks import ua.acclorite.book_story.domain.use_case.GetBookById import ua.acclorite.book_story.domain.use_case.InsertHistory @@ -54,7 +54,7 @@ class BookInfoViewModel @Inject constructor( private val getBookById: GetBookById, private val canResetCover: CanResetCover, private val resetCoverImage: ResetCoverImage, - private val checkTextForUpdate: CheckTextForUpdate, + private val checkForTextUpdate: CheckForTextUpdate, ) : BaseViewModel() { private val _state = MutableStateFlow(BookInfoState()) @@ -450,12 +450,12 @@ class BookInfoViewModel @Inject constructor( } } - is BookInfoEvent.OnCheckForUpdate -> { + is BookInfoEvent.OnCheckForTextUpdate -> { updateJob?.cancel() updateJob = launch(Dispatchers.IO) { _state.update { it.copy( - showConfirmUpdateDialog = false, + showConfirmTextUpdateDialog = false, checkingForUpdate = true, editTitle = false, editAuthor = false, @@ -465,7 +465,7 @@ class BookInfoViewModel @Inject constructor( yield() - val result = checkTextForUpdate.execute(bookId = _state.value.book.id) + val result = checkForTextUpdate.execute(bookId = _state.value.book.id) when (result) { is Resource.Success -> { if (result.data == null) { @@ -486,7 +486,7 @@ class BookInfoViewModel @Inject constructor( return@launch } else { onEvent( - BookInfoEvent.OnShowConfirmUpdateDialog( + BookInfoEvent.OnShowConfirmTextUpdateDialog( updatedText = result.data.first, updatedChapters = result.data.second ) @@ -508,7 +508,7 @@ class BookInfoViewModel @Inject constructor( action = event.context.getString(R.string.retry), onAction = { onEvent( - BookInfoEvent.OnCheckForUpdate( + BookInfoEvent.OnCheckForTextUpdate( snackbarState = event.snackbarState, context = event.context ) @@ -531,32 +531,32 @@ class BookInfoViewModel @Inject constructor( } } - is BookInfoEvent.OnDismissConfirmUpdateDialog -> { + is BookInfoEvent.OnDismissConfirmTextUpdateDialog -> { _state.update { it.copy( - showConfirmUpdateDialog = false, + showConfirmTextUpdateDialog = false, updatedText = null, updatedChapters = null ) } } - is BookInfoEvent.OnShowConfirmUpdateDialog -> { + is BookInfoEvent.OnShowConfirmTextUpdateDialog -> { _state.update { it.copy( - showConfirmUpdateDialog = true, + showConfirmTextUpdateDialog = true, updatedText = event.updatedText, updatedChapters = event.updatedChapters ) } } - is BookInfoEvent.OnConfirmUpdate -> { + is BookInfoEvent.OnConfirmTextUpdate -> { launch(Dispatchers.IO) { _state.update { it.copy( updating = true, - showConfirmUpdateDialog = false + showConfirmTextUpdateDialog = false ) } @@ -569,7 +569,7 @@ class BookInfoViewModel @Inject constructor( action = event.context.getString(R.string.retry), onAction = { onEvent( - BookInfoEvent.OnCheckForUpdate( + BookInfoEvent.OnCheckForTextUpdate( snackbarState = event.snackbarState, context = event.context ) @@ -614,7 +614,7 @@ class BookInfoViewModel @Inject constructor( action = event.context.getString(R.string.retry), onAction = { onEvent( - BookInfoEvent.OnCheckForUpdate( + BookInfoEvent.OnCheckForTextUpdate( snackbarState = event.snackbarState, context = event.context ) @@ -646,7 +646,7 @@ class BookInfoViewModel @Inject constructor( action = event.context.getString(R.string.retry), onAction = { onEvent( - BookInfoEvent.OnCheckForUpdate( + BookInfoEvent.OnCheckForTextUpdate( snackbarState = event.snackbarState, context = event.context ) @@ -696,12 +696,12 @@ class BookInfoViewModel @Inject constructor( } } - is BookInfoEvent.OnCancelUpdate -> { + is BookInfoEvent.OnCancelTextUpdate -> { _state.update { updateJob?.cancel() it.copy( - showConfirmUpdateDialog = false, + showConfirmTextUpdateDialog = false, checkingForUpdate = false, updatedText = null, updatedChapters = null @@ -711,7 +711,7 @@ class BookInfoViewModel @Inject constructor( is BookInfoEvent.OnNavigateToReaderScreen -> { launch { - onEvent(BookInfoEvent.OnCancelUpdate) + onEvent(BookInfoEvent.OnCancelTextUpdate) _state.value.book.id.let { insertHistory.execute( History( @@ -757,7 +757,7 @@ class BookInfoViewModel @Inject constructor( if (screen.startUpdate) { onEvent( - BookInfoEvent.OnCheckForUpdate( + BookInfoEvent.OnCheckForTextUpdate( snackbarState = snackbarState, context = context ) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt index ae76a72e..1607e093 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt @@ -26,7 +26,7 @@ import kotlinx.coroutines.withContext import kotlinx.coroutines.yield import ua.acclorite.book_story.R import ua.acclorite.book_story.domain.model.Book -import ua.acclorite.book_story.domain.use_case.CheckTextForUpdate +import ua.acclorite.book_story.domain.use_case.CheckForTextUpdate import ua.acclorite.book_story.domain.use_case.GetBookById import ua.acclorite.book_story.domain.use_case.GetLatestHistory import ua.acclorite.book_story.domain.use_case.GetText @@ -47,7 +47,7 @@ class ReaderViewModel @Inject constructor( private val getText: GetText, private val getLatestHistory: GetLatestHistory, private val getBookById: GetBookById, - private val checkTextForUpdate: CheckTextForUpdate + private val checkForTextUpdate: CheckForTextUpdate ) : BaseViewModel() { private val _state = MutableStateFlow(ReaderState()) @@ -420,7 +420,7 @@ class ReaderViewModel @Inject constructor( yield() - val result = checkTextForUpdate.execute(bookId = _state.value.book.id) + val result = checkForTextUpdate.execute(bookId = _state.value.book.id) when (result) { is Resource.Success -> { if (result.data == null) { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/browse/data/BrowseFilesStructure.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/browse/data/BrowseFilesStructure.kt index 97c25012..cee79da9 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/browse/data/BrowseFilesStructure.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/browse/data/BrowseFilesStructure.kt @@ -7,6 +7,6 @@ enum class BrowseFilesStructure { ALL_FILES, DIRECTORIES } -fun String.toFilesStructure(): BrowseFilesStructure { +fun String.toBrowseFilesStructure(): BrowseFilesStructure { return BrowseFilesStructure.valueOf(this) } \ No newline at end of file