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:
parent
943555c0af
commit
558ce084c8
@ -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*/ },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user