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. --- src/environment.js | 60 ++++++++++++++++++++-------------------- src/helpers/userAgent-helpers.js | 14 +++++----- src/index.js | 9 +++--- src/lib/Menu.js | 8 ++---- src/stores/AppStore.js | 8 ++++-- 5 files changed, 48 insertions(+), 51 deletions(-) (limited to 'src') 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-70-g09d2