From c792724c1dbd6a78dcd818984b2fa10ffa5ac5f7 Mon Sep 17 00:00:00 2001 From: Wildan Muhlis Date: Fri, 17 May 2024 15:53:30 +0700 Subject: [PATCH] change download_started to completed, failed and canceled --- desktop/ELECTRON_EVENTS.ts | 4 +++- desktop/contextBridge.ts | 4 +++- desktop/createDownloadQueue.ts | 7 ++++--- src/libs/fileDownload/index.desktop.ts | 10 ++++++---- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/desktop/ELECTRON_EVENTS.ts b/desktop/ELECTRON_EVENTS.ts index cb0b05f0974f..b06794567c7d 100644 --- a/desktop/ELECTRON_EVENTS.ts +++ b/desktop/ELECTRON_EVENTS.ts @@ -10,7 +10,9 @@ const ELECTRON_EVENTS = { START_UPDATE: 'start-update', UPDATE_DOWNLOADED: 'update-downloaded', DOWNLOAD: 'download', - DOWNLOAD_STARTED: 'download-started', + DOWNLOAD_COMPLETED: 'download-completed', + DOWNLOAD_FAILED: 'download-started', + DOWNLOAD_CANCELED: 'download-canceled', SILENT_UPDATE: 'silent-update', } as const; diff --git a/desktop/contextBridge.ts b/desktop/contextBridge.ts index e9c61e69539e..a18fb408b1ec 100644 --- a/desktop/contextBridge.ts +++ b/desktop/contextBridge.ts @@ -25,7 +25,9 @@ const WHITELIST_CHANNELS_MAIN_TO_RENDERER = [ ELECTRON_EVENTS.UPDATE_DOWNLOADED, ELECTRON_EVENTS.FOCUS, ELECTRON_EVENTS.BLUR, - ELECTRON_EVENTS.DOWNLOAD_STARTED, + ELECTRON_EVENTS.DOWNLOAD_COMPLETED, + ELECTRON_EVENTS.DOWNLOAD_FAILED, + ELECTRON_EVENTS.DOWNLOAD_CANCELED, ] as const; const getErrorMessage = (channel: string): string => `Electron context bridge cannot be used with channel '${channel}'`; diff --git a/desktop/createDownloadQueue.ts b/desktop/createDownloadQueue.ts index 29ce595fc5cc..132848c5da9e 100644 --- a/desktop/createDownloadQueue.ts +++ b/desktop/createDownloadQueue.ts @@ -34,7 +34,6 @@ const createDownloadQueue = () => { let downloadTimeout: NodeJS.Timeout; let downloadListener: (event: Electron.Event, electronDownloadItem: Electron.DownloadItem) => void; - // Define the timeout function const timeoutFunction = () => { item.win.webContents.session.removeListener('will-download', downloadListener); resolve(); @@ -74,6 +73,7 @@ const createDownloadQueue = () => { return; } + item.win.webContents.send(ELECTRON_EVENTS.DOWNLOAD_CANCELED, {url: item.url}); cleanup(); reject(new Error(errorMessage)); electronDownloadItem.cancel(); @@ -82,19 +82,20 @@ const createDownloadQueue = () => { electronDownloadItem.on('done', (_, state) => { cleanup(); if (state === 'cancelled') { + item.win.webContents.send(ELECTRON_EVENTS.DOWNLOAD_CANCELED, {url: item.url}); resolve(); } else if (state === 'interrupted') { + item.win.webContents.send(ELECTRON_EVENTS.DOWNLOAD_FAILED, {url: item.url}); reject(new Error(errorMessage)); } else if (state === 'completed') { if (process.platform === 'darwin') { const savePath = electronDownloadItem.getSavePath(); app.dock.downloadFinished(savePath); } + item.win.webContents.send(ELECTRON_EVENTS.DOWNLOAD_COMPLETED, {url: item.url}); resolve(); } }); - - item.win.webContents.send(ELECTRON_EVENTS.DOWNLOAD_STARTED, {url: item.url}); }; downloadTimeout = setTimeout(timeoutFunction, CONST.DOWNLOADS_TIMEOUT); diff --git a/src/libs/fileDownload/index.desktop.ts b/src/libs/fileDownload/index.desktop.ts index 90faa1285bee..8e682225b79a 100644 --- a/src/libs/fileDownload/index.desktop.ts +++ b/src/libs/fileDownload/index.desktop.ts @@ -18,17 +18,19 @@ const fileDownload: FileDownload = (url, fileName) => { resolve(); }, CONST.DOWNLOADS_TIMEOUT); - window.electron.on(ELECTRON_EVENTS.DOWNLOAD_STARTED, (...args: unknown[]) => { + const handleDownloadStatus = (...args: unknown[]) => { const arg = Array.isArray(args) ? args[0] : null; const eventUrl = arg && typeof arg === 'object' && 'url' in arg ? arg.url : null; - // This event is triggered for all active download instances. We intentionally keep other promises waiting. - // Early resolution or rejection of other promises could prematurely stop the loading spinner or prevent the promise from being resolved. if (eventUrl === url) { clearTimeout(downloadTimeout); resolve(); } - }); + }; + + window.electron.on(ELECTRON_EVENTS.DOWNLOAD_COMPLETED, handleDownloadStatus); + window.electron.on(ELECTRON_EVENTS.DOWNLOAD_FAILED, handleDownloadStatus); + window.electron.on(ELECTRON_EVENTS.DOWNLOAD_CANCELED, handleDownloadStatus); }); };