mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-05 11:54:38 -05:00
Fix/download subscription returning outdated data for finished downloads (#794)
* Return latest data for finished downloads In case a download has finished, the cache of the data loader has to be cleared to be able to get the latest data, otherwise, the returned chapter will still be marked as not downloaded * Correctly clear manga data loader caches
This commit is contained in:
@@ -38,6 +38,19 @@ class ChapterType(
|
|||||||
val pageCount: Int,
|
val pageCount: Int,
|
||||||
// val chapterCount: Int?,
|
// val chapterCount: Int?,
|
||||||
) : Node {
|
) : Node {
|
||||||
|
companion object {
|
||||||
|
fun clearCacheFor(
|
||||||
|
chapterId: Int,
|
||||||
|
mangaId: Int,
|
||||||
|
dataFetchingEnvironment: DataFetchingEnvironment,
|
||||||
|
) {
|
||||||
|
dataFetchingEnvironment.getDataLoader<Int, ChapterType>("ChapterDataLoader").clear(chapterId)
|
||||||
|
dataFetchingEnvironment.getDataLoader<Int, ChapterNodeList>("ChaptersForMangaDataLoader").clear(mangaId)
|
||||||
|
dataFetchingEnvironment.getDataLoader<Int, Int>("DownloadedChapterCountForMangaDataLoader").clear(mangaId)
|
||||||
|
dataFetchingEnvironment.getDataLoader<Int, ChapterType>("LastReadChapterForMangaDataLoader").clear(mangaId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
constructor(row: ResultRow) : this(
|
constructor(row: ResultRow) : this(
|
||||||
row[ChapterTable.id].value,
|
row[ChapterTable.id].value,
|
||||||
row[ChapterTable.url],
|
row[ChapterTable.url],
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import suwayomi.tachidesk.graphql.server.primitives.Edge
|
|||||||
import suwayomi.tachidesk.graphql.server.primitives.Node
|
import suwayomi.tachidesk.graphql.server.primitives.Node
|
||||||
import suwayomi.tachidesk.graphql.server.primitives.NodeList
|
import suwayomi.tachidesk.graphql.server.primitives.NodeList
|
||||||
import suwayomi.tachidesk.graphql.server.primitives.PageInfo
|
import suwayomi.tachidesk.graphql.server.primitives.PageInfo
|
||||||
|
import suwayomi.tachidesk.graphql.types.DownloadState.FINISHED
|
||||||
import suwayomi.tachidesk.manga.impl.download.model.DownloadChapter
|
import suwayomi.tachidesk.manga.impl.download.model.DownloadChapter
|
||||||
import suwayomi.tachidesk.manga.impl.download.model.DownloadStatus
|
import suwayomi.tachidesk.manga.impl.download.model.DownloadStatus
|
||||||
import suwayomi.tachidesk.manga.impl.download.model.Status
|
import suwayomi.tachidesk.manga.impl.download.model.Status
|
||||||
@@ -57,10 +58,20 @@ class DownloadType(
|
|||||||
)
|
)
|
||||||
|
|
||||||
fun manga(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<MangaType> {
|
fun manga(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<MangaType> {
|
||||||
|
val clearCache = state == FINISHED
|
||||||
|
if (clearCache) {
|
||||||
|
MangaType.clearCacheFor(mangaId, dataFetchingEnvironment)
|
||||||
|
}
|
||||||
|
|
||||||
return dataFetchingEnvironment.getValueFromDataLoader<Int, MangaType>("MangaDataLoader", mangaId)
|
return dataFetchingEnvironment.getValueFromDataLoader<Int, MangaType>("MangaDataLoader", mangaId)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun chapter(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<ChapterType> {
|
fun chapter(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<ChapterType> {
|
||||||
|
val clearCache = state == FINISHED
|
||||||
|
if (clearCache) {
|
||||||
|
ChapterType.clearCacheFor(chapterId, mangaId, dataFetchingEnvironment)
|
||||||
|
}
|
||||||
|
|
||||||
return dataFetchingEnvironment.getValueFromDataLoader<Int, ChapterType>("ChapterDataLoader", chapterId)
|
return dataFetchingEnvironment.getValueFromDataLoader<Int, ChapterType>("ChapterDataLoader", chapterId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,16 +46,16 @@ class MangaType(
|
|||||||
mangaId: Int,
|
mangaId: Int,
|
||||||
dataFetchingEnvironment: DataFetchingEnvironment,
|
dataFetchingEnvironment: DataFetchingEnvironment,
|
||||||
) {
|
) {
|
||||||
dataFetchingEnvironment.getDataLoader<List<Int>, MangaNodeList>("MangaDataLoader").clear(listOf(mangaId))
|
dataFetchingEnvironment.getDataLoader<Int, MangaType>("MangaDataLoader").clear(mangaId)
|
||||||
dataFetchingEnvironment.getDataLoader<List<Int>, MangaNodeList>("MangaForIdsDataLoader").clear(listOf(mangaId))
|
dataFetchingEnvironment.getDataLoader<Int, MangaNodeList>("MangaForIdsDataLoader").clear(mangaId)
|
||||||
dataFetchingEnvironment.getDataLoader<Int, Int>("DownloadedChapterCountForMangaDataLoader").clear(mangaId)
|
dataFetchingEnvironment.getDataLoader<Int, Int>("DownloadedChapterCountForMangaDataLoader").clear(mangaId)
|
||||||
dataFetchingEnvironment.getDataLoader<Int, Int>("UnreadChapterCountForMangaDataLoader").clear(mangaId)
|
dataFetchingEnvironment.getDataLoader<Int, Int>("UnreadChapterCountForMangaDataLoader").clear(mangaId)
|
||||||
dataFetchingEnvironment.getDataLoader<Int, Int>("LastReadChapterForMangaDataLoader").clear(mangaId)
|
dataFetchingEnvironment.getDataLoader<Int, ChapterType>("LastReadChapterForMangaDataLoader").clear(mangaId)
|
||||||
dataFetchingEnvironment.getDataLoader<Int, ChapterNodeList>(
|
dataFetchingEnvironment.getDataLoader<Int, ChapterNodeList>(
|
||||||
"ChaptersForMangaDataLoader",
|
"ChaptersForMangaDataLoader",
|
||||||
).clear(mangaId)
|
).clear(mangaId)
|
||||||
dataFetchingEnvironment.getDataLoader<Int, Int>("MangaMetaDataLoader").clear(mangaId)
|
dataFetchingEnvironment.getDataLoader<Int, List<MangaMetaType>>("MangaMetaDataLoader").clear(mangaId)
|
||||||
dataFetchingEnvironment.getDataLoader<Int, Int>("CategoriesForMangaDataLoader").clear(mangaId)
|
dataFetchingEnvironment.getDataLoader<Int, CategoryNodeList>("CategoriesForMangaDataLoader").clear(mangaId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user