diff options
Diffstat (limited to 'packages/main/src/initReactions.ts')
-rw-r--r-- | packages/main/src/initReactions.ts | 56 |
1 files changed, 36 insertions, 20 deletions
diff --git a/packages/main/src/initReactions.ts b/packages/main/src/initReactions.ts index b6a8502..cbc0265 100644 --- a/packages/main/src/initReactions.ts +++ b/packages/main/src/initReactions.ts | |||
@@ -20,43 +20,59 @@ | |||
20 | 20 | ||
21 | import { app, session } from 'electron'; | 21 | import { app, session } from 'electron'; |
22 | 22 | ||
23 | import ConfigFile from './infrastructure/config/impl/ConfigFile'; | 23 | import LocalizationFiles from './i18n/impl/LocaltizationFiles.js'; |
24 | import UserAgents from './infrastructure/electron/UserAgents'; | 24 | import loadLocalization from './i18n/loadLocalization.js'; |
25 | import ElectronViewFactory from './infrastructure/electron/impl/ElectronViewFactory'; | 25 | import ConfigFile from './infrastructure/config/impl/ConfigFile.js'; |
26 | import { installDevToolsExtensions } from './infrastructure/electron/impl/devTools'; | 26 | import UserAgents from './infrastructure/electron/UserAgents.js'; |
27 | import hardenSession from './infrastructure/electron/impl/hardenSession'; | 27 | import ElectronViewFactory from './infrastructure/electron/impl/ElectronViewFactory.js'; |
28 | import getDistResources from './infrastructure/resources/impl/getDistResources'; | 28 | import { installDevToolsExtensions } from './infrastructure/electron/impl/devTools.js'; |
29 | import loadServices from './reactions/loadServices'; | 29 | import hardenSession from './infrastructure/electron/impl/hardenSession.js'; |
30 | import synchronizeConfig from './reactions/synchronizeConfig'; | 30 | import setApplicationMenu from './infrastructure/electron/impl/setApplicationMenu.js'; |
31 | import synchronizeNativeTheme from './reactions/synchronizeNativeTheme'; | 31 | import getDistResources from './infrastructure/resources/impl/getDistResources.js'; |
32 | import type MainStore from './stores/MainStore'; | 32 | import loadServices from './reactions/loadServices.js'; |
33 | import type Disposer from './utils/Disposer'; | 33 | import synchronizeConfig from './reactions/synchronizeConfig.js'; |
34 | import synchronizeNativeTheme from './reactions/synchronizeNativeTheme.js'; | ||
35 | import type MainStore from './stores/MainStore.js'; | ||
36 | import type Disposer from './utils/Disposer.js'; | ||
34 | 37 | ||
35 | export default async function initReactions( | 38 | export default async function initReactions( |
36 | store: MainStore, | 39 | store: MainStore, |
37 | devMode: boolean, | 40 | devMode: boolean, |
41 | isMac: boolean, | ||
38 | ): Promise<Disposer> { | 42 | ): Promise<Disposer> { |
39 | const configRepository = new ConfigFile(app.getPath('userData')); | 43 | const configRepository = new ConfigFile(app.getPath('userData')); |
40 | const disposeConfigController = await synchronizeConfig( | 44 | const disposeConfigController = await synchronizeConfig( |
41 | store.shared, | 45 | store.shared, |
42 | configRepository, | 46 | configRepository, |
43 | ); | 47 | ); |
48 | const resources = getDistResources(devMode); | ||
49 | // Ideally, we would the the chromium `--lang` according to the settings store here, | ||
50 | // but `app.isReady()` is often already `true`, so we're too late to do that. | ||
44 | await app.whenReady(); | 51 | await app.whenReady(); |
52 | const localizationFiles = new LocalizationFiles(resources); | ||
53 | const localizationLoaded = loadLocalization( | ||
54 | store, | ||
55 | app.getLocale(), | ||
56 | import.meta.env.SUPPORTED_LOCALES, | ||
57 | localizationFiles, | ||
58 | devMode, | ||
59 | ); | ||
45 | const disposeNativeThemeController = synchronizeNativeTheme(store.shared); | 60 | const disposeNativeThemeController = synchronizeNativeTheme(store.shared); |
46 | const resources = getDistResources(devMode); | ||
47 | hardenSession(resources, devMode, session.defaultSession); | 61 | hardenSession(resources, devMode, session.defaultSession); |
48 | if (devMode) { | ||
49 | await installDevToolsExtensions(); | ||
50 | } | ||
51 | const userAgents = new UserAgents(app.userAgentFallback); | 62 | const userAgents = new UserAgents(app.userAgentFallback); |
52 | app.userAgentFallback = userAgents.fallbackUserAgent(devMode); | 63 | app.userAgentFallback = userAgents.fallbackUserAgent(devMode); |
64 | const devToolsLoaded = devMode | ||
65 | ? installDevToolsExtensions() | ||
66 | : Promise.resolve(); | ||
53 | const viewFactory = new ElectronViewFactory(userAgents, resources, devMode); | 67 | const viewFactory = new ElectronViewFactory(userAgents, resources, devMode); |
54 | const [mainWindow] = await Promise.all([ | 68 | const mainWindow = (async () => { |
55 | viewFactory.createMainWindow(store), | 69 | await localizationLoaded; |
56 | viewFactory.loadServiceInject(), | 70 | setApplicationMenu(store, devMode, isMac); |
57 | ]); | 71 | await devToolsLoaded; |
58 | store.setMainWindow(mainWindow); | 72 | return viewFactory.createMainWindow(store); |
73 | })(); | ||
59 | loadServices(store, viewFactory); | 74 | loadServices(store, viewFactory); |
75 | store.setMainWindow(await mainWindow); | ||
60 | return () => { | 76 | return () => { |
61 | disposeNativeThemeController(); | 77 | disposeNativeThemeController(); |
62 | disposeConfigController(); | 78 | disposeConfigController(); |