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.
133 lines
5.2 KiB
133 lines
5.2 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'; |
|
import AppWebDocsManager from './appWebDocsManager'; |
|
import AppPaymentsManager from './appPaymentsManager'; |
|
|
|
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, |
|
appWebDocsManager: new AppWebDocsManager, |
|
appPaymentsManager: new AppPaymentsManager |
|
}; |
|
|
|
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; |
|
} |
|
|
|
const promises: Array<Promise<(() => void) | void> | void>[] = []; |
|
let names = Object.keys(managers) as (keyof T)[]; |
|
names.unshift('appUsersManager', 'appChatsManager', 'appNotificationsManager', '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); |
|
// }); |
|
// } |
|
} |
|
} |
|
|
|
if(userId) { |
|
managers.apiManager.setUserAuth(userId); |
|
} |
|
|
|
return Promise.all(promises).then(() => managers); |
|
}
|
|
|