// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import DatabaseManager from '@database/manager'; import {getAllServerCredentials} from '@init/credentials'; import {initialLaunch} from '@init/launch'; import ManagedApp from '@init/managed_app'; import PushNotifications from '@init/push_notifications'; import GlobalEventHandler from '@managers/global_event_handler'; import NetworkManager from '@managers/network_manager'; import SessionManager from '@managers/session_manager'; import WebsocketManager from '@managers/websocket_manager'; import {registerScreens} from '@screens/index'; import {registerNavigationListeners} from '@screens/navigation'; import EphemeralStore from '@store/ephemeral_store'; import NavigationStore from '@store/navigation_store'; // Controls whether the main initialization (database, etc...) is done, either on app launch // or on the Share Extension, for example. let baseAppInitialized = false; // Controls whether the app initialization (websockets, screen listeners, etc...) is done, mainly // on app launch let mainAppInitialized = false; let serverCredentials: ServerCredential[]; // Fallback Polyfill for Promise.allSettle Promise.allSettled = Promise.allSettled || ((promises: Array>) => Promise.all( promises.map((p) => p. then((value) => ({ status: 'fulfilled', value, })). catch((reason) => ({ status: 'rejected', reason, })), ), )); export async function initialize() { if (!baseAppInitialized) { baseAppInitialized = true; serverCredentials = await getAllServerCredentials(); const serverUrls = serverCredentials.map((credential) => credential.serverUrl); await DatabaseManager.init(serverUrls); await NetworkManager.init(serverCredentials); GlobalEventHandler.init(); ManagedApp.init(); SessionManager.init(); } } export async function start() { if (baseAppInitialized) { // Clean relevant information on ephemeral stores NavigationStore.reset(); EphemeralStore.setCurrentThreadId(''); EphemeralStore.setProcessingNotification(''); } await initialize(); if (!mainAppInitialized) { mainAppInitialized = true; PushNotifications.init(serverCredentials.length > 0); registerNavigationListeners(); registerScreens(); await WebsocketManager.init(serverCredentials); } initialLaunch(); }