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 chapterCount: Int?,
|
||||
) : 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(
|
||||
row[ChapterTable.id].value,
|
||||
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.NodeList
|
||||
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.DownloadStatus
|
||||
import suwayomi.tachidesk.manga.impl.download.model.Status
|
||||
@@ -57,10 +58,20 @@ class DownloadType(
|
||||
)
|
||||
|
||||
fun manga(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<MangaType> {
|
||||
val clearCache = state == FINISHED
|
||||
if (clearCache) {
|
||||
MangaType.clearCacheFor(mangaId, dataFetchingEnvironment)
|
||||
}
|
||||
|
||||
return dataFetchingEnvironment.getValueFromDataLoader<Int, MangaType>("MangaDataLoader", mangaId)
|
||||
}
|
||||
|
||||
fun chapter(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<ChapterType> {
|
||||
val clearCache = state == FINISHED
|
||||
if (clearCache) {
|
||||
ChapterType.clearCacheFor(chapterId, mangaId, dataFetchingEnvironment)
|
||||
}
|
||||
|
||||
return dataFetchingEnvironment.getValueFromDataLoader<Int, ChapterType>("ChapterDataLoader", chapterId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,16 +46,16 @@ class MangaType(
|
||||
mangaId: Int,
|
||||
dataFetchingEnvironment: DataFetchingEnvironment,
|
||||
) {
|
||||
dataFetchingEnvironment.getDataLoader<List<Int>, MangaNodeList>("MangaDataLoader").clear(listOf(mangaId))
|
||||
dataFetchingEnvironment.getDataLoader<List<Int>, MangaNodeList>("MangaForIdsDataLoader").clear(listOf(mangaId))
|
||||
dataFetchingEnvironment.getDataLoader<Int, MangaType>("MangaDataLoader").clear(mangaId)
|
||||
dataFetchingEnvironment.getDataLoader<Int, MangaNodeList>("MangaForIdsDataLoader").clear(mangaId)
|
||||
dataFetchingEnvironment.getDataLoader<Int, Int>("DownloadedChapterCountForMangaDataLoader").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>(
|
||||
"ChaptersForMangaDataLoader",
|
||||
).clear(mangaId)
|
||||
dataFetchingEnvironment.getDataLoader<Int, Int>("MangaMetaDataLoader").clear(mangaId)
|
||||
dataFetchingEnvironment.getDataLoader<Int, Int>("CategoriesForMangaDataLoader").clear(mangaId)
|
||||
dataFetchingEnvironment.getDataLoader<Int, List<MangaMetaType>>("MangaMetaDataLoader").clear(mangaId)
|
||||
dataFetchingEnvironment.getDataLoader<Int, CategoryNodeList>("CategoriesForMangaDataLoader").clear(mangaId)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user