Fix downloaded merged chapters in reader

This commit is contained in:
Jobobby04 2023-06-24 14:12:32 -04:00
parent e2840b6b9d
commit bc816d7b49
2 changed files with 28 additions and 9 deletions

View File

@ -177,13 +177,25 @@ class ReaderViewModel(
*/
private val chapterList by lazy {
val manga = manga!!
val chapters = runBlocking {
/* SY --> */ if (manga.source == MERGED_SOURCE_ID) {
getMergedChapterByMangaId.await(manga.id)
// SY -->
val (chapters, mangaMap) = runBlocking {
if (manga.source == MERGED_SOURCE_ID) {
getMergedChapterByMangaId.await(manga.id) to getMergedMangaById.await(manga.id)
.associateBy { it.id }
} else {
/* SY <-- */ getChapterByMangaId.await(manga.id)
getChapterByMangaId.await(manga.id) to null
}
}
fun isChapterDownloaded(chapter: Chapter): Boolean {
val chapterManga = mangaMap?.get(chapter.mangaId) ?: manga
return downloadManager.isChapterDownloaded(
chapterName = chapter.name,
chapterScanlator = chapter.scanlator,
mangaTitle = chapterManga.ogTitle,
sourceId = chapterManga.source
)
}
// SY <--
val selectedChapter = chapters.find { it.id == chapterId }
?: error("Requested chapter of id $chapterId not found in chapter list")
@ -196,8 +208,10 @@ class ReaderViewModel(
readerPreferences.skipFiltered().get() -> {
(manga.unreadFilterRaw == Manga.CHAPTER_SHOW_READ && !it.read) ||
(manga.unreadFilterRaw == Manga.CHAPTER_SHOW_UNREAD && it.read) ||
(manga.downloadedFilterRaw == Manga.CHAPTER_SHOW_DOWNLOADED && !downloadManager.isChapterDownloaded(it.name, it.scanlator, /* SY --> */ manga.ogTitle /* SY <-- */, manga.source)) ||
(manga.downloadedFilterRaw == Manga.CHAPTER_SHOW_NOT_DOWNLOADED && downloadManager.isChapterDownloaded(it.name, it.scanlator, /* SY --> */ manga.ogTitle /* SY <-- */, manga.source)) ||
// SY -->
(manga.downloadedFilterRaw == Manga.CHAPTER_SHOW_DOWNLOADED && !isChapterDownloaded(it)) ||
(manga.downloadedFilterRaw == Manga.CHAPTER_SHOW_NOT_DOWNLOADED && isChapterDownloaded(it)) ||
// SY <--
(manga.bookmarkedFilterRaw == Manga.CHAPTER_SHOW_BOOKMARKED && !it.bookmark) ||
(manga.bookmarkedFilterRaw == Manga.CHAPTER_SHOW_NOT_BOOKMARKED && it.bookmark) ||
// SY -->
@ -228,7 +242,7 @@ class ReaderViewModel(
}
.run {
if (basePreferences.downloadedOnly().get()) {
filterDownloaded(manga)
filterDownloaded(manga, mangaMap)
} else {
this
}

View File

@ -9,8 +9,13 @@ import uy.kohesive.injekt.api.get
/**
* Returns a copy of the list with not downloaded chapters removed
*/
fun List<Chapter>.filterDownloaded(manga: Manga): List<Chapter> {
fun List<Chapter>.filterDownloaded(manga: Manga/* SY --> */, mangaMap: Map<Long, Manga>?): List<Chapter> {
val downloadCache: DownloadCache = Injekt.get()
return filter { downloadCache.isChapterDownloaded(it.name, it.scanlator, manga.title, manga.source, false) }
// SY -->
return filter {
val chapterManga = mangaMap?.get(it.mangaId) ?: manga
downloadCache.isChapterDownloaded(it.name, it.scanlator, chapterManga.ogTitle, chapterManga.source, false)
}
// SY <--
}