diff --git a/ts/components/session/ActionsPanel.tsx b/ts/components/session/ActionsPanel.tsx index a942c70cc..5b3d34982 100644 --- a/ts/components/session/ActionsPanel.tsx +++ b/ts/components/session/ActionsPanel.tsx @@ -32,48 +32,18 @@ import { useInterval } from '../../hooks/useInterval'; import { clearSearch } from '../../state/ducks/search'; import { showLeftPaneSection } from '../../state/ducks/section'; -import { - cleanUpOldDecryptedMedias, - getDecryptedMediaUrl, -} from '../../session/crypto/DecryptedAttachmentsManager'; -import { OpenGroupManagerV2 } from '../../opengroup/opengroupV2/OpenGroupManagerV2'; -import { loadDefaultRooms } from '../../opengroup/opengroupV2/ApiUtil'; +import { cleanUpOldDecryptedMedias } from '../../session/crypto/DecryptedAttachmentsManager'; +import { getOpenGroupManager } from '../../opengroup/opengroupV2/OpenGroupManagerV2'; import { forceRefreshRandomSnodePool } from '../../session/snode_api/snodePool'; import { getSwarmPollingInstance } from '../../session/snode_api'; -import { IMAGE_JPEG } from '../../types/MIME'; -import { FSv2 } from '../../fileserver'; -import { debounce } from 'lodash'; import { DURATION } from '../../session/constants'; import { actions as conversationActions } from '../../state/ducks/conversations'; -import { ActionPanelOnionStatusLight, OnionPathModal } from '../OnionStatusPathDialog'; -import { EditProfileDialog } from '../EditProfileDialog'; -import { SessionConfirm } from './SessionConfirm'; -import { - getAddModeratorsModal, - getAdminLeaveClosedGroupDialog, - getChangeNickNameDialog, - getConfirmModal, - getEditProfileDialog, - getInviteContactModal, - getOnionPathDialog, - getRecoveryPhraseDialog, - getRemoveModeratorsModal, - getUpdateGroupMembersModal, - getUpdateGroupNameModal, - getUserDetailsModal, -} from '../../state/selectors/modal'; -import { InviteContactsDialog } from '../conversation/InviteContactsDialog'; -import { AddModeratorsDialog } from '../conversation/ModeratorsAddDialog'; -import { RemoveModeratorsDialog } from '../conversation/ModeratorsRemoveDialog'; -import { UpdateGroupNameDialog } from '../conversation/UpdateGroupNameDialog'; -import { UpdateGroupMembersDialog } from '../conversation/UpdateGroupMembersDialog'; -import { UserDetailsDialog } from '../UserDetailsDialog'; -import { SessionNicknameDialog } from './SessionNicknameDialog'; import { editProfileModal, onionPathModal } from '../../state/ducks/modalDialog'; -import { SessionSeedModal } from './SessionSeedModal'; -import { AdminLeaveClosedGroupDialog } from '../conversation/AdminLeaveClosedGroupDialog'; import { uploadOurAvatar } from '../../interactions/conversationInteractions'; import { ModalContainer } from './ModalContainer'; +import { debounce } from 'underscore'; +import { loadDefaultRooms } from '../../opengroup/opengroupV2/ApiUtil'; +import { ActionPanelOnionStatusLight } from '../OnionStatusPathDialog'; // tslint:disable-next-line: no-import-side-effect no-submodule-imports @@ -265,7 +235,7 @@ const doAppStartUp = () => { // this generates the key to encrypt attachments locally void generateAttachmentKeyIfEmpty(); - void OpenGroupManagerV2.getInstance().startPolling(); + void getOpenGroupManager().startPolling(); // trigger a sync message if needed for our other devices void triggerSyncIfNeeded(); diff --git a/ts/opengroup/opengroupV2/JoinOpenGroupV2.ts b/ts/opengroup/opengroupV2/JoinOpenGroupV2.ts index 2e7420e29..63fa51a62 100644 --- a/ts/opengroup/opengroupV2/JoinOpenGroupV2.ts +++ b/ts/opengroup/opengroupV2/JoinOpenGroupV2.ts @@ -8,7 +8,7 @@ import { prefixify, publicKeyParam, } from '../utils/OpenGroupUtils'; -import { OpenGroupManagerV2 } from './OpenGroupManagerV2'; +import { getOpenGroupManager } from './OpenGroupManagerV2'; // Inputs that should work: // https://sessionopengroup.co/main?public_key=658d29b91892a2389505596b135e76a53db6e11d613a51dbd3d0816adffb231c @@ -79,11 +79,7 @@ async function joinOpenGroupV2(room: OpenGroupV2Room, fromConfigMessage: boolean // Try to connect to server try { const conversation = await PromiseUtils.timeout( - OpenGroupManagerV2.getInstance().attemptConnectionV2OneAtATime( - prefixedServer, - roomId, - publicKey - ), + getOpenGroupManager().attemptConnectionV2OneAtATime(prefixedServer, roomId, publicKey), 20000 ); diff --git a/ts/opengroup/opengroupV2/OpenGroupManagerV2.ts b/ts/opengroup/opengroupV2/OpenGroupManagerV2.ts index 4e9d638b5..dba353ec1 100644 --- a/ts/opengroup/opengroupV2/OpenGroupManagerV2.ts +++ b/ts/opengroup/opengroupV2/OpenGroupManagerV2.ts @@ -17,11 +17,18 @@ import _ from 'lodash'; import { deleteAuthToken, DeleteAuthTokenRequest } from './ApiAuth'; import autoBind from 'auto-bind'; +let instance: OpenGroupManagerV2 | undefined; + +export const getOpenGroupManager = () => { + if (!instance) { + instance = new OpenGroupManagerV2(); + } + return instance; +}; + export class OpenGroupManagerV2 { public static readonly useV2OpenGroups = false; - private static instance: OpenGroupManagerV2; - /** * The map of opengroup pollers, by serverUrl. * A single poller polls for every room on the specified serverUrl @@ -29,17 +36,10 @@ export class OpenGroupManagerV2 { private readonly pollers: Map<string, OpenGroupServerPoller> = new Map(); private isPolling = false; - private constructor() { + constructor() { autoBind(this); } - public static getInstance() { - if (!OpenGroupManagerV2.instance) { - OpenGroupManagerV2.instance = new OpenGroupManagerV2(); - } - return OpenGroupManagerV2.instance; - } - /** * When we get our configuration from the network, we might get a few times the same open group on two different messages. * If we don't do anything, we will join them multiple times. @@ -138,7 +138,7 @@ export class OpenGroupManagerV2 { } // remove the roomInfos locally for this open group room await removeV2OpenGroupRoom(roomConvoId); - OpenGroupManagerV2.getInstance().removeRoomFromPolledRooms(infos); + getOpenGroupManager().removeRoomFromPolledRooms(infos); // no need to remove it from the ConversationController, the convo is already not there } } catch (e) { diff --git a/ts/session/conversations/ConversationController.ts b/ts/session/conversations/ConversationController.ts index 02587ca93..fdf7faed1 100644 --- a/ts/session/conversations/ConversationController.ts +++ b/ts/session/conversations/ConversationController.ts @@ -16,7 +16,7 @@ import { PubKey } from '../types'; import { actions as conversationActions } from '../../state/ducks/conversations'; import { getV2OpenGroupRoom, removeV2OpenGroupRoom } from '../../data/opengroups'; import _ from 'lodash'; -import { OpenGroupManagerV2 } from '../../opengroup/opengroupV2/OpenGroupManagerV2'; +import { getOpenGroupManager } from '../../opengroup/opengroupV2/OpenGroupManagerV2'; import { deleteAuthToken, DeleteAuthTokenRequest } from '../../opengroup/opengroupV2/ApiAuth'; import { deleteMessagesByConvoIdNoConfirmation } from '../../interactions/conversationInteractions'; @@ -211,7 +211,7 @@ export class ConversationController { _.pick(roomInfos, 'serverUrl', 'roomId', 'token') as DeleteAuthTokenRequest ); } - OpenGroupManagerV2.getInstance().removeRoomFromPolledRooms(roomInfos); + getOpenGroupManager().removeRoomFromPolledRooms(roomInfos); // remove the roomInfos locally for this open group room try {