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 c1413c87b..a30ffc855 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 416974642..8a323f9b5 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,