diff options
author | Markus Hatvan <markus_hatvan@aon.at> | 2021-09-18 11:15:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-18 11:15:25 +0200 |
commit | d4101a48b3eee8b1fb177831aa02a4b4fbec2588 (patch) | |
tree | c92f2fbe91197fde8589207463d0d6526b4ff76b /src/environment.ts | |
parent | 5.6.3-nightly.6 [skip ci] (diff) | |
download | ferdium-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.ts | 205 |
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 @@ | |||
1 | import os from 'os'; | ||
2 | import { join } from 'path'; | ||
3 | |||
4 | import { is, api as electronApi } from 'electron-util'; | ||
5 | |||
6 | import { DEFAULT_ACCENT_COLOR } from '@meetfranz/theme'; | ||
7 | |||
8 | import osName from 'os-name'; | ||
9 | import { | ||
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 | |||
26 | import { asarPath } from './helpers/asar-helpers'; | ||
27 | |||
28 | // @ts-expect-error Cannot find module './buildInfo.json' or its corresponding type declarations. | ||
29 | import * as buildInfo from './buildInfo.json'; | ||
30 | |||
31 | export const { app } = electronApi; | ||
32 | export const ferdiVersion = app.getVersion(); | ||
33 | export const electronVersion = process.versions.electron; | ||
34 | export const chromeVersion = process.versions.chrome; | ||
35 | export const nodeVersion = process.versions.node; | ||
36 | export const ferdiLocale = app.getLocale(); | ||
37 | |||
38 | // Set app directory before loading user modules | ||
39 | if (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 | |||
54 | export const isDevMode = is.development; | ||
55 | if (isDevMode) { | ||
56 | app.setPath('userData', join(app.getPath('appData'), `${app.name}Dev`)); | ||
57 | } | ||
58 | |||
59 | export function userDataPath(...segments: string[]) { | ||
60 | return join(app.getPath('userData'), ...[segments].flat()); | ||
61 | } | ||
62 | |||
63 | export function userDataRecipesPath(...segments: any[]) { | ||
64 | return userDataPath('recipes', ...[segments].flat()); | ||
65 | } | ||
66 | |||
67 | // Replacing app.asar is not beautiful but unfortunately necessary | ||
68 | export function asarRecipesPath(...segments: any[]) { | ||
69 | return join(asarPath(join(__dirname, 'recipes')), ...[segments].flat()); | ||
70 | } | ||
71 | |||
72 | export const useLiveAPI = process.env.USE_LIVE_API; | ||
73 | const useLocalAPI = process.env.USE_LOCAL_API; | ||
74 | |||
75 | export const isMac = is.macos; | ||
76 | export const isWindows = is.windows; | ||
77 | export const isLinux = is.linux; | ||
78 | export const osPlatform = os.platform(); | ||
79 | export const osArch = os.arch(); | ||
80 | export const osRelease = os.release(); | ||
81 | export const is64Bit = osArch.match(/64/); | ||
82 | |||
83 | // for accelerator, show the shortform that electron/OS understands | ||
84 | // for tooltip, show symbol | ||
85 | const ctrlKey = isMac ? '⌘' : 'Ctrl'; | ||
86 | const cmdKey = isMac ? 'Cmd' : 'Ctrl'; | ||
87 | |||
88 | export const altKey = (isAccelerator = true) => | ||
89 | !isAccelerator && isMac ? '⌥' : 'Alt'; | ||
90 | export const shiftKey = (isAccelerator = true) => | ||
91 | !isAccelerator && isMac ? '⇧' : 'Shift'; | ||
92 | |||
93 | // Platform specific shortcut keys | ||
94 | export const cmdOrCtrlShortcutKey = (isAccelerator = true) => | ||
95 | isAccelerator ? cmdKey : ctrlKey; | ||
96 | export const lockFerdiShortcutKey = (isAccelerator = true) => | ||
97 | `${cmdOrCtrlShortcutKey(isAccelerator)}+${shiftKey(isAccelerator)}+L`; | ||
98 | export const todosToggleShortcutKey = (isAccelerator = true) => | ||
99 | `${cmdOrCtrlShortcutKey(isAccelerator)}+T`; | ||
100 | export const workspaceToggleShortcutKey = (isAccelerator = true) => | ||
101 | `${cmdOrCtrlShortcutKey(isAccelerator)}+D`; | ||
102 | export const muteFerdiShortcutKey = (isAccelerator = true) => | ||
103 | `${cmdOrCtrlShortcutKey(isAccelerator)}+${shiftKey(isAccelerator)}+M`; | ||
104 | export const addNewServiceShortcutKey = (isAccelerator = true) => | ||
105 | `${cmdOrCtrlShortcutKey(isAccelerator)}+N`; | ||
106 | export const settingsShortcutKey = (isAccelerator = true) => | ||
107 | `${cmdOrCtrlShortcutKey(isAccelerator)}+${isMac ? ',' : 'P'}`; | ||
108 | |||
109 | let api: string; | ||
110 | let wsApi: string; | ||
111 | let web: string; | ||
112 | let todos: string; | ||
113 | if (!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 | |||
130 | export const API = api; | ||
131 | export const API_VERSION = 'v1'; | ||
132 | export const WS_API = wsApi; | ||
133 | export const WEBSITE = web; | ||
134 | export const TODOS_FRONTEND = todos; | ||
135 | |||
136 | export 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 | |||
193 | export 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 | } | ||