aboutsummaryrefslogtreecommitdiffstats
path: root/packages/main/src/initReactions.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/main/src/initReactions.ts')
-rw-r--r--packages/main/src/initReactions.ts56
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
21import { app, session } from 'electron'; 21import { app, session } from 'electron';
22 22
23import ConfigFile from './infrastructure/config/impl/ConfigFile'; 23import LocalizationFiles from './i18n/impl/LocaltizationFiles.js';
24import UserAgents from './infrastructure/electron/UserAgents'; 24import loadLocalization from './i18n/loadLocalization.js';
25import ElectronViewFactory from './infrastructure/electron/impl/ElectronViewFactory'; 25import ConfigFile from './infrastructure/config/impl/ConfigFile.js';
26import { installDevToolsExtensions } from './infrastructure/electron/impl/devTools'; 26import UserAgents from './infrastructure/electron/UserAgents.js';
27import hardenSession from './infrastructure/electron/impl/hardenSession'; 27import ElectronViewFactory from './infrastructure/electron/impl/ElectronViewFactory.js';
28import getDistResources from './infrastructure/resources/impl/getDistResources'; 28import { installDevToolsExtensions } from './infrastructure/electron/impl/devTools.js';
29import loadServices from './reactions/loadServices'; 29import hardenSession from './infrastructure/electron/impl/hardenSession.js';
30import synchronizeConfig from './reactions/synchronizeConfig'; 30import setApplicationMenu from './infrastructure/electron/impl/setApplicationMenu.js';
31import synchronizeNativeTheme from './reactions/synchronizeNativeTheme'; 31import getDistResources from './infrastructure/resources/impl/getDistResources.js';
32import type MainStore from './stores/MainStore'; 32import loadServices from './reactions/loadServices.js';
33import type Disposer from './utils/Disposer'; 33import synchronizeConfig from './reactions/synchronizeConfig.js';
34import synchronizeNativeTheme from './reactions/synchronizeNativeTheme.js';
35import type MainStore from './stores/MainStore.js';
36import type Disposer from './utils/Disposer.js';
34 37
35export default async function initReactions( 38export 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();