Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
5.1 KiB

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