From 211e45058be05e7e9a44cd92f14d08b632942821 Mon Sep 17 00:00:00 2001 From: Acclorite <140836141+Acclorite@users.noreply.github.com> Date: Sun, 29 Dec 2024 12:24:23 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20Fix=20issue=20with=20sc?= =?UTF-8?q?reen=20reset=20&=20cancellation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acclorite/book_story/ui/about/AboutModel.kt | 2 ++ .../book_story/ui/book_info/BookInfoModel.kt | 3 +++ .../acclorite/book_story/ui/browse/BrowseModel.kt | 1 + .../book_story/ui/history/HistoryModel.kt | 1 + .../book_story/ui/library/LibraryModel.kt | 1 + .../ua/acclorite/book_story/ui/main/MainModel.kt | 2 ++ .../acclorite/book_story/ui/reader/ReaderModel.kt | 15 ++++++++++++++- .../book_story/ui/settings/SettingsModel.kt | 1 + .../acclorite/book_story/ui/start/StartModel.kt | 1 + 9 files changed, 26 insertions(+), 1 deletion(-) 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) } }