diff --git a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutModel.kt index 9a6be206..e54a4bc0 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutModel.kt @@ -14,6 +14,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext +import kotlinx.coroutines.yield import ua.acclorite.book_story.R import ua.acclorite.book_story.domain.use_case.remote.CheckForUpdates import ua.acclorite.book_story.presentation.core.util.launchActivity @@ -114,6 +115,7 @@ class AboutModel @Inject constructor( private suspend inline fun MutableStateFlow.update(function: (T) -> T) { mutex.withLock { + yield() this.value = function(this.value) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoModel.kt index 036e3f79..5696142c 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoModel.kt @@ -810,11 +810,14 @@ class BookInfoModel @Inject constructor( viewModelScope.launch(Dispatchers.Main) { eventJob.cancel() eventJob = SupervisorJob() + + _state.update { BookInfoState() } } } private suspend inline fun MutableStateFlow.update(function: (T) -> T) { mutex.withLock { + yield() this.value = function(this.value) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseModel.kt index 4d4c5780..a4ef38f9 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/browse/BrowseModel.kt @@ -732,6 +732,7 @@ class BrowseModel @Inject constructor( private suspend inline fun MutableStateFlow.update(function: (T) -> T) { mutex.withLock { + yield() this.value = function(this.value) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryModel.kt index fac6a296..aae17dd6 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/history/HistoryModel.kt @@ -328,6 +328,7 @@ class HistoryModel @Inject constructor( private suspend inline fun MutableStateFlow.update(function: (T) -> T) { mutex.withLock { + yield() this.value = function(this.value) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryModel.kt index 3869a733..3aa08be8 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/library/LibraryModel.kt @@ -289,6 +289,7 @@ class LibraryModel @Inject constructor( private suspend inline fun MutableStateFlow.update(function: (T) -> T) { mutex.withLock { + yield() this.value = function(this.value) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt index 543c6f40..18266b8a 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt @@ -15,6 +15,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext +import kotlinx.coroutines.yield import ua.acclorite.book_story.domain.browse.toBrowseFilesStructure import ua.acclorite.book_story.domain.browse.toBrowseLayout import ua.acclorite.book_story.domain.browse.toBrowseSortOrder @@ -512,6 +513,7 @@ class MainModel @Inject constructor( private suspend inline fun MutableStateFlow.update(function: (T) -> T) { mutex.withLock { + yield() this.value = function(this.value) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderModel.kt index e2aaba77..e410948d 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderModel.kt @@ -72,6 +72,8 @@ class ReaderModel @Inject constructor( launch(Dispatchers.IO) { val text = getText.execute(_state.value.book.textPath) + yield() + if (text.isEmpty()) { _state.update { it.copy( @@ -81,15 +83,23 @@ class ReaderModel @Inject constructor( } } + yield() + + val lastOpened = getLatestHistory.execute(_state.value.book.id)?.time + + yield() + _state.update { it.copy( book = it.book.copy( - lastOpened = getLatestHistory.execute(_state.value.book.id)?.time + lastOpened = lastOpened ), text = text ) } + yield() + updateBook.execute(_state.value.book) LibraryScreen.refreshListChannel.trySend(0) @@ -680,11 +690,14 @@ class ReaderModel @Inject constructor( viewModelScope.launch(Dispatchers.Main) { eventJob.cancel() eventJob = SupervisorJob() + + _state.update { ReaderState() } } } private suspend inline fun MutableStateFlow.update(function: (T) -> T) { mutex.withLock { + yield() this.value = function(this.value) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsModel.kt index d9c6edc2..e374c925 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsModel.kt @@ -542,6 +542,7 @@ class SettingsModel @Inject constructor( private suspend inline fun MutableStateFlow.update(function: (T) -> T) { mutex.withLock { + yield() this.value = function(this.value) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/start/StartModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartModel.kt index 93d5e39c..72cdd837 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/start/StartModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartModel.kt @@ -189,6 +189,7 @@ class StartModel @Inject constructor( private suspend inline fun MutableStateFlow.update(function: (T) -> T) { mutex.withLock { + yield() this.value = function(this.value) } }