From 8fc02b903755bfd209edb1744cc82743aa41ba18 Mon Sep 17 00:00:00 2001 From: Vijay A Date: Sat, 3 Jul 2021 09:43:22 +0530 Subject: Use utility methods from 'electron-util' (already a dependency) rather than re-implementing by ourselves. --- package-lock.json | 18 ++++++------ package.json | 2 +- src/environment.js | 60 ++++++++++++++++++++-------------------- src/helpers/userAgent-helpers.js | 14 +++++----- src/index.js | 9 +++--- src/lib/Menu.js | 8 ++---- src/stores/AppStore.js | 8 ++++-- 7 files changed, 57 insertions(+), 62 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6eae814cb..f6d914dfb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15866,6 +15866,11 @@ "resolved": "https://registry.npmjs.org/electron-find/-/electron-find-1.0.6.tgz", "integrity": "sha512-RenjzlCCzX7edLywLy+qRYvzds11sBv8+SrJu/3l3eVLt9d9uNqCPk+uFZ525uAhSUaUalgZWDlhQdxIgT1khg==" }, + "electron-is-dev": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-1.2.0.tgz", + "integrity": "sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==" + }, "electron-notarize": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.0.0.tgz", @@ -16613,19 +16618,12 @@ } }, "electron-util": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/electron-util/-/electron-util-0.16.0.tgz", - "integrity": "sha512-r13cauuQ8p8d++ZVdeMDtQ2VlpblJBcpKnK7sf2tGnN8CCWyRGYerS2K5f3FiblFIQkyS0rE4tFVG0IOEc2F3A==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/electron-util/-/electron-util-0.17.0.tgz", + "integrity": "sha512-61+NEPdIN68EBC9XDPNAKs14HlPdc7HsL6lfQ+QTiya+3BMzayBqUsvN1LrT7IoGpPuuZns+iaCKf1N78dEF+w==", "requires": { "electron-is-dev": "^1.1.0", "new-github-issue-url": "^0.2.1" - }, - "dependencies": { - "electron-is-dev": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-1.2.0.tgz", - "integrity": "sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==" - } } }, "electron-window-state": { diff --git a/package.json b/package.json index a15f44d9c..097ddd383 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "electron-find": "1.0.6", "electron-react-titlebar": "0.8.2", "electron-updater": "4.3.9", - "electron-util": "0.16.0", + "electron-util": "0.17.0", "electron-window-state": "5.0.3", "fs-extra": "10.0.0", "gulp-csso": "4.0.1", diff --git a/src/environment.js b/src/environment.js index 6a55045a7..be6dc7176 100644 --- a/src/environment.js +++ b/src/environment.js @@ -1,5 +1,7 @@ import path from 'path'; +import { is, api as electronApi } from 'electron-util'; + import { DEFAULT_ACCENT_COLOR } from '@meetfranz/theme'; import { @@ -21,12 +23,16 @@ import { } from './config'; import { asarPath } from './helpers/asar-helpers'; +import * as buildInfo from './buildInfo.json'; // eslint-disable-line import/no-unresolved + +const osName = require('os-name'); -// eslint-disable-next-line global-require -export const { app } = process.type === 'renderer' ? require('@electron/remote') : require('electron'); -const { nativeTheme } = process.type === 'renderer' ? require('@electron/remote') : require('electron'); +export const { app } = electronApi; +export const ferdiVersion = app.getVersion(); +export const electronVersion = process.versions.electron; +export const chromeVersion = process.versions.chrome; +export const nodeVersion = process.versions.node; -// TODO: This seems to be duplicated between here and 'index.js' // Set app directory before loading user modules if (process.env.FERDI_APPDATA_DIR != null) { app.setPath('appData', process.env.FERDI_APPDATA_DIR); @@ -34,27 +40,12 @@ if (process.env.FERDI_APPDATA_DIR != null) { } else if (process.env.PORTABLE_EXECUTABLE_DIR != null) { app.setPath('appData', process.env.PORTABLE_EXECUTABLE_DIR, `${app.name}AppData`); app.setPath('userData', path.join(app.getPath('appData'), `${app.name}AppData`)); -} else if (process.platform === 'win32') { +} else if (is.windows) { app.setPath('appData', process.env.APPDATA); app.setPath('userData', path.join(app.getPath('appData'), app.name)); } -const ELECTRON_IS_DEV_VAR = 'ELECTRON_IS_DEV'; -const NODE_ENV_VAR = 'NODE_ENV'; - -export const isDevMode = (() => { - const isEnvVarSet = name => name in process.env; - if (isEnvVarSet(ELECTRON_IS_DEV_VAR)) { - // Copied from https://github.com/sindresorhus/electron-is-dev/blob/f05330b856782dac7987b10859bfd95ea6a187a6/index.js - // but electron-is-dev breaks in a renderer process, so we use the app import from above instead. - const electronIsDev = process.env[ELECTRON_IS_DEV_VAR]; - return electronIsDev === 'true' || Number.parseInt(electronIsDev, 10) === 1; - } - if (isEnvVarSet(NODE_ENV_VAR)) { - return process.env[NODE_ENV_VAR] === 'development'; - } - return !app.isPackaged; -})(); +export const isDevMode = is.development; if (isDevMode) { app.setPath('userData', path.join(app.getPath('appData'), `${app.name}Dev`)); } @@ -66,14 +57,9 @@ export const RECIPES_PATH = asarPath(path.join(__dirname, 'recipes')); export const useLiveAPI = process.env.LIVE_API; -let { platform } = process; -if (process.env.OS_PLATFORM) { - platform = process.env.OS_PLATFORM; -} - -export const isMac = platform === 'darwin'; -export const isWindows = platform === 'win32'; -export const isLinux = platform === 'linux'; +export const isMac = is.macos; +export const isWindows = is.windows; +export const isLinux = is.linux; export const ctrlKey = isMac ? '⌘' : 'Ctrl'; export const cmdKey = isMac ? 'Cmd' : 'Ctrl'; @@ -123,7 +109,7 @@ export const DEFAULT_APP_SETTINGS = { showDragArea: false, enableSpellchecking: true, spellcheckerLanguage: 'en-us', - darkMode: isMac ? nativeTheme.shouldUseDarkColors : false, + darkMode: isMac && electronApi.nativeTheme.shouldUseDarkColors, locale: '', fallbackLocale: 'en-US', beta: false, @@ -165,3 +151,17 @@ export const DEFAULT_APP_SETTINGS = { export function termsBase() { return window.ferdi.stores.settings.all.app.server !== LIVE_FRANZ_API ? window.ferdi.stores.settings.all.app.server : DEV_API_FRANZ_WEBSITE; } + +export function aboutAppDetails() { + return [ + `Version: ${ferdiVersion}`, + `Electron: ${electronVersion}`, + `Chrome: ${chromeVersion}`, + `Node.js: ${nodeVersion}`, + `Platform: ${osName()}`, + `Arch: ${process.arch}`, + `Build date: ${new Date(Number(buildInfo.timestamp))}`, + `Git SHA: ${buildInfo.gitHashShort}`, + `Git branch: ${buildInfo.gitBranch}`, + ].join('\n'); +} diff --git a/src/helpers/userAgent-helpers.js b/src/helpers/userAgent-helpers.js index 73c454304..fc9a6f507 100644 --- a/src/helpers/userAgent-helpers.js +++ b/src/helpers/userAgent-helpers.js @@ -1,8 +1,8 @@ import os from 'os'; import macosVersion from 'macos-version'; -import { app, isMac, isWindows } from '../environment'; - -export const ferdiVersion = app.getVersion(); +import { + ferdiVersion, electronVersion, chromeVersion, isMac, isWindows, +} from '../environment'; function macOS() { const version = macosVersion(); @@ -34,17 +34,17 @@ export default function userAgent(removeChromeVersion = false, addFerdiVersion = platformString = linux(); } - let chromeVersion = 'Chrome'; + let chromeVersionString = 'Chrome'; if (!removeChromeVersion) { - chromeVersion = `Chrome/${process.versions.chrome}`; + chromeVersionString = `Chrome/${chromeVersion}`; } let applicationString = ''; if (addFerdiVersion) { - applicationString = ` Ferdi/${ferdiVersion} Electron/${process.versions.electron}`; + applicationString = ` Ferdi/${ferdiVersion} Electron/${electronVersion}`; } // Chrome is pinned to WebKit 537.36, the latest version before hard forking to Blink. - return `Mozilla/5.0 (${platformString}) AppleWebKit/537.36 (KHTML, like Gecko) ${chromeVersion} Safari/537.36${applicationString}`; + return `Mozilla/5.0 (${platformString}) AppleWebKit/537.36 (KHTML, like Gecko) ${chromeVersionString} Safari/537.36${applicationString}`; // Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 Ferdi/5.5.1-nightly.13 Electron/8.2.3 } diff --git a/src/index.js b/src/index.js index d3b996540..8a4283f49 100644 --- a/src/index.js +++ b/src/index.js @@ -24,6 +24,7 @@ import { isMac, isWindows, isLinux, + aboutAppDetails, } from './environment'; import { mainIpcHandler as basicAuthHandler } from './features/basicAuth'; @@ -34,14 +35,12 @@ import Settings from './electron/Settings'; import handleDeepLink from './electron/deepLinking'; import { isPositionValid } from './electron/windowUtils'; import { appId } from './package.json'; // eslint-disable-line import/no-unresolved -import * as buildInfo from './buildInfo.json'; // eslint-disable-line import/no-unresolved import './electron/exception'; import { asarPath } from './helpers/asar-helpers'; import { isValidExternalURL } from './helpers/url-helpers'; -import userAgent, { ferdiVersion } from './helpers/userAgent-helpers'; +import userAgent from './helpers/userAgent-helpers'; -const osName = require('os-name'); const debug = require('debug')('Ferdi:App'); // From Electron 9 onwards, app.allowRendererProcessReuse = true by default. This causes the app to crash on Windows due to the @@ -147,7 +146,7 @@ if (!settings.get('enableGPUAcceleration')) { } app.setAboutPanelOptions({ - applicationVersion: `Version: ${ferdiVersion}\nElectron: ${process.versions.electron}\nChrome: ${process.versions.chrome}\nNode.js: ${process.versions.node}\nPlatform: ${osName()}\nArch: ${process.arch}\nBuild date: ${new Date(Number(buildInfo.timestamp))}\nGit SHA: ${buildInfo.gitHashShort}\nGit branch: ${buildInfo.gitBranch}`, + applicationVersion: aboutAppDetails(), version: '', }); @@ -156,7 +155,7 @@ const createWindow = () => { const mainWindowState = windowStateKeeper({ defaultWidth: DEFAULT_WINDOW_OPTIONS.width, defaultHeight: DEFAULT_WINDOW_OPTIONS.height, - maximize: true, // Automatically maximizes the window, if it was last clsoed maximized + maximize: true, // Automatically maximizes the window, if it was last closed maximized fullScreen: true, // Automatically restores the window to full screen, if it was last closed full screen }); diff --git a/src/lib/Menu.js b/src/lib/Menu.js index d66fa009f..c60536f0c 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -6,7 +6,7 @@ import { autorun, observable } from 'mobx'; import { defineMessages } from 'react-intl'; import { CUSTOM_WEBSITE_RECIPE_ID, GITHUB_FERDI_URL, LIVE_API_FERDI_WEBSITE } from '../config'; import { - cmdKey, ctrlKey, isLinux, isMac, termsBase, + cmdKey, ctrlKey, isLinux, isMac, aboutAppDetails, termsBase, } from '../environment'; import { announcementsStore } from '../features/announcements'; import { announcementActions } from '../features/announcements/actions'; @@ -14,10 +14,6 @@ import { todosStore } from '../features/todos'; import { todoActions } from '../features/todos/actions'; import { workspaceActions } from '../features/workspaces/actions'; import { workspaceStore } from '../features/workspaces/index'; -import * as buildInfo from '../buildInfo.json'; // eslint-disable-line import/no-unresolved -import { ferdiVersion } from '../helpers/userAgent-helpers'; - -const osName = require('os-name'); const menuItems = defineMessages({ edit: { @@ -1025,7 +1021,7 @@ export default class FranzMenu { type: 'info', title: 'Franz Ferdinand', message: 'Ferdi', - detail: `Version: ${ferdiVersion}\nElectron: ${process.versions.electron}\nChrome: ${process.versions.chrome}\nNode.js: ${process.versions.node}\nPlatform: ${osName()}\nArch: ${process.arch}\nBuild date: ${new Date(Number(buildInfo.timestamp))}\nGit SHA: ${buildInfo.gitHashShort}\nGit branch: ${buildInfo.gitBranch}`, + detail: aboutAppDetails(), }); }, }; diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js index 3116677c2..bbcf78a43 100644 --- a/src/stores/AppStore.js +++ b/src/stores/AppStore.js @@ -14,7 +14,9 @@ import { readJsonSync } from 'fs-extra'; import Store from './lib/Store'; import Request from './lib/Request'; import { CHECK_INTERVAL } from '../config'; -import { DEFAULT_APP_SETTINGS, isMac } from '../environment'; +import { + DEFAULT_APP_SETTINGS, isMac, ferdiVersion, electronVersion, +} from '../environment'; import locales from '../i18n/translations'; import { onVisibilityChange } from '../helpers/visibility-helper'; import { getLocale } from '../helpers/i18n-helpers'; @@ -263,8 +265,8 @@ export default class AppStore extends Store { screens: screen.getAllDisplays(), }, ferdi: { - version: app.getVersion(), - electron: process.versions.electron, + version: ferdiVersion, + electron: electronVersion, installedRecipes: this.stores.recipes.all.map(recipe => ({ id: recipe.id, version: recipe.version, -- cgit v1.2.3-54-g00ecf