You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.8 KiB
TypeScript
139 lines
3.8 KiB
TypeScript
import { UserUtils } from '../session/utils';
|
|
import { MessageModel } from './message';
|
|
import { MessageAttributesOptionals, MessageModelType } from './messageType';
|
|
|
|
function getSharedAttributesForSwarmMessage({
|
|
conversationId,
|
|
messageHash,
|
|
sentAt,
|
|
}: {
|
|
conversationId: string;
|
|
messageHash: string;
|
|
sentAt: number;
|
|
}) {
|
|
const now = Date.now();
|
|
return {
|
|
sent_at: sentAt,
|
|
received_at: now,
|
|
conversationId,
|
|
messageHash,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* This function is only called when we get a message from ourself from a swarm polling event.
|
|
*
|
|
* NOTE: conversationId has to be the conversation in which this message should be added. So
|
|
* either syncTarget, groupId or envelope.source or senderIdentity
|
|
*/
|
|
export function createSwarmMessageSentFromUs(args: {
|
|
messageHash: string;
|
|
sentAt: number;
|
|
conversationId: string;
|
|
}): MessageModel {
|
|
// for messages we did send, we mark it as read and start the expiration timer
|
|
const messageData: MessageAttributesOptionals = {
|
|
...getSharedAttributesForSwarmMessage(args),
|
|
...getSharedAttributesForOutgoingMessage(),
|
|
expirationStartTimestamp: Math.min(args.sentAt, Date.now()),
|
|
};
|
|
|
|
return new MessageModel(messageData);
|
|
}
|
|
|
|
/**
|
|
* This function is only called by the Receiver when we get a message
|
|
* from someone else than ourself from a swarm polling event
|
|
* NOTE: conversationId has to be the conversation in which this message should be added. So
|
|
* either syncTarget, groupId or envelope.source or senderIdentity
|
|
*/
|
|
export function createSwarmMessageSentFromNotUs(args: {
|
|
messageHash: string;
|
|
sentAt: number;
|
|
sender: string;
|
|
conversationId: string;
|
|
}): MessageModel {
|
|
const messageData: MessageAttributesOptionals = {
|
|
...getSharedAttributesForSwarmMessage(args),
|
|
...getSharedAttributesForIncomingMessage(),
|
|
source: args.sender,
|
|
};
|
|
|
|
return new MessageModel(messageData);
|
|
}
|
|
|
|
function getSharedAttributesForPublicMessage({
|
|
serverTimestamp,
|
|
serverId,
|
|
conversationId,
|
|
}: {
|
|
serverId: number;
|
|
serverTimestamp: number;
|
|
conversationId: string;
|
|
}) {
|
|
return {
|
|
serverTimestamp: serverTimestamp || undefined,
|
|
serverId: serverId || undefined,
|
|
sent_at: serverTimestamp,
|
|
received_at: serverTimestamp,
|
|
isPublic: true,
|
|
conversationId,
|
|
messageHash: '', // we do not care of a messageHash for an opengroup message. we have serverId for that
|
|
expirationStartTimestamp: undefined,
|
|
};
|
|
}
|
|
|
|
function getSharedAttributesForOutgoingMessage() {
|
|
return {
|
|
source: UserUtils.getOurPubKeyStrFromCache(),
|
|
unread: 0,
|
|
sent_to: [],
|
|
sent: true,
|
|
type: 'outgoing' as MessageModelType,
|
|
direction: 'outgoing' as MessageModelType,
|
|
};
|
|
}
|
|
|
|
function getSharedAttributesForIncomingMessage() {
|
|
return {
|
|
unread: 1,
|
|
type: 'incoming' as MessageModelType,
|
|
direction: 'incoming' as MessageModelType,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* This function is only called when we get a message from ourself from an opengroup polling event
|
|
*/
|
|
export function createPublicMessageSentFromUs(args: {
|
|
serverId: number;
|
|
serverTimestamp: number;
|
|
conversationId: string;
|
|
}): MessageModel {
|
|
const messageData: MessageAttributesOptionals = {
|
|
...getSharedAttributesForPublicMessage(args),
|
|
...getSharedAttributesForOutgoingMessage(),
|
|
};
|
|
|
|
return new MessageModel(messageData);
|
|
}
|
|
|
|
/**
|
|
* This function is only called by the Receiver when we get a message
|
|
* from someone else than ourself from an opengroup polling event
|
|
*/
|
|
export function createPublicMessageSentFromNotUs(args: {
|
|
serverId: number;
|
|
sender: string;
|
|
serverTimestamp: number;
|
|
conversationId: string;
|
|
}): MessageModel {
|
|
const messageData: MessageAttributesOptionals = {
|
|
...getSharedAttributesForPublicMessage(args),
|
|
...getSharedAttributesForIncomingMessage(),
|
|
source: args.sender,
|
|
};
|
|
|
|
return new MessageModel(messageData);
|
|
}
|