From 320a0971b4aaac057ab33c0afa2942dc004680fc Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sat, 16 Nov 2024 03:30:09 +0100 Subject: [PATCH] Fix/gql download subscription (#1137) * Properly set download update type on exceptions * Always send FINISHED download update to client for deprecated subscription By the time the status was sent to the client, the finished download item was already removed from the queue, causing the client to never get the latest status, thus, having an outdated cache Regression introduced with 168b76cb0c2c424f41380379b3da534c2ebcdd01 --- .../suwayomi/tachidesk/manga/impl/download/Downloader.kt | 7 +++++-- .../tachidesk/manga/impl/download/model/DownloadUpdate.kt | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/Downloader.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/Downloader.kt index c1413c87..a30ffc85 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/Downloader.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/Downloader.kt @@ -30,7 +30,9 @@ import suwayomi.tachidesk.manga.impl.download.model.DownloadState.Queued import suwayomi.tachidesk.manga.impl.download.model.DownloadUpdate import suwayomi.tachidesk.manga.impl.download.model.DownloadUpdateType.ERROR import suwayomi.tachidesk.manga.impl.download.model.DownloadUpdateType.FINISHED +import suwayomi.tachidesk.manga.impl.download.model.DownloadUpdateType.PAUSED import suwayomi.tachidesk.manga.impl.download.model.DownloadUpdateType.PROGRESS +import suwayomi.tachidesk.manga.impl.download.model.DownloadUpdateType.STOPPED import suwayomi.tachidesk.manga.model.table.ChapterTable import java.util.concurrent.CopyOnWriteArrayList @@ -99,8 +101,8 @@ class Downloader( logger: KLogger, download: DownloadChapter, ) { - downloadQueue -= download notifier(true, DownloadUpdate(FINISHED, download)) + downloadQueue -= download onDownloadFinished() logger.debug { "finished" } } @@ -146,14 +148,15 @@ class Downloader( } catch (e: CancellationException) { logger.debug("Downloader was stopped") availableSourceDownloads.filter { it.state == Downloading }.forEach { it.state = Queued } + notifier(false, DownloadUpdate(STOPPED, download)) } catch (e: PauseDownloadException) { downloadLogger.debug { "paused" } download.state = Queued + notifier(false, DownloadUpdate(PAUSED, download)) } catch (e: Exception) { downloadLogger.warn("failed due to", e) download.tries++ download.state = Error - } finally { notifier(false, DownloadUpdate(ERROR, download)) } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadUpdate.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadUpdate.kt index 41697464..8a323f9b 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadUpdate.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/download/model/DownloadUpdate.kt @@ -3,6 +3,8 @@ package suwayomi.tachidesk.manga.impl.download.model enum class DownloadUpdateType { QUEUED, DEQUEUED, + PAUSED, + STOPPED, PROGRESS, FINISHED, ERROR,