Fix auto-downloading for merged manga

(cherry picked from commit 8f868c0813a9a5e7af64760f22e849cb344a4f89)

# Conflicts:
#	app/src/main/sqldelight/data/merged.sq
This commit is contained in:
Jobobby04 2022-06-04 11:59:29 -04:00
parent c58554ec75
commit f7e5df2b6d
4 changed files with 41 additions and 8 deletions

View File

@ -25,6 +25,19 @@ fun getMergedMangaQuery() =
ON ${Manga.TABLE}.${Manga.COL_ID} = M.${Merged.COL_MANGA_ID}
"""
/**
* Query to get the manga merged into a merged manga
*/
fun getMergedMangaForDownloadingQuery() =
"""
SELECT ${Manga.TABLE}.*
FROM (
SELECT ${Merged.COL_MANGA_ID} FROM ${Merged.TABLE} WHERE ${Merged.COL_MERGE_ID} = ? AND ${Merged.COL_DOWNLOAD_CHAPTERS} = 1
) AS M
JOIN ${Manga.TABLE}
ON ${Manga.TABLE}.${Manga.COL_ID} = M.${Merged.COL_MANGA_ID}
"""
/**
* Query to get all the manga that are merged into other manga
*/

View File

@ -480,13 +480,22 @@ class LibraryUpdateService(
// We don't want to start downloading while the library is updating, because websites
// may don't like it and they could ban the user.
// SY -->
val chapterFilter = if (manga.source == MERGED_SOURCE_ID) {
db.getMergedMangaReferences(manga.id!!).executeAsBlocking()
.filterNot { it.downloadChapters }
.mapNotNull { it.mangaId } + manga.id!!
} else emptyList()
if (manga.source == MERGED_SOURCE_ID) {
val downloadingManga = db.getMergedMangasForDownloading(manga.id!!).executeAsBlocking()
.associateBy { it.id!! }
chapters.groupBy { it.manga_id }
.forEach {
downloadManager.downloadChapters(
downloadingManga[it.key] ?: return@forEach,
chapters,
false,
)
}
return
}
// SY <--
downloadManager.downloadChapters(manga, /* SY --> */ chapters.filterNot { it.manga_id in chapterFilter } /* SY <-- */, false)
downloadManager.downloadChapters(manga, chapters, false)
}
/**

View File

@ -70,12 +70,12 @@ class MergedSource : HttpSource() {
.apply {
if (isEmpty()) {
throw IllegalArgumentException(
"Manga references are empty, info unavailable, merge is likely corrupted"
"Manga references are empty, info unavailable, merge is likely corrupted",
)
}
if (size == 1 && first().mangaSourceId == MERGED_SOURCE_ID) {
throw IllegalArgumentException(
"Manga references contain only the merged reference, merge is likely corrupted"
"Manga references contain only the merged reference, merge is likely corrupted",
)
}
}

View File

@ -9,6 +9,7 @@ import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.database.queries.getAllMergedMangaQuery
import eu.kanade.tachiyomi.data.database.queries.getMergedChaptersQuery
import eu.kanade.tachiyomi.data.database.queries.getMergedMangaForDownloadingQuery
import eu.kanade.tachiyomi.data.database.queries.getMergedMangaFromUrlQuery
import eu.kanade.tachiyomi.data.database.queries.getMergedMangaQuery
import eu.kanade.tachiyomi.data.database.tables.ChapterTable
@ -61,6 +62,16 @@ interface MergedQueries : DbProvider {
)
.prepare()
fun getMergedMangasForDownloading(mergedMangaId: Long) = db.get()
.listOfObjects(Manga::class.java)
.withQuery(
RawQuery.builder()
.query(getMergedMangaForDownloadingQuery())
.args(mergedMangaId)
.build(),
)
.prepare()
fun getMergedMangas(mergedMangaUrl: String) = db.get()
.listOfObjects(Manga::class.java)
.withQuery(