From 035002ceedf78d5ec73eabc0df7f06139939b967 Mon Sep 17 00:00:00 2001 From: Amine El Mouafik <412895+kytwb@users.noreply.github.com> Date: Mon, 8 Feb 2021 10:34:45 +0100 Subject: Synchronize with Franz 5.6.0 (#1033) Co-authored-by: FranzBot Co-authored-by: vantezzen Co-authored-by: Makazzz Co-authored-by: Stefan Malzner Co-authored-by: Amine Mouafik --- src/electron/ipc-api/cld.js | 20 ++++++++++++++++++++ src/electron/ipc-api/dnd.js | 16 ++++++++++++++++ src/electron/ipc-api/download.js | 26 +++++++++++++++++++------- src/electron/ipc-api/index.js | 4 ++++ src/electron/ipc-api/settings.js | 4 +--- 5 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 src/electron/ipc-api/cld.js create mode 100644 src/electron/ipc-api/dnd.js (limited to 'src/electron/ipc-api') diff --git a/src/electron/ipc-api/cld.js b/src/electron/ipc-api/cld.js new file mode 100644 index 000000000..23f18aa94 --- /dev/null +++ b/src/electron/ipc-api/cld.js @@ -0,0 +1,20 @@ +import { ipcMain } from 'electron'; +import cld from 'cld'; + +const debug = require('debug')('Franz:ipcApi:cld'); + +export default async () => { + ipcMain.handle('detect-language', async (event, { sample }) => { + try { + const result = await cld.detect(sample); + debug('Checking language', 'probability', result.languages); + if (result.reliable) { + debug('Language detected reliably, setting spellchecker language to', result.languages[0].code); + + return result.languages[0].code; + } + } catch (e) { + console.error(e); + } + }); +}; diff --git a/src/electron/ipc-api/dnd.js b/src/electron/ipc-api/dnd.js new file mode 100644 index 000000000..4589aa222 --- /dev/null +++ b/src/electron/ipc-api/dnd.js @@ -0,0 +1,16 @@ +import { ipcMain } from 'electron'; +import { getDoNotDisturb } from '@meetfranz/electron-notification-state'; + +const debug = require('debug')('Franz:ipcApi:dnd'); + +export default async () => { + ipcMain.handle('get-dnd', async () => { + try { + const isDND = getDoNotDisturb(); + debug('Fetching DND state, set to', isDND); + return isDND; + } catch (e) { + console.error(e); + } + }); +}; diff --git a/src/electron/ipc-api/download.js b/src/electron/ipc-api/download.js index 36eca3c9f..16de66229 100644 --- a/src/electron/ipc-api/download.js +++ b/src/electron/ipc-api/download.js @@ -17,9 +17,15 @@ function decodeBase64Image(dataString) { export default (params) => { ipcMain.on('download-file', async (event, { url, content, fileOptions = {} }) => { + // We're passing a fake browserWindow to `electron-dl` in order to access the + // webContents of the webview that has initiated the download + const fakeWindow = { + webContents: event.sender.webContents, + }; + try { if (!content) { - const dl = await download(params.mainWindow, url, { + const dl = await download(fakeWindow, url, { saveAs: true, }); debug('File saved to', dl.savePath); @@ -27,14 +33,20 @@ export default (params) => { const extension = mime.extension(fileOptions.mime); const filename = `${fileOptions.name}.${extension}`; - dialog.showSaveDialog(params.mainWindow, { - defaultPath: filename, - }, (name) => { + try { + const saveDialog = await dialog.showSaveDialog(params.mainWindow, { + defaultPath: filename, + }); + + if (saveDialog.canceled) return; + const binaryImage = decodeBase64Image(content); - fs.writeFileSync(name, binaryImage, 'binary'); + fs.writeFileSync(saveDialog.filePath, binaryImage, 'binary'); - debug('File blob saved to', name); - }); + debug('File blob saved to', saveDialog.filePath); + } catch (err) { + console.log(err); + } } } catch (e) { console.error(e); diff --git a/src/electron/ipc-api/index.js b/src/electron/ipc-api/index.js index dcdef6b32..6181e5628 100644 --- a/src/electron/ipc-api/index.js +++ b/src/electron/ipc-api/index.js @@ -4,6 +4,8 @@ import appIndicator from './appIndicator'; import download from './download'; import processManager from './processManager'; import localServer from './localServer'; +import cld from './cld'; +import dnd from './dnd'; export default (params) => { settings(params); @@ -12,4 +14,6 @@ export default (params) => { download(params); processManager(params); localServer(params); + cld(params); + dnd(); }; diff --git a/src/electron/ipc-api/settings.js b/src/electron/ipc-api/settings.js index 6d48c54e3..15182739c 100644 --- a/src/electron/ipc-api/settings.js +++ b/src/electron/ipc-api/settings.js @@ -2,11 +2,9 @@ import { ipcMain } from 'electron'; export default (params) => { ipcMain.on('getAppSettings', (event, type) => { - const cleanData = JSON.parse(JSON.stringify(params.settings[type].all)); - params.mainWindow.webContents.send('appSettings', { type, - data: cleanData, + data: params.settings[type].allSerialized, }); }); -- cgit v1.2.3-70-g09d2