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.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import eu.kanade.presentation.components.AdaptiveSheet
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.ui.reader.chapter.ReaderChapterItem
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.source.isEhBasedManga
import kotlinx.collections.immutable.ImmutableList
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import tachiyomi.domain.chapter.model.Chapter
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.LocalDate
import java.time.ZoneId
@ -39,6 +46,8 @@ fun ChapterListDialog(
val manga by screenModel.mangaFlow.collectAsState()
val context = LocalContext.current
val state = rememberLazyListState(chapters.indexOfFirst { it.isCurrent }.coerceAtLeast(0))
val downloadManager: DownloadManager = remember { Injekt.get() }
val downloadQueueState by downloadManager.queueState.collectAsState()
AdaptiveSheet(
onDismissRequest = onDismissRequest,
@ -52,6 +61,28 @@ fun ChapterListDialog(
items = chapters,
key = { "chapter-${it.chapter.id}" },
) { 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(
title = chapterItem.chapter.name,
date = chapterItem.chapter.dateUpload
@ -76,8 +107,8 @@ fun ChapterListDialog(
bookmark = chapterItem.chapter.bookmark,
selected = false,
downloadIndicatorEnabled = false,
downloadStateProvider = { Download.State.NOT_DOWNLOADED },
downloadProgressProvider = { 0 },
downloadStateProvider = { downloadState },
downloadProgressProvider = { progress },
chapterSwipeStartAction = LibraryPreferences.ChapterSwipeAction.ToggleBookmark,
chapterSwipeEndAction = LibraryPreferences.ChapterSwipeAction.ToggleBookmark,
onLongClick = { /*TODO*/ },