diff options
author | Vijay Raghavan Aravamudhan <vraravam@users.noreply.github.com> | 2021-08-08 00:01:37 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-08 05:31:37 +0530 |
commit | 97d51a7763b14c92ee71ff9a012311dd9498d803 (patch) | |
tree | bd36005031ecb1148f27aa541e7a92a5e3aa4c0c /src/electron | |
parent | 5.6.1-nightly.17 [skip ci] (diff) | |
download | ferdium-app-97d51a7763b14c92ee71ff9a012311dd9498d803.tar.gz ferdium-app-97d51a7763b14c92ee71ff9a012311dd9498d803.tar.zst ferdium-app-97d51a7763b14c92ee71ff9a012311dd9498d803.zip |
refactor: path-references refactoring and using 'import' instead of 'require' (#1752)
* refactor references to 'userData' and 'appData' directories to move hardcoding into single location
* convert to es6 for lower memory usage as per https://codesource.io/the-difference-between-import-and-require-in-javascript/
Diffstat (limited to 'src/electron')
-rw-r--r-- | src/electron/Settings.js | 6 | ||||
-rw-r--r-- | src/electron/ipc-api/appIndicator.js | 4 | ||||
-rw-r--r-- | src/electron/ipc-api/download.js | 4 | ||||
-rw-r--r-- | src/electron/ipc-api/localServer.js | 5 | ||||
-rw-r--r-- | src/electron/macOSPermissions.js | 46 | ||||
-rw-r--r-- | src/electron/webview-ime-focus.js | 4 |
6 files changed, 36 insertions, 33 deletions
diff --git a/src/electron/Settings.js b/src/electron/Settings.js index 2f3f8261a..4dd9f8245 100644 --- a/src/electron/Settings.js +++ b/src/electron/Settings.js | |||
@@ -1,8 +1,6 @@ | |||
1 | import { observable, toJS } from 'mobx'; | 1 | import { observable, toJS } from 'mobx'; |
2 | import { pathExistsSync, outputJsonSync, readJsonSync } from 'fs-extra'; | 2 | import { pathExistsSync, outputJsonSync, readJsonSync } from 'fs-extra'; |
3 | import path from 'path'; | 3 | import { userDataPath } from '../environment'; |
4 | |||
5 | import { SETTINGS_PATH } from '../environment'; | ||
6 | 4 | ||
7 | const debug = require('debug')('Ferdi:Settings'); | 5 | const debug = require('debug')('Ferdi:Settings'); |
8 | 6 | ||
@@ -58,6 +56,6 @@ export default class Settings { | |||
58 | } | 56 | } |
59 | 57 | ||
60 | get settingsFile() { | 58 | get settingsFile() { |
61 | return path.join(SETTINGS_PATH, `${this.type === 'app' ? 'settings' : this.type}.json`); | 59 | return userDataPath('config', `${this.type === 'app' ? 'settings' : this.type}.json`); |
62 | } | 60 | } |
63 | } | 61 | } |
diff --git a/src/electron/ipc-api/appIndicator.js b/src/electron/ipc-api/appIndicator.js index 0691e5170..c6c261d0f 100644 --- a/src/electron/ipc-api/appIndicator.js +++ b/src/electron/ipc-api/appIndicator.js | |||
@@ -1,5 +1,5 @@ | |||
1 | import { app, ipcMain } from 'electron'; | 1 | import { app, ipcMain } from 'electron'; |
2 | import path from 'path'; | 2 | import { join } from 'path'; |
3 | import { autorun } from 'mobx'; | 3 | import { autorun } from 'mobx'; |
4 | import { isMac, isWindows, isLinux } from '../../environment'; | 4 | import { isMac, isWindows, isLinux } from '../../environment'; |
5 | 5 | ||
@@ -9,7 +9,7 @@ const FILE_EXTENSION = isWindows ? 'ico' : 'png'; | |||
9 | let isTrayIconEnabled; | 9 | let isTrayIconEnabled; |
10 | 10 | ||
11 | function getAsset(type, asset) { | 11 | function getAsset(type, asset) { |
12 | return path.join( | 12 | return join( |
13 | __dirname, '..', '..', 'assets', 'images', type, process.platform, `${asset}.${FILE_EXTENSION}`, | 13 | __dirname, '..', '..', 'assets', 'images', type, process.platform, `${asset}.${FILE_EXTENSION}`, |
14 | ); | 14 | ); |
15 | } | 15 | } |
diff --git a/src/electron/ipc-api/download.js b/src/electron/ipc-api/download.js index 7f8718924..ba261ba1e 100644 --- a/src/electron/ipc-api/download.js +++ b/src/electron/ipc-api/download.js | |||
@@ -1,7 +1,7 @@ | |||
1 | import { ipcMain, dialog, BrowserWindow } from 'electron'; | 1 | import { ipcMain, dialog, BrowserWindow } from 'electron'; |
2 | import { download } from 'electron-dl'; | 2 | import { download } from 'electron-dl'; |
3 | import mime from 'mime-types'; | 3 | import mime from 'mime-types'; |
4 | import fs from 'fs-extra'; | 4 | import { writeFileSync } from 'fs-extra'; |
5 | 5 | ||
6 | const debug = require('debug')('Ferdi:ipcApi:download'); | 6 | const debug = require('debug')('Ferdi:ipcApi:download'); |
7 | 7 | ||
@@ -37,7 +37,7 @@ export default (params) => { | |||
37 | if (saveDialog.canceled) return; | 37 | if (saveDialog.canceled) return; |
38 | 38 | ||
39 | const binaryImage = decodeBase64Image(content); | 39 | const binaryImage = decodeBase64Image(content); |
40 | fs.writeFileSync(saveDialog.filePath, binaryImage, 'binary'); | 40 | writeFileSync(saveDialog.filePath, binaryImage, 'binary'); |
41 | 41 | ||
42 | debug('File blob saved to', saveDialog.filePath); | 42 | debug('File blob saved to', saveDialog.filePath); |
43 | } catch (err) { | 43 | } catch (err) { |
diff --git a/src/electron/ipc-api/localServer.js b/src/electron/ipc-api/localServer.js index 493253e17..1ed4b7167 100644 --- a/src/electron/ipc-api/localServer.js +++ b/src/electron/ipc-api/localServer.js | |||
@@ -1,6 +1,7 @@ | |||
1 | import { ipcMain, app } from 'electron'; | 1 | import { ipcMain } from 'electron'; |
2 | import net from 'net'; | 2 | import net from 'net'; |
3 | import { LOCAL_HOSTNAME } from '../../config'; | 3 | import { LOCAL_HOSTNAME } from '../../config'; |
4 | import { userDataPath } from '../../environment'; | ||
4 | import startServer from '../../internal-server/start'; | 5 | import startServer from '../../internal-server/start'; |
5 | 6 | ||
6 | const DEFAULT_PORT = 45569; | 7 | const DEFAULT_PORT = 45569; |
@@ -37,7 +38,7 @@ export default (params) => { | |||
37 | } | 38 | } |
38 | console.log('Starting local server on port', port); | 39 | console.log('Starting local server on port', port); |
39 | 40 | ||
40 | startServer(app.getPath('userData'), port); | 41 | startServer(userDataPath(), port); |
41 | 42 | ||
42 | params.mainWindow.webContents.send('localServerPort', { | 43 | params.mainWindow.webContents.send('localServerPort', { |
43 | port, | 44 | port, |
diff --git a/src/electron/macOSPermissions.js b/src/electron/macOSPermissions.js index c114f4843..887af2903 100644 --- a/src/electron/macOSPermissions.js +++ b/src/electron/macOSPermissions.js | |||
@@ -1,45 +1,43 @@ | |||
1 | import { app, systemPreferences, dialog } from 'electron'; | 1 | import { systemPreferences, dialog } from 'electron'; |
2 | import fs from 'fs'; | 2 | import { pathExistsSync, mkdirSync, writeFileSync } from 'fs-extra'; |
3 | import macosVersion from 'macos-version'; | 3 | import macosVersion from 'macos-version'; |
4 | import path from 'path'; | 4 | import { dirname } from 'path'; |
5 | import { askForScreenCaptureAccess } from 'node-mac-permissions'; | 5 | import { askForScreenCaptureAccess } from 'node-mac-permissions'; |
6 | import { userDataPath } from '../environment'; | ||
6 | 7 | ||
7 | const debug = require('debug')('Ferdi:macOSPermissions'); | 8 | const debug = require('debug')('Ferdi:macOSPermissions'); |
8 | 9 | ||
9 | const permissionExists = macosVersion.isGreaterThanOrEqualTo('10.15'); | 10 | const isExplicitScreenCapturePermissionReqd = macosVersion.isGreaterThanOrEqualTo('10.15'); |
10 | const filePath = path.join( | 11 | debug(`Should check explicitly for screen-capture permissions: ${isExplicitScreenCapturePermissionReqd}`); |
11 | app.getPath('userData'), | ||
12 | '.has-app-requested-screen-capture-permissions', | ||
13 | ); | ||
14 | 12 | ||
15 | function hasPromptedForPermission() { | 13 | const filePath = userDataPath('.has-app-requested-screen-capture-permissions'); |
16 | if (!permissionExists) { | ||
17 | return false; | ||
18 | } | ||
19 | 14 | ||
20 | if (filePath && fs.existsSync(filePath)) { | 15 | function hasPromptedForScreenCapturePermission() { |
21 | return true; | 16 | if (!isExplicitScreenCapturePermissionReqd) { |
17 | return false; | ||
22 | } | 18 | } |
23 | 19 | ||
24 | return false; | 20 | debug('Checking if status file exists'); |
21 | return filePath && pathExistsSync(filePath); | ||
25 | } | 22 | } |
26 | 23 | ||
27 | function hasScreenCapturePermission() { | 24 | function hasScreenCapturePermissionAlreadyBeenGranted() { |
28 | if (!permissionExists) { | 25 | if (!isExplicitScreenCapturePermissionReqd) { |
29 | return true; | 26 | return true; |
30 | } | 27 | } |
31 | 28 | ||
32 | const screenCaptureStatus = systemPreferences.getMediaAccessStatus('screen'); | 29 | const screenCaptureStatus = systemPreferences.getMediaAccessStatus('screen'); |
30 | debug(`screen-capture permissions status: ${screenCaptureStatus}`); | ||
33 | return screenCaptureStatus === 'granted'; | 31 | return screenCaptureStatus === 'granted'; |
34 | } | 32 | } |
35 | 33 | ||
36 | function createStatusFile() { | 34 | function createStatusFile() { |
37 | try { | 35 | try { |
38 | fs.writeFileSync(filePath, ''); | 36 | writeFileSync(filePath, ''); |
39 | } catch (error) { | 37 | } catch (error) { |
40 | if (error.code === 'ENOENT') { | 38 | if (error.code === 'ENOENT') { |
41 | fs.mkdirSync(path.dirname(filePath)); | 39 | mkdirSync(dirname(filePath)); |
42 | fs.writeFileSync(filePath, ''); | 40 | writeFileSync(filePath, ''); |
43 | } | 41 | } |
44 | 42 | ||
45 | throw error; | 43 | throw error; |
@@ -51,7 +49,13 @@ export const askFormacOSPermissions = async mainWindow => { | |||
51 | systemPreferences.askForMediaAccess('camera'); | 49 | systemPreferences.askForMediaAccess('camera'); |
52 | systemPreferences.askForMediaAccess('microphone'); | 50 | systemPreferences.askForMediaAccess('microphone'); |
53 | 51 | ||
54 | if (!hasPromptedForPermission() && !hasScreenCapturePermission()) { | 52 | if (hasScreenCapturePermissionAlreadyBeenGranted()) { |
53 | debug('Already obtained screen-capture permissions - writing status file'); | ||
54 | createStatusFile(); | ||
55 | return; | ||
56 | } | ||
57 | |||
58 | if (!hasPromptedForScreenCapturePermission()) { | ||
55 | debug('Checking screen capture permissions'); | 59 | debug('Checking screen capture permissions'); |
56 | 60 | ||
57 | const { response } = await dialog.showMessageBox(mainWindow, { | 61 | const { response } = await dialog.showMessageBox(mainWindow, { |
diff --git a/src/electron/webview-ime-focus.js b/src/electron/webview-ime-focus.js index b9421eb06..e187ee0b4 100644 --- a/src/electron/webview-ime-focus.js +++ b/src/electron/webview-ime-focus.js | |||
@@ -1,5 +1,5 @@ | |||
1 | const { webContents } = require('@electron/remote'); | 1 | import { webContents } from '@electron/remote'; |
2 | const { releaseDocumentFocus } = require('./webview-ime-focus-helpers'); | 2 | import { releaseDocumentFocus } from './webview-ime-focus-helpers'; |
3 | 3 | ||
4 | function giveWebviewDocumentFocus(element) { | 4 | function giveWebviewDocumentFocus(element) { |
5 | releaseDocumentFocus(); | 5 | releaseDocumentFocus(); |