Fix auto-downloading for merged manga
(cherry picked from commit 8f868c0813a9a5e7af64760f22e849cb344a4f89) # Conflicts: # app/src/main/sqldelight/data/merged.sq
This commit is contained in:
parent
c58554ec75
commit
f7e5df2b6d
@ -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
|
||||
*/
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user