aboutsummaryrefslogtreecommitdiffstats
path: root/src/environment.ts
diff options
context:
space:
mode:
authorLibravatar Markus Hatvan <markus_hatvan@aon.at>2021-09-18 11:15:25 +0200
committerLibravatar GitHub <noreply@github.com>2021-09-18 11:15:25 +0200
commitd4101a48b3eee8b1fb177831aa02a4b4fbec2588 (patch)
treec92f2fbe91197fde8589207463d0d6526b4ff76b /src/environment.ts
parent5.6.3-nightly.6 [skip ci] (diff)
downloadferdium-app-d4101a48b3eee8b1fb177831aa02a4b4fbec2588.tar.gz
ferdium-app-d4101a48b3eee8b1fb177831aa02a4b4fbec2588.tar.zst
ferdium-app-d4101a48b3eee8b1fb177831aa02a4b4fbec2588.zip
chore: convert various files from JS to TS (#1959)
Diffstat (limited to 'src/environment.ts')
-rw-r--r--src/environment.ts205
1 files changed, 205 insertions, 0 deletions
diff --git a/src/environment.ts b/src/environment.ts
new file mode 100644
index 000000000..ca1380199
--- /dev/null
+++ b/src/environment.ts
@@ -0,0 +1,205 @@
1import os from 'os';
2import { join } from 'path';
3
4import { is, api as electronApi } from 'electron-util';
5
6import { DEFAULT_ACCENT_COLOR } from '@meetfranz/theme';
7
8import osName from 'os-name';
9import {
10 LIVE_FERDI_API,
11 DEV_FRANZ_API,
12 LOCAL_API,
13 LOCAL_API_WEBSITE,
14 DEV_API_FRANZ_WEBSITE,
15 LIVE_API_FERDI_WEBSITE,
16 LIVE_WS_API,
17 LOCAL_WS_API,
18 DEV_WS_API,
19 LOCAL_TODOS_FRONTEND_URL,
20 PRODUCTION_TODOS_FRONTEND_URL,
21 DEFAULT_TODO_SERVICE,
22 SEARCH_ENGINE_DDG,
23 iconSizeBias,
24} from './config';
25
26import { asarPath } from './helpers/asar-helpers';
27
28// @ts-expect-error Cannot find module './buildInfo.json' or its corresponding type declarations.
29import * as buildInfo from './buildInfo.json';
30
31export const { app } = electronApi;
32export const ferdiVersion = app.getVersion();
33export const electronVersion = process.versions.electron;
34export const chromeVersion = process.versions.chrome;
35export const nodeVersion = process.versions.node;
36export const ferdiLocale = app.getLocale();
37
38// Set app directory before loading user modules
39if (process.env.FERDI_APPDATA_DIR != null) {
40 app.setPath('appData', process.env.FERDI_APPDATA_DIR);
41 app.setPath('userData', join(app.getPath('appData')));
42} else if (process.env.PORTABLE_EXECUTABLE_DIR != null) {
43 app.setPath(
44 'appData',
45 process.env.PORTABLE_EXECUTABLE_DIR,
46 `${app.name}AppData`,
47 );
48 app.setPath('userData', join(app.getPath('appData'), `${app.name}AppData`));
49} else if (is.windows) {
50 app.setPath('appData', process.env.APPDATA);
51 app.setPath('userData', join(app.getPath('appData'), app.name));
52}
53
54export const isDevMode = is.development;
55if (isDevMode) {
56 app.setPath('userData', join(app.getPath('appData'), `${app.name}Dev`));
57}
58
59export function userDataPath(...segments: string[]) {
60 return join(app.getPath('userData'), ...[segments].flat());
61}
62
63export function userDataRecipesPath(...segments: any[]) {
64 return userDataPath('recipes', ...[segments].flat());
65}
66
67// Replacing app.asar is not beautiful but unfortunately necessary
68export function asarRecipesPath(...segments: any[]) {
69 return join(asarPath(join(__dirname, 'recipes')), ...[segments].flat());
70}
71
72export const useLiveAPI = process.env.USE_LIVE_API;
73const useLocalAPI = process.env.USE_LOCAL_API;
74
75export const isMac = is.macos;
76export const isWindows = is.windows;
77export const isLinux = is.linux;
78export const osPlatform = os.platform();
79export const osArch = os.arch();
80export const osRelease = os.release();
81export const is64Bit = osArch.match(/64/);
82
83// for accelerator, show the shortform that electron/OS understands
84// for tooltip, show symbol
85const ctrlKey = isMac ? '⌘' : 'Ctrl';
86const cmdKey = isMac ? 'Cmd' : 'Ctrl';
87
88export const altKey = (isAccelerator = true) =>
89 !isAccelerator && isMac ? '⌥' : 'Alt';
90export const shiftKey = (isAccelerator = true) =>
91 !isAccelerator && isMac ? '⇧' : 'Shift';
92
93// Platform specific shortcut keys
94export const cmdOrCtrlShortcutKey = (isAccelerator = true) =>
95 isAccelerator ? cmdKey : ctrlKey;
96export const lockFerdiShortcutKey = (isAccelerator = true) =>
97 `${cmdOrCtrlShortcutKey(isAccelerator)}+${shiftKey(isAccelerator)}+L`;
98export const todosToggleShortcutKey = (isAccelerator = true) =>
99 `${cmdOrCtrlShortcutKey(isAccelerator)}+T`;
100export const workspaceToggleShortcutKey = (isAccelerator = true) =>
101 `${cmdOrCtrlShortcutKey(isAccelerator)}+D`;
102export const muteFerdiShortcutKey = (isAccelerator = true) =>
103 `${cmdOrCtrlShortcutKey(isAccelerator)}+${shiftKey(isAccelerator)}+M`;
104export const addNewServiceShortcutKey = (isAccelerator = true) =>
105 `${cmdOrCtrlShortcutKey(isAccelerator)}+N`;
106export const settingsShortcutKey = (isAccelerator = true) =>
107 `${cmdOrCtrlShortcutKey(isAccelerator)}+${isMac ? ',' : 'P'}`;
108
109let api: string;
110let wsApi: string;
111let web: string;
112let todos: string;
113if (!isDevMode || (isDevMode && useLiveAPI)) {
114 api = LIVE_FERDI_API;
115 wsApi = LIVE_WS_API;
116 web = LIVE_API_FERDI_WEBSITE;
117 todos = PRODUCTION_TODOS_FRONTEND_URL;
118} else if (isDevMode && useLocalAPI) {
119 api = LOCAL_API;
120 wsApi = LOCAL_WS_API;
121 web = LOCAL_API_WEBSITE;
122 todos = LOCAL_TODOS_FRONTEND_URL;
123} else {
124 api = DEV_FRANZ_API;
125 wsApi = DEV_WS_API;
126 web = DEV_API_FRANZ_WEBSITE;
127 todos = PRODUCTION_TODOS_FRONTEND_URL;
128}
129
130export const API = api;
131export const API_VERSION = 'v1';
132export const WS_API = wsApi;
133export const WEBSITE = web;
134export const TODOS_FRONTEND = todos;
135
136export const DEFAULT_APP_SETTINGS = {
137 autoLaunchInBackground: false,
138 runInBackground: true,
139 reloadAfterResume: true,
140 enableSystemTray: true,
141 startMinimized: false,
142 confirmOnQuit: false,
143 minimizeToSystemTray: false,
144 closeToSystemTray: false,
145 privateNotifications: false,
146 clipboardNotifications: true,
147 notifyTaskBarOnMessage: false,
148 showDisabledServices: true,
149 showMessageBadgeWhenMuted: true,
150 showDragArea: false,
151 enableSpellchecking: true,
152 spellcheckerLanguage: 'en-us',
153 darkMode: isMac && electronApi.nativeTheme.shouldUseDarkColors,
154 splitMode: false,
155 locale: '',
156 fallbackLocale: 'en-US',
157 beta: false,
158 isAppMuted: false,
159 enableGPUAcceleration: true,
160
161 // Ferdi specific options
162 server: LIVE_FERDI_API,
163 predefinedTodoServer: DEFAULT_TODO_SERVICE,
164 autohideMenuBar: false,
165 lockingFeatureEnabled: false,
166 locked: false,
167 lockedPassword: '',
168 useTouchIdToUnlock: true,
169 scheduledDNDEnabled: false,
170 scheduledDNDStart: '17:00',
171 scheduledDNDEnd: '09:00',
172 hibernateOnStartup: true,
173 hibernationStrategy: '300', // seconds
174 wakeUpStrategy: '300', // seconds
175 inactivityLock: 0,
176 automaticUpdates: true,
177 showServiceNavigationBar: false,
178 universalDarkMode: true,
179 userAgentPref: '',
180 adaptableDarkMode: true,
181 accentColor: DEFAULT_ACCENT_COLOR,
182 serviceRibbonWidth: 68,
183 iconSize: iconSizeBias,
184 sentry: false,
185 nightly: false,
186 navigationBarBehaviour: 'custom',
187 searchEngine: SEARCH_ENGINE_DDG,
188 useVerticalStyle: false,
189 alwaysShowWorkspaces: false,
190 liftSingleInstanceLock: false,
191};
192
193export function aboutAppDetails() {
194 return [
195 `Version: ${ferdiVersion}`,
196 `Electron: ${electronVersion}`,
197 `Chrome: ${chromeVersion}`,
198 `Node.js: ${nodeVersion}`,
199 `Platform: ${osName()}`,
200 `Arch: ${process.arch}`,
201 `Build date: ${new Date(Number(buildInfo.timestamp))}`,
202 `Git SHA: ${buildInfo.gitHashShort}`,
203 `Git branch: ${buildInfo.gitBranch}`,
204 ].join('\n');
205}