/* * https://github.com/morethanwords/tweb * Copyright (C) 2019-2021 Eduard Kuzmenko * https://github.com/morethanwords/tweb/blob/master/LICENSE */ import { PasswordManager } from "../mtproto/passwordManager"; import { ReferenceDatabase } from "../mtproto/referenceDatabase"; import DialogsStorage from "../storages/dialogs"; import FiltersStorage from "../storages/filters"; import { ApiUpdatesManager } from "./apiUpdatesManager"; import { AppAvatarsManager } from "./appAvatarsManager"; import { AppCallsManager } from "./appCallsManager"; import { AppChatsManager } from "./appChatsManager"; import { AppDocsManager } from "./appDocsManager"; import { AppDraftsManager } from "./appDraftsManager"; import { AppEmojiManager } from "./appEmojiManager"; import { AppGroupCallsManager } from "./appGroupCallsManager"; import { AppInlineBotsManager } from "./appInlineBotsManager"; import { AppMessagesIdsManager } from "./appMessagesIdsManager"; import { AppMessagesManager } from "./appMessagesManager"; import { AppNotificationsManager } from "./appNotificationsManager"; import { AppPeersManager } from "./appPeersManager"; import { AppPhotosManager } from "./appPhotosManager"; import { AppPollsManager } from "./appPollsManager"; import { AppPrivacyManager } from "./appPrivacyManager"; import { AppProfileManager } from "./appProfileManager"; import { AppReactionsManager } from "./appReactionsManager"; import { AppStickersManager } from "./appStickersManager"; import { AppUsersManager } from "./appUsersManager"; import { AppWebPagesManager } from "./appWebPagesManager"; import { ApiFileManager } from "../mtproto/apiFileManager"; import { ApiManager } from "../mtproto/apiManager"; import ctx from "../../environment/ctx"; import PeersStorage from "../storages/peers"; import ThumbsStorage from "../storages/thumbs"; import { NetworkerFactory } from "../mtproto/networkerFactory"; import { RootScope } from "../rootScope"; import { Authorizer } from "../mtproto/authorizer"; import { DcConfigurator } from "../mtproto/dcConfigurator"; import { TimeManager } from "../mtproto/timeManager"; import { AppStoragesManager } from "./appStoragesManager"; import cryptoMessagePort from "../crypto/cryptoMessagePort"; import appStateManager from "./appStateManager"; import filterUnique from "../../helpers/array/filterUnique"; export default function createManagers(appStoragesManager: AppStoragesManager, userId: UserId) { const managers = { appPeersManager: new AppPeersManager, appChatsManager: new AppChatsManager, appDocsManager: new AppDocsManager, appPhotosManager: new AppPhotosManager, appPollsManager: new AppPollsManager, appUsersManager: new AppUsersManager, appWebPagesManager: new AppWebPagesManager, appDraftsManager: new AppDraftsManager, appProfileManager: new AppProfileManager, appNotificationsManager: new AppNotificationsManager, apiUpdatesManager: new ApiUpdatesManager, appAvatarsManager: new AppAvatarsManager, appGroupCallsManager: new AppGroupCallsManager, appCallsManager: new AppCallsManager, appReactionsManager: new AppReactionsManager, appMessagesManager: new AppMessagesManager, appMessagesIdsManager: new AppMessagesIdsManager, appPrivacyManager: new AppPrivacyManager, appInlineBotsManager: new AppInlineBotsManager, appStickersManager: new AppStickersManager, referenceDatabase: new ReferenceDatabase, appEmojiManager: new AppEmojiManager, filtersStorage: new FiltersStorage, dialogsStorage: new DialogsStorage, apiManager: new ApiManager, cryptoWorker: cryptoMessagePort, passwordManager: new PasswordManager, apiFileManager: new ApiFileManager, peersStorage: new PeersStorage, thumbsStorage: new ThumbsStorage, networkerFactory: new NetworkerFactory, rootScope: new RootScope, authorizer: new Authorizer, dcConfigurator: new DcConfigurator, timeManager: new TimeManager, appStoragesManager: appStoragesManager, appStateManager: appStateManager }; type T = typeof managers; for(const name in managers) { const manager = managers[name as keyof T]; if(!manager) { continue; } if((manager as AppMessagesManager).setManagers) { (manager as AppMessagesManager).setManagers(managers as any); delete (manager as AppMessagesManager).setManagers; } // @ts-ignore ctx[name] = manager; } if(userId) { managers.apiManager.setUserAuth(userId); } const promises: Array void) | void> | void>[] = []; let names = Object.keys(managers) as (keyof T)[]; names.unshift('appUsersManager', 'appChatsManager', 'appMessagesManager', 'dialogsStorage'); names = filterUnique(names); for(const name of names) { const manager = managers[name]; if((manager as any)?.after) { // console.log('injecting after', name); const result = (manager as any).after(); promises.push(result); // if(result instanceof Promise) { // result.then(() => { // console.log('injected after', name); // }); // } } } return Promise.all(promises).then(() => managers); }