aboutsummaryrefslogtreecommitdiffstats
path: root/src/electron
diff options
context:
space:
mode:
authorLibravatar Vijay Raghavan Aravamudhan <vraravam@users.noreply.github.com>2021-08-08 00:01:37 +0000
committerLibravatar GitHub <noreply@github.com>2021-08-08 05:31:37 +0530
commit97d51a7763b14c92ee71ff9a012311dd9498d803 (patch)
treebd36005031ecb1148f27aa541e7a92a5e3aa4c0c /src/electron
parent5.6.1-nightly.17 [skip ci] (diff)
downloadferdium-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.js6
-rw-r--r--src/electron/ipc-api/appIndicator.js4
-rw-r--r--src/electron/ipc-api/download.js4
-rw-r--r--src/electron/ipc-api/localServer.js5
-rw-r--r--src/electron/macOSPermissions.js46
-rw-r--r--src/electron/webview-ime-focus.js4
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 @@
1import { observable, toJS } from 'mobx'; 1import { observable, toJS } from 'mobx';
2import { pathExistsSync, outputJsonSync, readJsonSync } from 'fs-extra'; 2import { pathExistsSync, outputJsonSync, readJsonSync } from 'fs-extra';
3import path from 'path'; 3import { userDataPath } from '../environment';
4
5import { SETTINGS_PATH } from '../environment';
6 4
7const debug = require('debug')('Ferdi:Settings'); 5const 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 @@
1import { app, ipcMain } from 'electron'; 1import { app, ipcMain } from 'electron';
2import path from 'path'; 2import { join } from 'path';
3import { autorun } from 'mobx'; 3import { autorun } from 'mobx';
4import { isMac, isWindows, isLinux } from '../../environment'; 4import { isMac, isWindows, isLinux } from '../../environment';
5 5
@@ -9,7 +9,7 @@ const FILE_EXTENSION = isWindows ? 'ico' : 'png';
9let isTrayIconEnabled; 9let isTrayIconEnabled;
10 10
11function getAsset(type, asset) { 11function 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 @@
1import { ipcMain, dialog, BrowserWindow } from 'electron'; 1import { ipcMain, dialog, BrowserWindow } from 'electron';
2import { download } from 'electron-dl'; 2import { download } from 'electron-dl';
3import mime from 'mime-types'; 3import mime from 'mime-types';
4import fs from 'fs-extra'; 4import { writeFileSync } from 'fs-extra';
5 5
6const debug = require('debug')('Ferdi:ipcApi:download'); 6const 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 @@
1import { ipcMain, app } from 'electron'; 1import { ipcMain } from 'electron';
2import net from 'net'; 2import net from 'net';
3import { LOCAL_HOSTNAME } from '../../config'; 3import { LOCAL_HOSTNAME } from '../../config';
4import { userDataPath } from '../../environment';
4import startServer from '../../internal-server/start'; 5import startServer from '../../internal-server/start';
5 6
6const DEFAULT_PORT = 45569; 7const 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 @@
1import { app, systemPreferences, dialog } from 'electron'; 1import { systemPreferences, dialog } from 'electron';
2import fs from 'fs'; 2import { pathExistsSync, mkdirSync, writeFileSync } from 'fs-extra';
3import macosVersion from 'macos-version'; 3import macosVersion from 'macos-version';
4import path from 'path'; 4import { dirname } from 'path';
5import { askForScreenCaptureAccess } from 'node-mac-permissions'; 5import { askForScreenCaptureAccess } from 'node-mac-permissions';
6import { userDataPath } from '../environment';
6 7
7const debug = require('debug')('Ferdi:macOSPermissions'); 8const debug = require('debug')('Ferdi:macOSPermissions');
8 9
9const permissionExists = macosVersion.isGreaterThanOrEqualTo('10.15'); 10const isExplicitScreenCapturePermissionReqd = macosVersion.isGreaterThanOrEqualTo('10.15');
10const filePath = path.join( 11debug(`Should check explicitly for screen-capture permissions: ${isExplicitScreenCapturePermissionReqd}`);
11 app.getPath('userData'),
12 '.has-app-requested-screen-capture-permissions',
13);
14 12
15function hasPromptedForPermission() { 13const filePath = userDataPath('.has-app-requested-screen-capture-permissions');
16 if (!permissionExists) {
17 return false;
18 }
19 14
20 if (filePath && fs.existsSync(filePath)) { 15function 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
27function hasScreenCapturePermission() { 24function 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
36function createStatusFile() { 34function 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 @@
1const { webContents } = require('@electron/remote'); 1import { webContents } from '@electron/remote';
2const { releaseDocumentFocus } = require('./webview-ime-focus-helpers'); 2import { releaseDocumentFocus } from './webview-ime-focus-helpers';
3 3
4function giveWebviewDocumentFocus(element) { 4function giveWebviewDocumentFocus(element) {
5 releaseDocumentFocus(); 5 releaseDocumentFocus();