|
|
|
/*
|
|
|
|
* 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<Promise<(() => 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);
|
|
|
|
}
|