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

View File

@ -9,8 +9,13 @@ import uy.kohesive.injekt.api.get
/** /**
* Returns a copy of the list with not downloaded chapters removed * 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() 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 <--
} }