diff options
author | Kristóf Marussy <kristof@marussy.com> | 2022-01-09 20:33:53 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2022-01-09 20:33:53 +0100 |
commit | d85f09cbed5f3d2501f791e689011ae127df1cbb (patch) | |
tree | 0ed5be55dd5d3dec1d51eb60e7ff229274030a57 /packages/main/src/index.ts | |
parent | build: Disable single-run eslint-typescript (diff) | |
download | sophie-d85f09cbed5f3d2501f791e689011ae127df1cbb.tar.gz sophie-d85f09cbed5f3d2501f791e689011ae127df1cbb.tar.zst sophie-d85f09cbed5f3d2501f791e689011ae127df1cbb.zip |
build: Add prettier
eslint will also enforce prettier rules, so there is no need to call
prettier separately in CI.
Signed-off-by: Kristóf Marussy <kristof@marussy.com>
Diffstat (limited to 'packages/main/src/index.ts')
-rw-r--r-- | packages/main/src/index.ts | 108 |
1 files changed, 63 insertions, 45 deletions
diff --git a/packages/main/src/index.ts b/packages/main/src/index.ts index bc10b4c..1f80e44 100644 --- a/packages/main/src/index.ts +++ b/packages/main/src/index.ts | |||
@@ -33,12 +33,7 @@ import { | |||
33 | MainToRendererIpcMessage, | 33 | MainToRendererIpcMessage, |
34 | RendererToMainIpcMessage, | 34 | RendererToMainIpcMessage, |
35 | } from '@sophie/shared'; | 35 | } from '@sophie/shared'; |
36 | import { | 36 | import { app, BrowserView, BrowserWindow, ipcMain } from 'electron'; |
37 | app, | ||
38 | BrowserView, | ||
39 | BrowserWindow, | ||
40 | ipcMain, | ||
41 | } from 'electron'; | ||
42 | import { ensureDirSync, readFile, readFileSync } from 'fs-extra'; | 37 | import { ensureDirSync, readFile, readFileSync } from 'fs-extra'; |
43 | import { autorun } from 'mobx'; | 38 | import { autorun } from 'mobx'; |
44 | import { getSnapshot, onPatch } from 'mobx-state-tree'; | 39 | import { getSnapshot, onPatch } from 'mobx-state-tree'; |
@@ -97,7 +92,9 @@ app.setAboutPanelOptions({ | |||
97 | `Node.js: ${process.versions.node}`, | 92 | `Node.js: ${process.versions.node}`, |
98 | `Platform: ${osName()}`, | 93 | `Platform: ${osName()}`, |
99 | `Arch: ${arch()}`, | 94 | `Arch: ${arch()}`, |
100 | `Build date: ${new Date(Number(import.meta.env.BUILD_DATE)).toLocaleString()}`, | 95 | `Build date: ${new Date( |
96 | Number(import.meta.env.BUILD_DATE), | ||
97 | ).toLocaleString()}`, | ||
101 | `Git SHA: ${import.meta.env.GIT_SHA}`, | 98 | `Git SHA: ${import.meta.env.GIT_SHA}`, |
102 | `Git branch: ${import.meta.env.GIT_BRANCH}`, | 99 | `Git branch: ${import.meta.env.GIT_BRANCH}`, |
103 | ].join('\n'), | 100 | ].join('\n'), |
@@ -123,11 +120,13 @@ const serviceInject: WebSource = { | |||
123 | let mainWindow: BrowserWindow | null = null; | 120 | let mainWindow: BrowserWindow | null = null; |
124 | 121 | ||
125 | const store = createMainStore(); | 122 | const store = createMainStore(); |
126 | init(store).then((disposeCompositionRoot) => { | 123 | init(store) |
127 | app.on('will-quit', disposeCompositionRoot); | 124 | .then((disposeCompositionRoot) => { |
128 | }).catch((err) => { | 125 | app.on('will-quit', disposeCompositionRoot); |
129 | log.log('Failed to initialize application', err); | 126 | }) |
130 | }); | 127 | .catch((err) => { |
128 | log.log('Failed to initialize application', err); | ||
129 | }); | ||
131 | 130 | ||
132 | const rendererBaseUrl = getResourceUrl('../renderer/'); | 131 | const rendererBaseUrl = getResourceUrl('../renderer/'); |
133 | function shouldCancelMainWindowRequest(url: string, method: string): boolean { | 132 | function shouldCancelMainWindowRequest(url: string, method: string): boolean { |
@@ -141,12 +140,20 @@ function shouldCancelMainWindowRequest(url: string, method: string): boolean { | |||
141 | return true; | 140 | return true; |
142 | } | 141 | } |
143 | if (isDevelopment) { | 142 | if (isDevelopment) { |
144 | if (DEVMODE_ALLOWED_URL_PREFIXES.some((prefix) => normalizedUrl.startsWith(prefix))) { | 143 | if ( |
144 | DEVMODE_ALLOWED_URL_PREFIXES.some((prefix) => | ||
145 | normalizedUrl.startsWith(prefix), | ||
146 | ) | ||
147 | ) { | ||
145 | return false; | 148 | return false; |
146 | } | 149 | } |
147 | if (import.meta.env.VITE_DEV_SERVER_URL !== undefined) { | 150 | if (import.meta.env.VITE_DEV_SERVER_URL !== undefined) { |
148 | const isHttp = normalizedUrl.startsWith(import.meta.env.VITE_DEV_SERVER_URL); | 151 | const isHttp = normalizedUrl.startsWith( |
149 | const isWs = normalizedUrl.startsWith(import.meta.env.VITE_DEV_SERVER_URL.replace(/^http:/, 'ws:')); | 152 | import.meta.env.VITE_DEV_SERVER_URL, |
153 | ); | ||
154 | const isWs = normalizedUrl.startsWith( | ||
155 | import.meta.env.VITE_DEV_SERVER_URL.replace(/^http:/, 'ws:'), | ||
156 | ); | ||
150 | return !isHttp && !isWs; | 157 | return !isHttp && !isWs; |
151 | } | 158 | } |
152 | } | 159 | } |
@@ -168,19 +175,24 @@ async function createWindow(): Promise<unknown> { | |||
168 | 175 | ||
169 | webContents.userAgent = originalUserAgent; | 176 | webContents.userAgent = originalUserAgent; |
170 | 177 | ||
171 | webContents.session.setPermissionRequestHandler((_webContents, _permission, callback) => { | 178 | webContents.session.setPermissionRequestHandler( |
172 | callback(false); | 179 | (_webContents, _permission, callback) => { |
173 | }); | 180 | callback(false); |
181 | }, | ||
182 | ); | ||
174 | 183 | ||
175 | webContents.session.webRequest.onBeforeRequest(({ url, method }, callback) => { | 184 | webContents.session.webRequest.onBeforeRequest( |
176 | callback({ | 185 | ({ url, method }, callback) => { |
177 | cancel: shouldCancelMainWindowRequest(url, method), | 186 | callback({ |
178 | }); | 187 | cancel: shouldCancelMainWindowRequest(url, method), |
179 | }); | 188 | }); |
189 | }, | ||
190 | ); | ||
180 | 191 | ||
181 | const pageUrl = (isDevelopment && import.meta.env.VITE_DEV_SERVER_URL !== undefined) | 192 | const pageUrl = |
182 | ? import.meta.env.VITE_DEV_SERVER_URL | 193 | isDevelopment && import.meta.env.VITE_DEV_SERVER_URL !== undefined |
183 | : getResourceUrl('../renderer/dist/index.html'); | 194 | ? import.meta.env.VITE_DEV_SERVER_URL |
195 | : getResourceUrl('../renderer/dist/index.html'); | ||
184 | 196 | ||
185 | webContents.on('will-navigate', (event, url) => { | 197 | webContents.on('will-navigate', (event, url) => { |
186 | if (url !== pageUrl) { | 198 | if (url !== pageUrl) { |
@@ -273,9 +285,8 @@ async function createWindow(): Promise<unknown> { | |||
273 | webContents.send(MainToRendererIpcMessage.SharedStorePatch, patch); | 285 | webContents.send(MainToRendererIpcMessage.SharedStorePatch, patch); |
274 | }); | 286 | }); |
275 | 287 | ||
276 | ipcMain.handle( | 288 | ipcMain.handle(ServiceToMainIpcMessage.ApiExposedInMainWorld, (event) => |
277 | ServiceToMainIpcMessage.ApiExposedInMainWorld, | 289 | event.sender.id === browserView.webContents.id ? serviceInject : null, |
278 | (event) => (event.sender.id === browserView.webContents.id ? serviceInject : null), | ||
279 | ); | 290 | ); |
280 | 291 | ||
281 | browserView.webContents.on('ipc-message', (_event, channel, ...args) => { | 292 | browserView.webContents.on('ipc-message', (_event, channel, ...args) => { |
@@ -305,7 +316,9 @@ async function createWindow(): Promise<unknown> { | |||
305 | 316 | ||
306 | browserView.webContents.session.webRequest.onBeforeSendHeaders( | 317 | browserView.webContents.session.webRequest.onBeforeSendHeaders( |
307 | ({ url, requestHeaders }, callback) => { | 318 | ({ url, requestHeaders }, callback) => { |
308 | const requestUserAgent = url.match(/^[^:]+:\/\/accounts\.google\.[^./]+\//) | 319 | const requestUserAgent = url.match( |
320 | /^[^:]+:\/\/accounts\.google\.[^./]+\//, | ||
321 | ) | ||
309 | ? chromelessUserAgent | 322 | ? chromelessUserAgent |
310 | : userAgent; | 323 | : userAgent; |
311 | callback({ | 324 | callback({ |
@@ -317,9 +330,11 @@ async function createWindow(): Promise<unknown> { | |||
317 | }, | 330 | }, |
318 | ); | 331 | ); |
319 | 332 | ||
320 | browserView.webContents.loadURL('https://gitlab.com/say-hi-to-sophie/sophie').catch((err) => { | 333 | browserView.webContents |
321 | log.error('Failed to load browser', err); | 334 | .loadURL('https://gitlab.com/say-hi-to-sophie/sophie') |
322 | }); | 335 | .catch((err) => { |
336 | log.error('Failed to load browser', err); | ||
337 | }); | ||
323 | 338 | ||
324 | return mainWindow.loadURL(pageUrl); | 339 | return mainWindow.loadURL(pageUrl); |
325 | } | 340 | } |
@@ -342,17 +357,20 @@ app.on('window-all-closed', () => { | |||
342 | } | 357 | } |
343 | }); | 358 | }); |
344 | 359 | ||
345 | app.whenReady().then(async () => { | 360 | app |
346 | if (isDevelopment) { | 361 | .whenReady() |
347 | try { | 362 | .then(async () => { |
348 | await installDevToolsExtensions(); | 363 | if (isDevelopment) { |
349 | } catch (err) { | 364 | try { |
350 | log.error('Failed to install devtools extensions', err); | 365 | await installDevToolsExtensions(); |
366 | } catch (err) { | ||
367 | log.error('Failed to install devtools extensions', err); | ||
368 | } | ||
351 | } | 369 | } |
352 | } | ||
353 | 370 | ||
354 | return createWindow(); | 371 | return createWindow(); |
355 | }).catch((err) => { | 372 | }) |
356 | log.error('Failed to create window', err); | 373 | .catch((err) => { |
357 | process.exit(1); | 374 | log.error('Failed to create window', err); |
358 | }); | 375 | process.exit(1); |
376 | }); | ||