Skip to content

Commit 11be969

Browse files
authored
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
1 parent ea958cd commit 11be969

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

server/src/main/kotlin/suwayomi/tachidesk/graphql/types/ChapterType.kt

+13
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,19 @@ class ChapterType(
3838
val pageCount: Int,
3939
// val chapterCount: Int?,
4040
) : Node {
41+
companion object {
42+
fun clearCacheFor(
43+
chapterId: Int,
44+
mangaId: Int,
45+
dataFetchingEnvironment: DataFetchingEnvironment,
46+
) {
47+
dataFetchingEnvironment.getDataLoader<Int, ChapterType>("ChapterDataLoader").clear(chapterId)
48+
dataFetchingEnvironment.getDataLoader<Int, ChapterNodeList>("ChaptersForMangaDataLoader").clear(mangaId)
49+
dataFetchingEnvironment.getDataLoader<Int, Int>("DownloadedChapterCountForMangaDataLoader").clear(mangaId)
50+
dataFetchingEnvironment.getDataLoader<Int, ChapterType>("LastReadChapterForMangaDataLoader").clear(mangaId)
51+
}
52+
}
53+
4154
constructor(row: ResultRow) : this(
4255
row[ChapterTable.id].value,
4356
row[ChapterTable.url],

server/src/main/kotlin/suwayomi/tachidesk/graphql/types/DownloadType.kt

+11
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import suwayomi.tachidesk.graphql.server.primitives.Edge
1515
import suwayomi.tachidesk.graphql.server.primitives.Node
1616
import suwayomi.tachidesk.graphql.server.primitives.NodeList
1717
import suwayomi.tachidesk.graphql.server.primitives.PageInfo
18+
import suwayomi.tachidesk.graphql.types.DownloadState.FINISHED
1819
import suwayomi.tachidesk.manga.impl.download.model.DownloadChapter
1920
import suwayomi.tachidesk.manga.impl.download.model.DownloadStatus
2021
import suwayomi.tachidesk.manga.impl.download.model.Status
@@ -57,10 +58,20 @@ class DownloadType(
5758
)
5859

5960
fun manga(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<MangaType> {
61+
val clearCache = state == FINISHED
62+
if (clearCache) {
63+
MangaType.clearCacheFor(mangaId, dataFetchingEnvironment)
64+
}
65+
6066
return dataFetchingEnvironment.getValueFromDataLoader<Int, MangaType>("MangaDataLoader", mangaId)
6167
}
6268

6369
fun chapter(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<ChapterType> {
70+
val clearCache = state == FINISHED
71+
if (clearCache) {
72+
ChapterType.clearCacheFor(chapterId, mangaId, dataFetchingEnvironment)
73+
}
74+
6475
return dataFetchingEnvironment.getValueFromDataLoader<Int, ChapterType>("ChapterDataLoader", chapterId)
6576
}
6677
}

server/src/main/kotlin/suwayomi/tachidesk/graphql/types/MangaType.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,16 @@ class MangaType(
4646
mangaId: Int,
4747
dataFetchingEnvironment: DataFetchingEnvironment,
4848
) {
49-
dataFetchingEnvironment.getDataLoader<List<Int>, MangaNodeList>("MangaDataLoader").clear(listOf(mangaId))
50-
dataFetchingEnvironment.getDataLoader<List<Int>, MangaNodeList>("MangaForIdsDataLoader").clear(listOf(mangaId))
49+
dataFetchingEnvironment.getDataLoader<Int, MangaType>("MangaDataLoader").clear(mangaId)
50+
dataFetchingEnvironment.getDataLoader<Int, MangaNodeList>("MangaForIdsDataLoader").clear(mangaId)
5151
dataFetchingEnvironment.getDataLoader<Int, Int>("DownloadedChapterCountForMangaDataLoader").clear(mangaId)
5252
dataFetchingEnvironment.getDataLoader<Int, Int>("UnreadChapterCountForMangaDataLoader").clear(mangaId)
53-
dataFetchingEnvironment.getDataLoader<Int, Int>("LastReadChapterForMangaDataLoader").clear(mangaId)
53+
dataFetchingEnvironment.getDataLoader<Int, ChapterType>("LastReadChapterForMangaDataLoader").clear(mangaId)
5454
dataFetchingEnvironment.getDataLoader<Int, ChapterNodeList>(
5555
"ChaptersForMangaDataLoader",
5656
).clear(mangaId)
57-
dataFetchingEnvironment.getDataLoader<Int, Int>("MangaMetaDataLoader").clear(mangaId)
58-
dataFetchingEnvironment.getDataLoader<Int, Int>("CategoriesForMangaDataLoader").clear(mangaId)
57+
dataFetchingEnvironment.getDataLoader<Int, List<MangaMetaType>>("MangaMetaDataLoader").clear(mangaId)
58+
dataFetchingEnvironment.getDataLoader<Int, CategoryNodeList>("CategoriesForMangaDataLoader").clear(mangaId)
5959
}
6060
}
6161

0 commit comments

Comments
 (0)