|
@@ -83,8 +83,8 @@ class MangaInfoScreenModel(
|
|
|
private val isFromSource: Boolean,
|
|
|
private val downloadPreferences: DownloadPreferences = Injekt.get(),
|
|
|
private val libraryPreferences: LibraryPreferences = Injekt.get(),
|
|
|
- private val readerPreferences: ReaderPreferences = Injekt.get(),
|
|
|
- private val uiPreferences: UiPreferences = Injekt.get(),
|
|
|
+ readerPreferences: ReaderPreferences = Injekt.get(),
|
|
|
+ uiPreferences: UiPreferences = Injekt.get(),
|
|
|
private val trackManager: TrackManager = Injekt.get(),
|
|
|
private val downloadManager: DownloadManager = Injekt.get(),
|
|
|
private val downloadCache: DownloadCache = Injekt.get(),
|
|
@@ -123,8 +123,8 @@ class MangaInfoScreenModel(
|
|
|
get() = successState?.processedChapters
|
|
|
|
|
|
val relativeTime by uiPreferences.relativeTime().asState(coroutineScope)
|
|
|
- val skipFiltered by readerPreferences.skipFiltered().asState(coroutineScope)
|
|
|
val dateFormat by mutableStateOf(UiPreferences.dateFormat(uiPreferences.dateFormat().get()))
|
|
|
+ private val skipFiltered by readerPreferences.skipFiltered().asState(coroutineScope)
|
|
|
|
|
|
private val selectedPositions: Array<Int> = arrayOf(-1, -1) // first and last selected index in list
|
|
|
private val selectedChapterIds: HashSet<Long> = HashSet()
|
|
@@ -354,7 +354,7 @@ class MangaInfoScreenModel(
|
|
|
/**
|
|
|
* Returns true if the manga has any downloads.
|
|
|
*/
|
|
|
- fun hasDownloads(): Boolean {
|
|
|
+ private fun hasDownloads(): Boolean {
|
|
|
val manga = successState?.manga ?: return false
|
|
|
return downloadManager.getDownloadCount(manga) > 0
|
|
|
}
|
|
@@ -527,7 +527,7 @@ class MangaInfoScreenModel(
|
|
|
/**
|
|
|
* Returns the list of filtered or all chapter items if [skipFiltered] is false.
|
|
|
*/
|
|
|
- fun getChapterItems(): List<ChapterItem> {
|
|
|
+ private fun getChapterItems(): List<ChapterItem> {
|
|
|
return if (skipFiltered) filteredChapters.orEmpty().toList() else allChapters.orEmpty()
|
|
|
}
|
|
|
|
|
@@ -539,19 +539,19 @@ class MangaInfoScreenModel(
|
|
|
return successState.chapters.getNextUnread(successState.manga)
|
|
|
}
|
|
|
|
|
|
- fun getUnreadChapters(): List<Chapter> {
|
|
|
+ private fun getUnreadChapters(): List<Chapter> {
|
|
|
return getChapterItems()
|
|
|
.filter { (chapter, dlStatus) -> !chapter.read && dlStatus == Download.State.NOT_DOWNLOADED }
|
|
|
.map { it.chapter }
|
|
|
}
|
|
|
|
|
|
- fun getUnreadChaptersSorted(): List<Chapter> {
|
|
|
+ private fun getUnreadChaptersSorted(): List<Chapter> {
|
|
|
val manga = successState?.manga ?: return emptyList()
|
|
|
val chaptersSorted = getUnreadChapters().sortedWith(getChapterSort(manga))
|
|
|
return if (manga.sortDescending()) chaptersSorted.reversed() else chaptersSorted
|
|
|
}
|
|
|
|
|
|
- fun startDownload(
|
|
|
+ private fun startDownload(
|
|
|
chapters: List<Chapter>,
|
|
|
startNow: Boolean,
|
|
|
) {
|
|
@@ -611,19 +611,16 @@ class MangaInfoScreenModel(
|
|
|
DownloadAction.NEXT_1_CHAPTER -> getUnreadChaptersSorted().take(1)
|
|
|
DownloadAction.NEXT_5_CHAPTERS -> getUnreadChaptersSorted().take(5)
|
|
|
DownloadAction.NEXT_10_CHAPTERS -> getUnreadChaptersSorted().take(10)
|
|
|
- DownloadAction.CUSTOM -> {
|
|
|
- showDownloadCustomDialog()
|
|
|
- return
|
|
|
- }
|
|
|
+ DownloadAction.NEXT_25_CHAPTERS -> getUnreadChaptersSorted().take(25)
|
|
|
DownloadAction.UNREAD_CHAPTERS -> getUnreadChapters()
|
|
|
DownloadAction.ALL_CHAPTERS -> getChapterItems().map { it.chapter }
|
|
|
}
|
|
|
- if (!chaptersToDownload.isNullOrEmpty()) {
|
|
|
+ if (chaptersToDownload.isNotEmpty()) {
|
|
|
startDownload(chaptersToDownload, false)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- fun cancelDownload(chapterId: Long) {
|
|
|
+ private fun cancelDownload(chapterId: Long) {
|
|
|
val activeDownload = downloadManager.getQueuedDownloadOrNull(chapterId) ?: return
|
|
|
downloadManager.cancelQueuedDownloads(listOf(activeDownload))
|
|
|
updateDownloadState(activeDownload.apply { status = Download.State.NOT_DOWNLOADED })
|
|
@@ -913,7 +910,6 @@ class MangaInfoScreenModel(
|
|
|
data class ChangeCategory(val manga: Manga, val initialSelection: List<CheckboxState<Category>>) : Dialog()
|
|
|
data class DeleteChapters(val chapters: List<Chapter>) : Dialog()
|
|
|
data class DuplicateManga(val manga: Manga, val duplicate: Manga) : Dialog()
|
|
|
- data class DownloadCustomAmount(val max: Int) : Dialog()
|
|
|
object SettingsSheet : Dialog()
|
|
|
object TrackSheet : Dialog()
|
|
|
object FullCover : Dialog()
|
|
@@ -928,16 +924,6 @@ class MangaInfoScreenModel(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private fun showDownloadCustomDialog() {
|
|
|
- val max = getChapterItems().count()
|
|
|
- mutableState.update { state ->
|
|
|
- when (state) {
|
|
|
- MangaScreenState.Loading -> state
|
|
|
- is MangaScreenState.Success -> state.copy(dialog = Dialog.DownloadCustomAmount(max))
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
fun showDeleteChapterDialog(chapters: List<Chapter>) {
|
|
|
mutableState.update { state ->
|
|
|
when (state) {
|