From 9a2faa69f2ee294e233fea7f142c3e7bb7ecdf2e Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Thu, 13 Mar 2025 16:20:56 +0100 Subject: [PATCH] feat: file download success/failure --- packages/compass/src/app/index.tsx | 24 +++++++++++++++++++++++- packages/compass/src/main/application.ts | 17 +++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/packages/compass/src/app/index.tsx b/packages/compass/src/app/index.tsx index 51ed4b491a0..f4fb3fd4d27 100644 --- a/packages/compass/src/app/index.tsx +++ b/packages/compass/src/app/index.tsx @@ -10,7 +10,7 @@ import { globalAppRegistry } from 'hadron-app-registry'; import { defaultPreferencesInstance } from 'compass-preferences-model'; import semver from 'semver'; import { CompassElectron } from './components/entrypoint'; -import { openToast } from '@mongodb-js/compass-components'; +import { openToast, ToastBody } from '@mongodb-js/compass-components'; // https://github.com/nodejs/node/issues/40537 dns.setDefaultResultOrder('ipv4first'); @@ -324,6 +324,28 @@ const app = { ipcRenderer?.on('compass:open-import', () => { globalAppRegistry.emit('open-active-namespace-import'); }); + ipcRenderer?.on('download-finished', (event, { path }) => { + openToast('file-download-complete', { + title: 'Success', + description: ( + ipcRenderer?.send('show-file', path)} + actionText="show file" + /> + ), + variant: 'success', + }); + }); + ipcRenderer?.on('download-failed', (event, { filename }) => { + openToast('file-download-failed', { + title: 'Failure', + description: filename + ? `Failed to download ${filename}` + : 'Download failed', + variant: 'warning', + }); + }); // Autoupdate handlers ipcRenderer?.on( 'autoupdate:download-update-externally', diff --git a/packages/compass/src/main/application.ts b/packages/compass/src/main/application.ts index 6e1d4af9768..df8f284ff23 100644 --- a/packages/compass/src/main/application.ts +++ b/packages/compass/src/main/application.ts @@ -470,6 +470,23 @@ class CompassApplication { // Accessing defaultSession is not allowed when app is not ready await app.whenReady(); + session.defaultSession.on( + 'will-download', + function (event, item, webContents) { + item.once('done', (event, state) => { + if (state === 'completed') { + webContents.send('download-finished', { + path: item.getSavePath(), + }); + } else if (state === 'interrupted') { + webContents.send('download-failed', { + filename: item.getFilename(), + }); + } + }); + } + ); + session.defaultSession.webRequest.onBeforeSendHeaders( allowedCloudEndpoints, (details, callback) => {