Adjust manga FAB to only say "Start" if there's no unread chapters in unfiltered list

Closes #9479
This commit is contained in:
arkon 2023-07-07 17:57:29 -04:00
parent 53c6230afe
commit cf3f2d0380
2 changed files with 10 additions and 9 deletions

View file

@ -258,7 +258,7 @@ private fun MangaScreenSmallImpl(
) { ) {
val chapterListState = rememberLazyListState() val chapterListState = rememberLazyListState()
val chapters = remember(state) { state.processedChapters.toList() } val chapters = remember(state) { state.processedChapters }
val internalOnBackPressed = { val internalOnBackPressed = {
if (chapters.fastAny { it.selected }) { if (chapters.fastAny { it.selected }) {
@ -320,7 +320,7 @@ private fun MangaScreenSmallImpl(
) { ) {
ExtendedFloatingActionButton( ExtendedFloatingActionButton(
text = { text = {
val id = if (chapters.fastAny { it.chapter.read }) { val id = if (state.chapters.fastAny { it.chapter.read }) {
R.string.action_resume R.string.action_resume
} else { } else {
R.string.action_start R.string.action_start
@ -485,7 +485,7 @@ fun MangaScreenLargeImpl(
val layoutDirection = LocalLayoutDirection.current val layoutDirection = LocalLayoutDirection.current
val density = LocalDensity.current val density = LocalDensity.current
val chapters = remember(state) { state.processedChapters.toList() } val chapters = remember(state) { state.processedChapters }
val insetPadding = WindowInsets.systemBars.only(WindowInsetsSides.Horizontal).asPaddingValues() val insetPadding = WindowInsets.systemBars.only(WindowInsetsSides.Horizontal).asPaddingValues()
var topBarHeight by remember { mutableIntStateOf(0) } var topBarHeight by remember { mutableIntStateOf(0) }
@ -555,7 +555,7 @@ fun MangaScreenLargeImpl(
) { ) {
ExtendedFloatingActionButton( ExtendedFloatingActionButton(
text = { text = {
val id = if (chapters.fastAny { it.chapter.read }) { val id = if (state.chapters.fastAny { it.chapter.read }) {
R.string.action_resume R.string.action_resume
} else { } else {
R.string.action_start R.string.action_start

View file

@ -119,7 +119,7 @@ class MangaInfoScreenModel(
private val allChapters: List<ChapterItem>? private val allChapters: List<ChapterItem>?
get() = successState?.chapters get() = successState?.chapters
private val filteredChapters: Sequence<ChapterItem>? private val filteredChapters: List<ChapterItem>?
get() = successState?.processedChapters get() = successState?.processedChapters
val chapterSwipeEndAction = libraryPreferences.swipeEndAction().get() val chapterSwipeEndAction = libraryPreferences.swipeEndAction().get()
@ -576,7 +576,7 @@ class MangaInfoScreenModel(
} }
private fun getUnreadChapters(): List<Chapter> { private fun getUnreadChapters(): List<Chapter> {
val chapterItems = if (skipFiltered) filteredChapters.orEmpty().toList() else allChapters.orEmpty() val chapterItems = if (skipFiltered) filteredChapters.orEmpty() else allChapters.orEmpty()
return chapterItems return chapterItems
.filter { (chapter, dlStatus) -> !chapter.read && dlStatus == Download.State.NOT_DOWNLOADED } .filter { (chapter, dlStatus) -> !chapter.read && dlStatus == Download.State.NOT_DOWNLOADED }
.map { it.chapter } .map { it.chapter }
@ -664,7 +664,7 @@ class MangaInfoScreenModel(
fun markPreviousChapterRead(pointer: Chapter) { fun markPreviousChapterRead(pointer: Chapter) {
val successState = successState ?: return val successState = successState ?: return
val chapters = filteredChapters.orEmpty().map { it.chapter }.toList() val chapters = filteredChapters.orEmpty().map { it.chapter }
val prevChapters = if (successState.manga.sortDescending()) chapters.asReversed() else chapters val prevChapters = if (successState.manga.sortDescending()) chapters.asReversed() else chapters
val pointerPos = prevChapters.indexOf(pointer) val pointerPos = prevChapters.indexOf(pointer)
if (pointerPos != -1) markChaptersRead(prevChapters.take(pointerPos), true) if (pointerPos != -1) markChaptersRead(prevChapters.take(pointerPos), true)
@ -987,8 +987,9 @@ sealed class MangaScreenState {
val hasPromptedToAddBefore: Boolean = false, val hasPromptedToAddBefore: Boolean = false,
) : MangaScreenState() { ) : MangaScreenState() {
val processedChapters: Sequence<ChapterItem> val processedChapters by lazy {
get() = chapters.applyFilters(manga) chapters.applyFilters(manga).toList()
}
val trackingAvailable: Boolean val trackingAvailable: Boolean
get() = trackItems.isNotEmpty() get() = trackItems.isNotEmpty()