diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt index 8d3e69f3e..5c41b8d08 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt @@ -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 */ diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt index 08cc56970..ee43a5007 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -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) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt index 7435acc06..5190aeb09 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt @@ -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", ) } } diff --git a/app/src/main/java/exh/merged/sql/queries/MergedQueries.kt b/app/src/main/java/exh/merged/sql/queries/MergedQueries.kt index 5ca921609..c8169dade 100644 --- a/app/src/main/java/exh/merged/sql/queries/MergedQueries.kt +++ b/app/src/main/java/exh/merged/sql/queries/MergedQueries.kt @@ -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(