mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-10-28 18:43:50 +00:00
57 lines
2.0 KiB
TypeScript
57 lines
2.0 KiB
TypeScript
import { ipcRenderer, remote } from 'electron';
|
|
|
|
import * as LinkUtil from '../utils/link-util';
|
|
import * as ConfigUtil from '../utils/config-util';
|
|
import type WebView from './webview';
|
|
|
|
const { shell, app } = remote;
|
|
|
|
const dingSound = new Audio('../resources/sounds/ding.ogg');
|
|
|
|
export default function handleExternalLink(this: WebView, event: Electron.NewWindowEvent): void {
|
|
event.preventDefault();
|
|
|
|
const url = new URL(event.url);
|
|
const downloadPath = ConfigUtil.getConfigItem('downloadsPath', `${app.getPath('downloads')}`);
|
|
|
|
if (LinkUtil.isUploadsUrl(this.props.url, url)) {
|
|
ipcRenderer.send('downloadFile', url.href, downloadPath);
|
|
ipcRenderer.once('downloadFileCompleted', (_event: Event, filePath: string, fileName: string) => {
|
|
const downloadNotification = new Notification('Download Complete', {
|
|
body: `Click to show ${fileName} in folder`,
|
|
silent: true // We'll play our own sound - ding.ogg
|
|
});
|
|
|
|
// Play sound to indicate download complete
|
|
if (!ConfigUtil.getConfigItem('silent')) {
|
|
dingSound.play();
|
|
}
|
|
|
|
downloadNotification.addEventListener('click', () => {
|
|
// Reveal file in download folder
|
|
shell.showItemInFolder(filePath);
|
|
});
|
|
ipcRenderer.removeAllListeners('downloadFileFailed');
|
|
});
|
|
|
|
ipcRenderer.once('downloadFileFailed', () => {
|
|
// Automatic download failed, so show save dialog prompt and download
|
|
// through webview
|
|
// Only do this if it is the automatic download, otherwise show an error (so we aren't showing two save
|
|
// prompts right after each other)
|
|
if (ConfigUtil.getConfigItem('promptDownload', false)) {
|
|
// We need to create a "new Notification" to display it, but just `Notification(...)` on its own
|
|
// doesn't work
|
|
new Notification('Download Complete', { // eslint-disable-line no-new
|
|
body: 'Download failed'
|
|
});
|
|
} else {
|
|
this.$el.downloadURL(url.href);
|
|
}
|
|
ipcRenderer.removeAllListeners('downloadFileCompleted');
|
|
});
|
|
} else {
|
|
LinkUtil.openBrowser(url);
|
|
}
|
|
}
|