Show download state and progress on reader chapter list. (#1263)

* Show download state and progress on reader chapter list.

* Update download indicator on progress and status change.
This commit is contained in:
NGB-Was-Taken 2024-10-15 01:59:58 +05:45 committed by GitHub
parent 943555c0af
commit 558ce084c8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -8,11 +8,13 @@ import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import eu.kanade.presentation.components.AdaptiveSheet import eu.kanade.presentation.components.AdaptiveSheet
import eu.kanade.presentation.manga.components.MangaChapterListItem import eu.kanade.presentation.manga.components.MangaChapterListItem
import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.ui.reader.chapter.ReaderChapterItem import eu.kanade.tachiyomi.ui.reader.chapter.ReaderChapterItem
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
@ -20,8 +22,13 @@ import eu.kanade.tachiyomi.util.lang.toRelativeString
import exh.metadata.MetadataUtil import exh.metadata.MetadataUtil
import exh.source.isEhBasedManga import exh.source.isEhBasedManga
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import tachiyomi.domain.chapter.model.Chapter import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.library.service.LibraryPreferences
import tachiyomi.source.local.isLocal
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.time.Instant import java.time.Instant
import java.time.LocalDate import java.time.LocalDate
import java.time.ZoneId import java.time.ZoneId
@ -39,6 +46,8 @@ fun ChapterListDialog(
val manga by screenModel.mangaFlow.collectAsState() val manga by screenModel.mangaFlow.collectAsState()
val context = LocalContext.current val context = LocalContext.current
val state = rememberLazyListState(chapters.indexOfFirst { it.isCurrent }.coerceAtLeast(0)) val state = rememberLazyListState(chapters.indexOfFirst { it.isCurrent }.coerceAtLeast(0))
val downloadManager: DownloadManager = remember { Injekt.get() }
val downloadQueueState by downloadManager.queueState.collectAsState()
AdaptiveSheet( AdaptiveSheet(
onDismissRequest = onDismissRequest, onDismissRequest = onDismissRequest,
@ -52,6 +61,28 @@ fun ChapterListDialog(
items = chapters, items = chapters,
key = { "chapter-${it.chapter.id}" }, key = { "chapter-${it.chapter.id}" },
) { chapterItem -> ) { chapterItem ->
val activeDownload = downloadQueueState.find { it.chapter.id == chapterItem.chapter.id }
val progress = activeDownload?.let {
downloadManager.progressFlow()
.filter { it.chapter.id == chapterItem.chapter.id }
.map { it.progress }
.collectAsState(0).value
} ?: 0
val downloaded = if (chapterItem.manga.isLocal()) {
true
} else {
downloadManager.isChapterDownloaded(
chapterItem.chapter.name,
chapterItem.chapter.scanlator,
chapterItem.manga.ogTitle,
chapterItem.manga.source,
)
}
val downloadState = when {
activeDownload != null -> activeDownload.status
downloaded -> Download.State.DOWNLOADED
else -> Download.State.NOT_DOWNLOADED
}
MangaChapterListItem( MangaChapterListItem(
title = chapterItem.chapter.name, title = chapterItem.chapter.name,
date = chapterItem.chapter.dateUpload date = chapterItem.chapter.dateUpload
@ -76,8 +107,8 @@ fun ChapterListDialog(
bookmark = chapterItem.chapter.bookmark, bookmark = chapterItem.chapter.bookmark,
selected = false, selected = false,
downloadIndicatorEnabled = false, downloadIndicatorEnabled = false,
downloadStateProvider = { Download.State.NOT_DOWNLOADED }, downloadStateProvider = { downloadState },
downloadProgressProvider = { 0 }, downloadProgressProvider = { progress },
chapterSwipeStartAction = LibraryPreferences.ChapterSwipeAction.ToggleBookmark, chapterSwipeStartAction = LibraryPreferences.ChapterSwipeAction.ToggleBookmark,
chapterSwipeEndAction = LibraryPreferences.ChapterSwipeAction.ToggleBookmark, chapterSwipeEndAction = LibraryPreferences.ChapterSwipeAction.ToggleBookmark,
onLongClick = { /*TODO*/ }, onLongClick = { /*TODO*/ },