remove getInstance on MessageController=> getMessageController

pull/1719/head
Audric Ackermann 4 years ago
parent 0b410404a3
commit e9e718bfcb
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -343,7 +343,7 @@ window.models = require('./ts/models');
window.Signal = window.Signal || {};
window.Signal.Data = require('./ts/data/data');
window.getMessageController = () => window.libsession.Messages.MessageController.getInstance();
window.getMessageController = () => window.libsession.Messages.getMessageController();
// Pulling these in separately since they access filesystem, electron
window.Signal.Backup = require('./js/modules/backup');

@ -6,7 +6,7 @@ import { ClosedGroupVisibleMessage } from '../session/messages/outgoing/visibleM
import { PubKey } from '../session/types';
import { UserUtils } from '../session/utils';
import { BlockedNumberController } from '../util';
import { MessageController } from '../session/messages';
import { getMessageController } from '../session/messages';
import { leaveClosedGroup } from '../session/group';
import { SignalService } from '../protobuf';
import { MessageModel } from './message';
@ -873,7 +873,7 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
if (setToExpire) {
await model.setToExpire();
}
MessageController.getInstance().register(messageId, model);
getMessageController().register(messageId, model);
window.inboxStore?.dispatch(
conversationActions.messageAdded({
conversationKey: this.id,

@ -5,7 +5,6 @@ import _ from 'lodash';
import { SignalService } from '../../ts/protobuf';
import { getMessageQueue, Utils } from '../../ts/session';
import { getConversationController } from '../../ts/session/conversations';
import { MessageController } from '../../ts/session/messages';
import { DataMessage } from '../../ts/session/messages/outgoing';
import { ClosedGroupVisibleMessage } from '../session/messages/outgoing/visibleMessage/ClosedGroupVisibleMessage';
import { PubKey } from '../../ts/session/types';
@ -34,6 +33,7 @@ import {
import { acceptOpenGroupInvitation } from '../interactions/messageInteractions';
import { OpenGroupVisibleMessage } from '../session/messages/outgoing/visibleMessage/OpenGroupVisibleMessage';
import { getV2OpenGroupRoom } from '../data/opengroups';
import { getMessageController } from '../session/messages';
export class MessageModel extends Backbone.Model<MessageAttributes> {
public propsForTimerNotification: any;
@ -262,7 +262,7 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
}
public async cleanup() {
MessageController.getInstance().unregister(this.id);
getMessageController().unregister(this.id);
await window.Signal.Migrations.deleteExternalMessageFiles(this.attributes);
}

@ -29,7 +29,7 @@ import { UserUtils } from '../session/utils';
import { ConversationModel, ConversationTypeEnum } from '../models/conversation';
import _ from 'lodash';
import { forceSyncConfigurationNowIfNeeded } from '../session/utils/syncUtils';
import { MessageController } from '../session/messages';
import { getMessageController } from '../session/messages';
import { ClosedGroupEncryptionPairReplyMessage } from '../session/messages/outgoing/controlMessage/group/ClosedGroupEncryptionPairReplyMessage';
import { queueAllCachedFromSource } from './receiver';
import { actions as conversationActions } from '../state/ducks/conversations';
@ -871,7 +871,7 @@ export async function createClosedGroup(groupName: string, members: Array<string
};
const dbMessage = await ClosedGroup.addUpdateMessage(convo, groupDiff, 'outgoing', Date.now());
MessageController.getInstance().register(dbMessage.id, dbMessage);
getMessageController().register(dbMessage.id, dbMessage);
// be sure to call this before sending the message.
// the sending pipeline needs to know from GroupUtils when a message is for a medium group

@ -1,7 +1,7 @@
import { initIncomingMessage } from './dataMessage';
import { toNumber } from 'lodash';
import { getConversationController } from '../session/conversations';
import { MessageController } from '../session/messages';
import { getMessageController } from '../session/messages';
import { actions as conversationActions } from '../state/ducks/conversations';
import { ConversationTypeEnum } from '../models/conversation';
@ -34,7 +34,7 @@ export async function onError(ev: any) {
conversation.updateLastMessage();
await conversation.notify(message);
MessageController.getInstance().register(message.id, message);
getMessageController().register(message.id, message);
window.inboxStore?.dispatch(
conversationActions.messageAdded({
conversationKey: conversation.id,

@ -8,7 +8,7 @@ import { StringUtils, UserUtils } from '../session/utils';
import { getConversationController } from '../session/conversations';
import { ConversationModel, ConversationTypeEnum } from '../models/conversation';
import { MessageModel } from '../models/message';
import { MessageController } from '../session/messages';
import { getMessageController } from '../session/messages';
import { getMessageById, getMessagesBySentAt } from '../../ts/data/data';
import { actions as conversationActions } from '../state/ducks/conversations';
import { updateProfileOneAtATime } from './dataMessage';
@ -128,7 +128,7 @@ async function copyFromQuotedMessage(
window?.log?.info(`Found quoted message id: ${id}`);
quote.referencedMessageNotFound = false;
const queryMessage = MessageController.getInstance().register(found.id, found);
const queryMessage = getMessageController().register(found.id, found);
quote.text = queryMessage.get('body') || '';
if (attemptCount > 1) {
@ -444,7 +444,7 @@ export async function handleMessageJob(
messageModel: message,
})
);
MessageController.getInstance().register(message.id, message);
getMessageController().register(message.id, message);
// Note that this can save the message again, if jobs were queued. We need to
// call it after we have an id for this message, because the jobs refer back

@ -19,7 +19,7 @@ import { ClosedGroupMemberLeftMessage } from '../messages/outgoing/controlMessag
import { ConversationModel, ConversationTypeEnum } from '../../models/conversation';
import { MessageModel } from '../../models/message';
import { MessageModelType } from '../../models/messageType';
import { MessageController } from '../messages';
import { getMessageController } from '../messages';
import {
distributingClosedGroupEncryptionKeyPairs,
markGroupAsLeftOrKicked,
@ -118,21 +118,21 @@ export async function initiateGroupUpdate(
if (diff.newName?.length) {
const nameOnlyDiff: GroupDiff = { newName: diff.newName };
const dbMessageName = await addUpdateMessage(convo, nameOnlyDiff, 'outgoing', Date.now());
MessageController.getInstance().register(dbMessageName.id, dbMessageName);
getMessageController().register(dbMessageName.id, dbMessageName);
await sendNewName(convo, diff.newName, dbMessageName.id);
}
if (diff.joiningMembers?.length) {
const joiningOnlyDiff: GroupDiff = { joiningMembers: diff.joiningMembers };
const dbMessageAdded = await addUpdateMessage(convo, joiningOnlyDiff, 'outgoing', Date.now());
MessageController.getInstance().register(dbMessageAdded.id, dbMessageAdded);
getMessageController().register(dbMessageAdded.id, dbMessageAdded);
await sendAddedMembers(convo, diff.joiningMembers, dbMessageAdded.id, updateObj);
}
if (diff.leavingMembers?.length) {
const leavingOnlyDiff: GroupDiff = { leavingMembers: diff.leavingMembers };
const dbMessageLeaving = await addUpdateMessage(convo, leavingOnlyDiff, 'outgoing', Date.now());
MessageController.getInstance().register(dbMessageLeaving.id, dbMessageLeaving);
getMessageController().register(dbMessageLeaving.id, dbMessageLeaving);
const stillMembers = members;
await sendRemovedMembers(convo, diff.leavingMembers, stillMembers, dbMessageLeaving.id);
}
@ -321,7 +321,7 @@ export async function leaveClosedGroup(groupId: string) {
received_at: now,
expireTimer: 0,
});
MessageController.getInstance().register(dbMessage.id, dbMessage);
getMessageController().register(dbMessage.id, dbMessage);
// Send the update to the group
const ourLeavingMessage = new ClosedGroupMemberLeftMessage({
timestamp: Date.now(),

@ -1,34 +1,35 @@
// You can see MessageController for in memory registered messages.
// Ee register messages to it everytime we send one, so that when an event happens we can find which message it was based on this id.
import { getMessagesByConversation } from '../../../ts/data/data';
import { ConversationModel } from '../../models/conversation';
import { MessageCollection, MessageModel } from '../../models/message';
import { MessageModel } from '../../models/message';
type MessageControllerEntry = {
message: MessageModel;
timestamp: number;
};
let messageControllerInstance: MessageController | null;
export const getMessageController = () => {
if (messageControllerInstance) {
return messageControllerInstance;
}
messageControllerInstance = new MessageController();
return messageControllerInstance;
};
// It's not only data from the db which is stored on the MessageController entries, we could fetch this again. What we cannot fetch from the db and which is stored here is all listeners a particular messages is linked to for instance. We will be able to get rid of this once we don't use backbone models at all
export class MessageController {
private static instance: MessageController | null;
private readonly messageLookup: Map<string, MessageControllerEntry>;
private constructor() {
/**
* Not to be used directly. Instead call getMessageController()
*/
constructor() {
this.messageLookup = new Map();
// cleanup every hour the cache
setInterval(this.cleanup, 3600 * 1000);
}
public static getInstance() {
if (MessageController.instance) {
return MessageController.instance;
}
MessageController.instance = new MessageController();
return MessageController.instance;
}
public register(id: string, message: MessageModel) {
if (!(message instanceof MessageModel)) {
throw new Error('Only MessageModels can be registered to the MessageController.');

@ -1,4 +1,4 @@
import * as Outgoing from './outgoing';
import { MessageController } from './MessageController';
import { getMessageController } from './MessageController';
export { Outgoing, MessageController };
export { Outgoing, getMessageController };

@ -2,7 +2,7 @@ import _ from 'lodash';
import { getMessageById } from '../../data/data';
import { SignalService } from '../../protobuf';
import { PnServer } from '../../pushnotification';
import { MessageController } from '../messages';
import { getMessageController } from '../messages';
import { OpenGroupVisibleMessage } from '../messages/outgoing/visibleMessage/OpenGroupVisibleMessage';
import { EncryptionType, RawMessage } from '../types';
import { UserUtils } from '../utils';
@ -176,7 +176,7 @@ export class MessageSentHandler {
private static async fetchHandleMessageSentData(m: RawMessage | OpenGroupVisibleMessage) {
// if a message was sent and this message was sent after the last app restart,
// this message is still in memory in the MessageController
const msg = MessageController.getInstance().get(m.identifier);
const msg = getMessageController().get(m.identifier);
if (!msg || !msg.message) {
// otherwise, look for it in the database
@ -187,7 +187,7 @@ export class MessageSentHandler {
if (!dbMessage) {
return null;
}
MessageController.getInstance().register(m.identifier, dbMessage);
getMessageController().register(m.identifier, dbMessage);
return dbMessage;
}

@ -12,7 +12,7 @@ import {
} from '../../../ts/data/data';
import { MessageModel } from '../../models/message';
import { downloadAttachment, downloadAttachmentOpenGroupV2 } from '../../receiver/attachments';
import { MessageController } from '../messages';
import { getMessageController } from '../messages';
const MAX_ATTACHMENT_JOB_PARALLELISM = 3;
@ -155,7 +155,7 @@ async function _runJob(job: any) {
return;
}
message = MessageController.getInstance().register(found.id, found);
message = getMessageController().register(found.id, found);
const pending = true;
await setAttachmentDownloadJobPending(id, pending);

1
ts/window.d.ts vendored

@ -9,7 +9,6 @@ import { LibTextsecure } from '../libtextsecure';
import { ConfirmationDialogParams } from '../background';
import { Store } from 'redux';
import { MessageController } from './session/messages/MessageController';
import { DefaultTheme } from 'styled-components';
import { ConversationCollection, ConversationModel } from './models/conversation';

Loading…
Cancel
Save