From d8100ee3092f77e5ee57e0c9a0aa946389b9dd29 Mon Sep 17 00:00:00 2001 From: Syer10 Date: Tue, 15 Nov 2022 21:44:33 -0500 Subject: [PATCH] Fix reader race conditions and loading page height --- .../kotlin/ca/gosyer/jui/ui/reader/ReaderMenu.kt | 14 ++++++++------ .../jui/ui/reader/loader/TachideskPageLoader.kt | 1 + .../ca/gosyer/jui/ui/reader/model/ReaderPage.kt | 1 + 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderMenu.kt b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderMenu.kt index 3f050765..9410079a 100644 --- a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderMenu.kt +++ b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/ReaderMenu.kt @@ -446,7 +446,9 @@ fun ReaderLayout( progress: (Int) -> Unit, updateLastPageReadOffset: (Int) -> Unit ) { - val loadingModifier = Modifier.fillMaxWidth().aspectRatio(mangaAspectRatio) + val loadingModifier = Modifier.widthIn(max = 700.dp) + .fillMaxWidth() + .aspectRatio(mangaAspectRatio) val readerModifier = Modifier .navigationClickable( navigation = navigationViewer, @@ -524,11 +526,11 @@ fun ReaderImage( retry: (Int) -> Unit ) { Crossfade(drawableHolder to status) { (drawableHolder, status) -> - val drawableCallback = drawableHolder.item - val decodeState = produceState(null, drawableCallback) { - if (drawableCallback != null) { + val decodeState = produceState(null, drawableHolder) { + val callback = drawableHolder.item + if (callback != null) { withIOContext { - value = drawableCallback() + value = callback() } } } @@ -543,7 +545,7 @@ fun ReaderImage( ) } else { LoadingScreen( - status == ReaderPage.Status.QUEUE, + status == ReaderPage.Status.QUEUE || status == ReaderPage.Status.WORKING, loadingModifier, progress, error ?: when (decode) { diff --git a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/loader/TachideskPageLoader.kt b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/loader/TachideskPageLoader.kt index a92e8d7e..d669c059 100644 --- a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/loader/TachideskPageLoader.kt +++ b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/loader/TachideskPageLoader.kt @@ -80,6 +80,7 @@ class TachideskPageLoader( val page = priorityPage.page log.debug { "Loading page ${page.index}" } if (page.status.value == ReaderPage.Status.QUEUE) { + page.status.value = ReaderPage.Status.WORKING getChapterPage.asFlow(chapter.chapter, page.index) { onDownload { bytesSentTotal, contentLength -> page.progress.value = (bytesSentTotal.toFloat() / contentLength).coerceAtMost(1.0F) diff --git a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/model/ReaderPage.kt b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/model/ReaderPage.kt index 42e1723d..071b5c55 100644 --- a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/model/ReaderPage.kt +++ b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/reader/model/ReaderPage.kt @@ -22,6 +22,7 @@ data class ReaderPage( ) { enum class Status { QUEUE, + WORKING, READY, ERROR }