From 6878ecac867ba134e433c5382e06ace69a33067c Mon Sep 17 00:00:00 2001 From: Acclorite <2ma0bhpk@anonaddy.com> Date: Sat, 28 Jun 2025 11:39:54 +0300 Subject: [PATCH] fix(reader): incorrect scroll position Resolves: #237 --- .../presentation/reader/ReaderModel.kt | 58 ++++++++++--------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderModel.kt index 534ebc8a..78018686 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderModel.kt @@ -493,36 +493,40 @@ class ReaderModel @Inject constructor( } @OptIn(FlowPreview::class) - fun updateProgress(listState: LazyListState) { - viewModelScope.launch(Dispatchers.Main) { - snapshotFlow { - listState.firstVisibleItemIndex to listState.firstVisibleItemScrollOffset - }.distinctUntilChanged().debounce(300).collectLatest { (index, offset) -> - val progress = calculateProgress(index) - if (progress == _state.value.book.progress) return@collectLatest - val (currentChapter, currentChapterProgress) = calculateCurrentChapter(index) + suspend fun updateProgress(listState: LazyListState) { + snapshotFlow { + listState.firstVisibleItemIndex to listState.firstVisibleItemScrollOffset + }.distinctUntilChanged().debounce(300).collectLatest { (index, offset) -> + if ( + _state.value.isLoading || + listState.layoutInfo.totalItemsCount == 0 || + _state.value.text.isEmpty() || + _state.value.errorMessage != null + ) return@collectLatest - Log.i( - READER, - "Changed progress|currentChapter: $progress; ${currentChapter?.title}" + val progress = calculateProgress(index) + val (currentChapter, currentChapterProgress) = calculateCurrentChapter(index) + + Log.i( + READER, + "Changed progress|currentChapter: $progress; ${currentChapter?.title}" + ) + _state.update { + it.copy( + book = it.book.copy( + progress = progress, + scrollIndex = index, + scrollOffset = offset + ), + currentChapter = currentChapter, + currentChapterProgress = currentChapterProgress ) - _state.update { - it.copy( - book = it.book.copy( - progress = progress, - scrollIndex = index, - scrollOffset = offset - ), - currentChapter = currentChapter, - currentChapterProgress = currentChapterProgress - ) - } - - updateBookUseCase(_state.value.book) - - LibraryScreen.refreshListChannel.trySend(0) - HistoryScreen.refreshListChannel.trySend(0) } + + updateBookUseCase(_state.value.book) + + LibraryScreen.refreshListChannel.trySend(0) + HistoryScreen.refreshListChannel.trySend(0) } }