mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2025-12-11 07:12:03 +01:00
Start seperating current chapter from UI
This commit is contained in:
@@ -25,6 +25,7 @@ import androidx.compose.foundation.layout.fillMaxSize
|
|||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.layout.widthIn
|
||||||
import androidx.compose.material.Icon
|
import androidx.compose.material.Icon
|
||||||
import androidx.compose.material.IconButton
|
import androidx.compose.material.IconButton
|
||||||
import androidx.compose.material.ModalBottomSheetLayout
|
import androidx.compose.material.ModalBottomSheetLayout
|
||||||
@@ -64,6 +65,7 @@ import ca.gosyer.jui.ui.base.navigation.Toolbar
|
|||||||
import ca.gosyer.jui.ui.reader.model.Navigation
|
import ca.gosyer.jui.ui.reader.model.Navigation
|
||||||
import ca.gosyer.jui.ui.reader.model.PageMove
|
import ca.gosyer.jui.ui.reader.model.PageMove
|
||||||
import ca.gosyer.jui.ui.reader.model.ReaderChapter
|
import ca.gosyer.jui.ui.reader.model.ReaderChapter
|
||||||
|
import ca.gosyer.jui.ui.reader.model.ReaderItem
|
||||||
import ca.gosyer.jui.ui.reader.model.ReaderPage
|
import ca.gosyer.jui.ui.reader.model.ReaderPage
|
||||||
import ca.gosyer.jui.ui.reader.navigation.EdgeNavigation
|
import ca.gosyer.jui.ui.reader.navigation.EdgeNavigation
|
||||||
import ca.gosyer.jui.ui.reader.navigation.KindlishNavigation
|
import ca.gosyer.jui.ui.reader.navigation.KindlishNavigation
|
||||||
@@ -159,9 +161,7 @@ fun ReaderMenu(
|
|||||||
BoxWithConstraints {
|
BoxWithConstraints {
|
||||||
if (maxWidth > 720.dp) {
|
if (maxWidth > 720.dp) {
|
||||||
WideReaderMenu(
|
WideReaderMenu(
|
||||||
previousChapter = previousChapter,
|
|
||||||
chapter = chapter,
|
chapter = chapter,
|
||||||
nextChapter = nextChapter,
|
|
||||||
pages = pages,
|
pages = pages,
|
||||||
readerModes = readerModes,
|
readerModes = readerModes,
|
||||||
readerMode = readerMode,
|
readerMode = readerMode,
|
||||||
@@ -233,10 +233,8 @@ fun ReaderMenu(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun WideReaderMenu(
|
fun WideReaderMenu(
|
||||||
previousChapter: ReaderChapter?,
|
|
||||||
chapter: ReaderChapter,
|
chapter: ReaderChapter,
|
||||||
nextChapter: ReaderChapter?,
|
pages: ImmutableList<ReaderItem>,
|
||||||
pages: ImmutableList<ReaderPage>,
|
|
||||||
readerModes: ImmutableList<String>,
|
readerModes: ImmutableList<String>,
|
||||||
readerMode: String,
|
readerMode: String,
|
||||||
continuous: Boolean,
|
continuous: Boolean,
|
||||||
@@ -292,9 +290,6 @@ fun WideReaderMenu(
|
|||||||
Modifier.padding(start = sideMenuSize).fillMaxSize()
|
Modifier.padding(start = sideMenuSize).fillMaxSize()
|
||||||
) {
|
) {
|
||||||
ReaderLayout(
|
ReaderLayout(
|
||||||
previousChapter = previousChapter,
|
|
||||||
chapter = chapter,
|
|
||||||
nextChapter = nextChapter,
|
|
||||||
pages = pages,
|
pages = pages,
|
||||||
continuous = continuous,
|
continuous = continuous,
|
||||||
direction = direction,
|
direction = direction,
|
||||||
@@ -320,7 +315,7 @@ fun ThinReaderMenu(
|
|||||||
previousChapter: ReaderChapter?,
|
previousChapter: ReaderChapter?,
|
||||||
chapter: ReaderChapter,
|
chapter: ReaderChapter,
|
||||||
nextChapter: ReaderChapter?,
|
nextChapter: ReaderChapter?,
|
||||||
pages: ImmutableList<ReaderPage>,
|
pages: ImmutableList<ReaderItem>,
|
||||||
readerModes: ImmutableList<String>,
|
readerModes: ImmutableList<String>,
|
||||||
readerMode: String,
|
readerMode: String,
|
||||||
continuous: Boolean,
|
continuous: Boolean,
|
||||||
@@ -365,9 +360,6 @@ fun ThinReaderMenu(
|
|||||||
) {
|
) {
|
||||||
Box {
|
Box {
|
||||||
ReaderLayout(
|
ReaderLayout(
|
||||||
previousChapter = previousChapter,
|
|
||||||
chapter = chapter,
|
|
||||||
nextChapter = nextChapter,
|
|
||||||
pages = pages,
|
pages = pages,
|
||||||
continuous = continuous,
|
continuous = continuous,
|
||||||
direction = direction,
|
direction = direction,
|
||||||
@@ -427,10 +419,7 @@ fun ThinReaderMenu(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ReaderLayout(
|
fun ReaderLayout(
|
||||||
previousChapter: ReaderChapter?,
|
pages: ImmutableList<ReaderItem>,
|
||||||
chapter: ReaderChapter,
|
|
||||||
nextChapter: ReaderChapter?,
|
|
||||||
pages: ImmutableList<ReaderPage>,
|
|
||||||
continuous: Boolean,
|
continuous: Boolean,
|
||||||
direction: Direction,
|
direction: Direction,
|
||||||
padding: Int,
|
padding: Int,
|
||||||
@@ -464,9 +453,6 @@ fun ReaderLayout(
|
|||||||
padding = padding,
|
padding = padding,
|
||||||
currentPage = currentPage,
|
currentPage = currentPage,
|
||||||
currentPageOffset = currentPageOffset,
|
currentPageOffset = currentPageOffset,
|
||||||
previousChapter = previousChapter,
|
|
||||||
currentChapter = chapter,
|
|
||||||
nextChapter = nextChapter,
|
|
||||||
loadingModifier = loadingModifier,
|
loadingModifier = loadingModifier,
|
||||||
pageContentScale = if (fitSize) {
|
pageContentScale = if (fitSize) {
|
||||||
if (direction == Direction.Up || direction == Direction.Down) {
|
if (direction == Direction.Up || direction == Direction.Down) {
|
||||||
@@ -488,9 +474,6 @@ fun ReaderLayout(
|
|||||||
direction = direction,
|
direction = direction,
|
||||||
currentPage = currentPage,
|
currentPage = currentPage,
|
||||||
pages = pages,
|
pages = pages,
|
||||||
previousChapter = previousChapter,
|
|
||||||
currentChapter = chapter,
|
|
||||||
nextChapter = nextChapter,
|
|
||||||
loadingModifier = loadingModifier,
|
loadingModifier = loadingModifier,
|
||||||
pageContentScale = imageScale.toContentScale(),
|
pageContentScale = imageScale.toContentScale(),
|
||||||
pageEmitterHolder = pageEmitterHolder,
|
pageEmitterHolder = pageEmitterHolder,
|
||||||
|
|||||||
@@ -30,7 +30,9 @@ import ca.gosyer.jui.ui.reader.model.MoveTo
|
|||||||
import ca.gosyer.jui.ui.reader.model.Navigation
|
import ca.gosyer.jui.ui.reader.model.Navigation
|
||||||
import ca.gosyer.jui.ui.reader.model.PageMove
|
import ca.gosyer.jui.ui.reader.model.PageMove
|
||||||
import ca.gosyer.jui.ui.reader.model.ReaderChapter
|
import ca.gosyer.jui.ui.reader.model.ReaderChapter
|
||||||
|
import ca.gosyer.jui.ui.reader.model.ReaderItem
|
||||||
import ca.gosyer.jui.ui.reader.model.ReaderPage
|
import ca.gosyer.jui.ui.reader.model.ReaderPage
|
||||||
|
import ca.gosyer.jui.ui.reader.model.ReaderPageSeparator
|
||||||
import ca.gosyer.jui.ui.reader.model.ViewerChapters
|
import ca.gosyer.jui.ui.reader.model.ViewerChapters
|
||||||
import ca.gosyer.jui.uicore.prefs.asStateIn
|
import ca.gosyer.jui.uicore.prefs.asStateIn
|
||||||
import ca.gosyer.jui.uicore.vm.ContextWrapper
|
import ca.gosyer.jui.uicore.vm.ContextWrapper
|
||||||
@@ -89,7 +91,7 @@ class ReaderMenuViewModel @Inject constructor(
|
|||||||
private val _state = MutableStateFlow<ReaderChapter.State>(ReaderChapter.State.Wait)
|
private val _state = MutableStateFlow<ReaderChapter.State>(ReaderChapter.State.Wait)
|
||||||
val state = _state.asStateFlow()
|
val state = _state.asStateFlow()
|
||||||
|
|
||||||
private val _pages = MutableStateFlow<ImmutableList<ReaderPage>>(persistentListOf())
|
private val _pages = MutableStateFlow<ImmutableList<ReaderItem>>(persistentListOf())
|
||||||
val pages = _pages.asStateFlow()
|
val pages = _pages.asStateFlow()
|
||||||
|
|
||||||
private val _currentPage = MutableStateFlow(1)
|
private val _currentPage = MutableStateFlow(1)
|
||||||
@@ -251,7 +253,7 @@ class ReaderMenuViewModel @Inject constructor(
|
|||||||
)
|
)
|
||||||
val pages = loader.loadChapter(chapter)
|
val pages = loader.loadChapter(chapter)
|
||||||
viewerChapters.currChapter.value = chapter
|
viewerChapters.currChapter.value = chapter
|
||||||
scope.launchDefault {
|
|
||||||
val chapters = getChapters.asFlow(mangaId)
|
val chapters = getChapters.asFlow(mangaId)
|
||||||
.catch {
|
.catch {
|
||||||
log.warn(it) { "Error getting chapter list" }
|
log.warn(it) { "Error getting chapter list" }
|
||||||
@@ -272,7 +274,7 @@ class ReaderMenuViewModel @Inject constructor(
|
|||||||
prevChapter
|
prevChapter
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
val lastPageRead = chapter.chapter.lastPageRead
|
val lastPageRead = chapter.chapter.lastPageRead
|
||||||
if (lastPageRead != 0) {
|
if (lastPageRead != 0) {
|
||||||
_currentPage.value = lastPageRead.coerceAtMost(chapter.chapter.pageCount!!)
|
_currentPage.value = lastPageRead.coerceAtMost(chapter.chapter.pageCount!!)
|
||||||
@@ -291,14 +293,16 @@ class ReaderMenuViewModel @Inject constructor(
|
|||||||
pages
|
pages
|
||||||
.filterIsInstance<PagesState.Success>()
|
.filterIsInstance<PagesState.Success>()
|
||||||
.onEach { (pageList) ->
|
.onEach { (pageList) ->
|
||||||
_pages.value = pageList.toImmutableList()
|
val prevSeparator = ReaderPageSeparator(viewerChapters.prevChapter.value, chapter)
|
||||||
|
val nextSeparator = ReaderPageSeparator(chapter, viewerChapters.nextChapter.value)
|
||||||
|
_pages.value = (_pages.value.ifEmpty { listOf(prevSeparator) } + pageList + nextSeparator).toImmutableList()
|
||||||
pageList.getOrNull(_currentPage.value - 1)?.let { chapter.pageLoader?.loadPage(it) }
|
pageList.getOrNull(_currentPage.value - 1)?.let { chapter.pageLoader?.loadPage(it) }
|
||||||
}
|
}
|
||||||
.launchIn(chapter.scope)
|
.launchIn(chapter.scope)
|
||||||
|
|
||||||
_currentPage
|
_currentPage
|
||||||
.onEach { index ->
|
.onEach { index ->
|
||||||
_pages.value.getOrNull(_currentPage.value - 1)?.let { chapter.pageLoader?.loadPage(it) }
|
(_pages.value.getOrNull(_currentPage.value - 1) as? ReaderPage)?.let { chapter.pageLoader?.loadPage(it) }
|
||||||
if (index == _pages.value.size) {
|
if (index == _pages.value.size) {
|
||||||
markChapterRead(chapter)
|
markChapterRead(chapter)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ data class ReaderPage(
|
|||||||
val status: MutableStateFlow<Status>,
|
val status: MutableStateFlow<Status>,
|
||||||
val error: MutableStateFlow<String?>,
|
val error: MutableStateFlow<String?>,
|
||||||
val chapter: ReaderChapter
|
val chapter: ReaderChapter
|
||||||
) {
|
) : ReaderItem() {
|
||||||
enum class Status {
|
enum class Status {
|
||||||
QUEUE,
|
QUEUE,
|
||||||
WORKING,
|
WORKING,
|
||||||
|
|||||||
@@ -37,8 +37,9 @@ import ca.gosyer.jui.ui.reader.ChapterSeparator
|
|||||||
import ca.gosyer.jui.ui.reader.ReaderImage
|
import ca.gosyer.jui.ui.reader.ReaderImage
|
||||||
import ca.gosyer.jui.ui.reader.model.MoveTo
|
import ca.gosyer.jui.ui.reader.model.MoveTo
|
||||||
import ca.gosyer.jui.ui.reader.model.PageMove
|
import ca.gosyer.jui.ui.reader.model.PageMove
|
||||||
import ca.gosyer.jui.ui.reader.model.ReaderChapter
|
import ca.gosyer.jui.ui.reader.model.ReaderItem
|
||||||
import ca.gosyer.jui.ui.reader.model.ReaderPage
|
import ca.gosyer.jui.ui.reader.model.ReaderPage
|
||||||
|
import ca.gosyer.jui.ui.reader.model.ReaderPageSeparator
|
||||||
import ca.gosyer.jui.uicore.components.HorizontalScrollbar
|
import ca.gosyer.jui.uicore.components.HorizontalScrollbar
|
||||||
import ca.gosyer.jui.uicore.components.VerticalScrollbar
|
import ca.gosyer.jui.uicore.components.VerticalScrollbar
|
||||||
import ca.gosyer.jui.uicore.components.rememberScrollbarAdapter
|
import ca.gosyer.jui.uicore.components.rememberScrollbarAdapter
|
||||||
@@ -52,15 +53,12 @@ import kotlinx.coroutines.flow.mapLatest
|
|||||||
@Composable
|
@Composable
|
||||||
fun ContinuousReader(
|
fun ContinuousReader(
|
||||||
modifier: Modifier,
|
modifier: Modifier,
|
||||||
pages: ImmutableList<ReaderPage>,
|
pages: ImmutableList<ReaderItem>,
|
||||||
direction: Direction,
|
direction: Direction,
|
||||||
maxSize: Int,
|
maxSize: Int,
|
||||||
padding: Int,
|
padding: Int,
|
||||||
currentPage: Int,
|
currentPage: Int,
|
||||||
currentPageOffset: Int,
|
currentPageOffset: Int,
|
||||||
previousChapter: ReaderChapter?,
|
|
||||||
currentChapter: ReaderChapter,
|
|
||||||
nextChapter: ReaderChapter?,
|
|
||||||
loadingModifier: Modifier,
|
loadingModifier: Modifier,
|
||||||
pageContentScale: ContentScale,
|
pageContentScale: ContentScale,
|
||||||
pageEmitterHolder: StableHolder<SharedFlow<PageMove>>,
|
pageEmitterHolder: StableHolder<SharedFlow<PageMove>>,
|
||||||
@@ -123,7 +121,7 @@ fun ContinuousReader(
|
|||||||
Direction.Up -> PaddingValues(top = padding.dp)
|
Direction.Up -> PaddingValues(top = padding.dp)
|
||||||
Direction.Down -> PaddingValues(bottom = padding.dp)
|
Direction.Down -> PaddingValues(bottom = padding.dp)
|
||||||
}
|
}
|
||||||
fun retry(index: Int) { pages.find { it.index == index }?.let { retry(it) } }
|
fun retry(index: Int) { pages.find { it is ReaderPage && it.index == index }?.let { retry(it as ReaderPage) } }
|
||||||
|
|
||||||
when (direction) {
|
when (direction) {
|
||||||
Direction.Down, Direction.Up -> {
|
Direction.Down, Direction.Up -> {
|
||||||
@@ -137,9 +135,6 @@ fun ContinuousReader(
|
|||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
.padding(contentPadding),
|
.padding(contentPadding),
|
||||||
pages = pages,
|
pages = pages,
|
||||||
previousChapter = previousChapter,
|
|
||||||
currentChapter = currentChapter,
|
|
||||||
nextChapter = nextChapter,
|
|
||||||
imageModifier = imageModifier,
|
imageModifier = imageModifier,
|
||||||
loadingModifier = loadingModifier,
|
loadingModifier = loadingModifier,
|
||||||
pageContentScale = pageContentScale,
|
pageContentScale = pageContentScale,
|
||||||
@@ -165,9 +160,6 @@ fun ContinuousReader(
|
|||||||
modifier = Modifier.fillMaxHeight()
|
modifier = Modifier.fillMaxHeight()
|
||||||
.padding(contentPadding),
|
.padding(contentPadding),
|
||||||
pages = pages,
|
pages = pages,
|
||||||
previousChapter = previousChapter,
|
|
||||||
currentChapter = currentChapter,
|
|
||||||
nextChapter = nextChapter,
|
|
||||||
imageModifier = imageModifier,
|
imageModifier = imageModifier,
|
||||||
loadingModifier = loadingModifier,
|
loadingModifier = loadingModifier,
|
||||||
pageContentScale = pageContentScale,
|
pageContentScale = pageContentScale,
|
||||||
@@ -187,20 +179,23 @@ fun ContinuousReader(
|
|||||||
|
|
||||||
private fun LazyListScope.items(
|
private fun LazyListScope.items(
|
||||||
modifier: Modifier,
|
modifier: Modifier,
|
||||||
pages: ImmutableList<ReaderPage>,
|
pages: ImmutableList<ReaderItem>,
|
||||||
previousChapter: ReaderChapter?,
|
|
||||||
currentChapter: ReaderChapter,
|
|
||||||
nextChapter: ReaderChapter?,
|
|
||||||
imageModifier: Modifier,
|
imageModifier: Modifier,
|
||||||
loadingModifier: Modifier,
|
loadingModifier: Modifier,
|
||||||
pageContentScale: ContentScale,
|
pageContentScale: ContentScale,
|
||||||
retry: (Int) -> Unit
|
retry: (Int) -> Unit
|
||||||
) {
|
) {
|
||||||
item {
|
items(
|
||||||
ChapterSeparator(previousChapter, currentChapter)
|
pages,
|
||||||
|
key = {
|
||||||
|
when (it) {
|
||||||
|
is ReaderPage -> it.chapter.chapter.index to it.index
|
||||||
|
is ReaderPageSeparator -> it.previousChapter?.chapter?.index to it.nextChapter?.chapter?.index
|
||||||
}
|
}
|
||||||
items(pages) { image ->
|
}
|
||||||
Box(modifier, contentAlignment = Alignment.Center) {
|
) { image ->
|
||||||
|
when (image) {
|
||||||
|
is ReaderPage -> Box(modifier, contentAlignment = Alignment.Center) {
|
||||||
ReaderImage(
|
ReaderImage(
|
||||||
imageIndex = image.index,
|
imageIndex = image.index,
|
||||||
drawableHolder = image.bitmap.collectAsState().value,
|
drawableHolder = image.bitmap.collectAsState().value,
|
||||||
@@ -213,8 +208,7 @@ private fun LazyListScope.items(
|
|||||||
retry = retry
|
retry = retry
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
is ReaderPageSeparator -> ChapterSeparator(previousChapter = image.previousChapter, nextChapter = image.nextChapter)
|
||||||
}
|
}
|
||||||
item {
|
|
||||||
ChapterSeparator(previousChapter = currentChapter, nextChapter = nextChapter)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,9 @@ import ca.gosyer.jui.ui.reader.ChapterSeparator
|
|||||||
import ca.gosyer.jui.ui.reader.ReaderImage
|
import ca.gosyer.jui.ui.reader.ReaderImage
|
||||||
import ca.gosyer.jui.ui.reader.model.MoveTo
|
import ca.gosyer.jui.ui.reader.model.MoveTo
|
||||||
import ca.gosyer.jui.ui.reader.model.PageMove
|
import ca.gosyer.jui.ui.reader.model.PageMove
|
||||||
import ca.gosyer.jui.ui.reader.model.ReaderChapter
|
import ca.gosyer.jui.ui.reader.model.ReaderItem
|
||||||
import ca.gosyer.jui.ui.reader.model.ReaderPage
|
import ca.gosyer.jui.ui.reader.model.ReaderPage
|
||||||
|
import ca.gosyer.jui.ui.reader.model.ReaderPageSeparator
|
||||||
import com.google.accompanist.pager.HorizontalPager
|
import com.google.accompanist.pager.HorizontalPager
|
||||||
import com.google.accompanist.pager.VerticalPager
|
import com.google.accompanist.pager.VerticalPager
|
||||||
import com.google.accompanist.pager.rememberPagerState
|
import com.google.accompanist.pager.rememberPagerState
|
||||||
@@ -33,10 +34,7 @@ fun PagerReader(
|
|||||||
parentModifier: Modifier,
|
parentModifier: Modifier,
|
||||||
direction: Direction,
|
direction: Direction,
|
||||||
currentPage: Int,
|
currentPage: Int,
|
||||||
pages: ImmutableList<ReaderPage>,
|
pages: ImmutableList<ReaderItem>,
|
||||||
previousChapter: ReaderChapter?,
|
|
||||||
currentChapter: ReaderChapter,
|
|
||||||
nextChapter: ReaderChapter?,
|
|
||||||
loadingModifier: Modifier,
|
loadingModifier: Modifier,
|
||||||
pageContentScale: ContentScale,
|
pageContentScale: ContentScale,
|
||||||
pageEmitterHolder: StableHolder<SharedFlow<PageMove>>,
|
pageEmitterHolder: StableHolder<SharedFlow<PageMove>>,
|
||||||
@@ -77,11 +75,11 @@ fun PagerReader(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
val modifier = parentModifier then Modifier.fillMaxSize()
|
val modifier = parentModifier then Modifier.fillMaxSize()
|
||||||
fun retry(index: Int) { pages.find { it.index == index }?.let { retry(it) } }
|
fun retry(index: Int) { pages.find { it is ReaderPage && it.index == index }?.let { retry(it as ReaderPage) } }
|
||||||
|
|
||||||
if (direction == Direction.Down || direction == Direction.Up) {
|
if (direction == Direction.Down || direction == Direction.Up) {
|
||||||
VerticalPager(
|
VerticalPager(
|
||||||
count = pages.size + 2,
|
count = pages.size,
|
||||||
state = state,
|
state = state,
|
||||||
reverseLayout = direction == Direction.Up,
|
reverseLayout = direction == Direction.Up,
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
@@ -89,9 +87,6 @@ fun PagerReader(
|
|||||||
HandlePager(
|
HandlePager(
|
||||||
pages = pages,
|
pages = pages,
|
||||||
page = it,
|
page = it,
|
||||||
previousChapter = previousChapter,
|
|
||||||
currentChapter = currentChapter,
|
|
||||||
nextChapter = nextChapter,
|
|
||||||
loadingModifier = loadingModifier,
|
loadingModifier = loadingModifier,
|
||||||
pageContentScale = pageContentScale,
|
pageContentScale = pageContentScale,
|
||||||
retry = ::retry
|
retry = ::retry
|
||||||
@@ -99,7 +94,7 @@ fun PagerReader(
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
HorizontalPager(
|
HorizontalPager(
|
||||||
count = pages.size + 2,
|
count = pages.size,
|
||||||
state = state,
|
state = state,
|
||||||
reverseLayout = direction == Direction.Left,
|
reverseLayout = direction == Direction.Left,
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
@@ -107,9 +102,6 @@ fun PagerReader(
|
|||||||
HandlePager(
|
HandlePager(
|
||||||
pages = pages,
|
pages = pages,
|
||||||
page = it,
|
page = it,
|
||||||
previousChapter = previousChapter,
|
|
||||||
currentChapter = currentChapter,
|
|
||||||
nextChapter = nextChapter,
|
|
||||||
loadingModifier = loadingModifier,
|
loadingModifier = loadingModifier,
|
||||||
pageContentScale = pageContentScale,
|
pageContentScale = pageContentScale,
|
||||||
retry = ::retry
|
retry = ::retry
|
||||||
@@ -120,20 +112,14 @@ fun PagerReader(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun HandlePager(
|
fun HandlePager(
|
||||||
pages: ImmutableList<ReaderPage>,
|
pages: ImmutableList<ReaderItem>,
|
||||||
page: Int,
|
page: Int,
|
||||||
previousChapter: ReaderChapter?,
|
|
||||||
currentChapter: ReaderChapter,
|
|
||||||
nextChapter: ReaderChapter?,
|
|
||||||
loadingModifier: Modifier,
|
loadingModifier: Modifier,
|
||||||
pageContentScale: ContentScale,
|
pageContentScale: ContentScale,
|
||||||
retry: (Int) -> Unit
|
retry: (Int) -> Unit
|
||||||
) {
|
) {
|
||||||
when (page) {
|
when (val image = pages[page]) {
|
||||||
0 -> ChapterSeparator(previousChapter, currentChapter)
|
is ReaderPage -> {
|
||||||
pages.size + 1 -> ChapterSeparator(currentChapter, nextChapter)
|
|
||||||
else -> {
|
|
||||||
val image = pages[page - 1]
|
|
||||||
ReaderImage(
|
ReaderImage(
|
||||||
imageIndex = image.index,
|
imageIndex = image.index,
|
||||||
drawableHolder = image.bitmap.collectAsState().value,
|
drawableHolder = image.bitmap.collectAsState().value,
|
||||||
@@ -145,5 +131,6 @@ fun HandlePager(
|
|||||||
contentScale = pageContentScale
|
contentScale = pageContentScale
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
is ReaderPageSeparator -> ChapterSeparator(image.previousChapter, image.nextChapter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user