From ac22fb286dd410adf51836d253d15e76630cfcc1 Mon Sep 17 00:00:00 2001 From: Geomitron <22552797+Geomitron@users.noreply.github.com> Date: Mon, 18 May 2020 18:21:38 -0400 Subject: [PATCH] Prevent multiple downloads of the same thing --- src/electron/ipc/download/ChartDownload.ts | 1 + src/electron/ipc/download/DownloadHandler.ts | 5 +++++ src/electron/ipc/download/DownloadQueue.ts | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/electron/ipc/download/ChartDownload.ts b/src/electron/ipc/download/ChartDownload.ts index 7670ed0..c938cfd 100644 --- a/src/electron/ipc/download/ChartDownload.ts +++ b/src/electron/ipc/download/ChartDownload.ts @@ -41,6 +41,7 @@ export class ChartDownload { /** If this chart download needs to be retried */ get hasFailed() { return this._hasFailed } get isArchive() { return this.data.driveData.isArchive } + get hash() { return this.data.driveData.filesHash } constructor(public versionID: number, private data: NewDownload) { this.updateGUI('', 'Waiting for other downloads to finish...', 'good') diff --git a/src/electron/ipc/download/DownloadHandler.ts b/src/electron/ipc/download/DownloadHandler.ts index c047be1..8457bb3 100644 --- a/src/electron/ipc/download/DownloadHandler.ts +++ b/src/electron/ipc/download/DownloadHandler.ts @@ -19,6 +19,11 @@ class DownloadHandler implements IPCEmitHandler<'download'> { } private addDownload(data: Download) { + const filesHash = data.data.driveData.filesHash + if (this.currentDownload?.hash == filesHash || this.downloadQueue.isDownloadingLink(filesHash)) { + return + } + const newDownload = new ChartDownload(data.versionID, data.data) this.addDownloadEventListeners(newDownload) if (this.currentDownload == undefined) { diff --git a/src/electron/ipc/download/DownloadQueue.ts b/src/electron/ipc/download/DownloadQueue.ts index ba8960d..fc753e9 100644 --- a/src/electron/ipc/download/DownloadQueue.ts +++ b/src/electron/ipc/download/DownloadQueue.ts @@ -6,6 +6,10 @@ export class DownloadQueue { downloadQueue: ChartDownload[] = [] + isDownloadingLink(filesHash: string) { + return this.downloadQueue.some(download => download.hash == filesHash) + } + isEmpty() { return this.downloadQueue.length == 0 }