diff --git a/ts/components/conversation/TimerNotification.tsx b/ts/components/conversation/TimerNotification.tsx
index 7991f5569..a866306d0 100644
--- a/ts/components/conversation/TimerNotification.tsx
+++ b/ts/components/conversation/TimerNotification.tsx
@@ -5,9 +5,8 @@ import { PropsForExpirationTimer } from '../../state/ducks/conversations';
import { ExpirableReadableMessage } from './message/message-item/ExpirableReadableMessage';
import { SessionIcon } from '../icon';
-import { SpacerSM } from '../basic/Text';
+import { SpacerSM, Text } from '../basic/Text';
import { Flex } from '../basic/Flex';
-import { Text } from '../basic/Text';
export const TimerNotification = (props: PropsForExpirationTimer) => {
const {
diff --git a/ts/components/conversation/message/message-item/DataExtractionNotification.tsx b/ts/components/conversation/message/message-item/DataExtractionNotification.tsx
index 4dd2a09fc..74a6f0417 100644
--- a/ts/components/conversation/message/message-item/DataExtractionNotification.tsx
+++ b/ts/components/conversation/message/message-item/DataExtractionNotification.tsx
@@ -4,10 +4,21 @@ import { SignalService } from '../../../../protobuf';
import { Flex } from '../../../basic/Flex';
import { SpacerSM, Text } from '../../../basic/Text';
import { SessionIcon } from '../../../icon';
-import { ReadableMessage } from './ReadableMessage';
+import { ExpirableReadableMessage } from './ExpirableReadableMessage';
export const DataExtractionNotification = (props: PropsForDataExtractionNotification) => {
- const { name, type, source, messageId, isUnread, receivedAt } = props;
+ const {
+ name,
+ type,
+ source,
+ messageId,
+ isUnread,
+ receivedAt,
+ direction,
+ expirationLength,
+ expirationTimestamp,
+ isExpired,
+ } = props;
let contentText: string;
if (type === SignalService.DataExtractionNotification.Type.MEDIA_SAVED) {
@@ -17,10 +28,14 @@ export const DataExtractionNotification = (props: PropsForDataExtractionNotifica
}
return (
-
-
+
);
};
diff --git a/ts/components/conversation/message/message-item/MessageRequestResponse.tsx b/ts/components/conversation/message/message-item/MessageRequestResponse.tsx
index bd97b18fe..1d3be7fb9 100644
--- a/ts/components/conversation/message/message-item/MessageRequestResponse.tsx
+++ b/ts/components/conversation/message/message-item/MessageRequestResponse.tsx
@@ -6,6 +6,7 @@ import { Flex } from '../../../basic/Flex';
import { SpacerSM, Text } from '../../../basic/Text';
import { ReadableMessage } from './ReadableMessage';
+// Note this should not respond to the disappearing message conversation setting so we use the ReadableMessage
export const MessageRequestResponse = (props: PropsForMessageRequestResponse) => {
const { messageId, isUnread, receivedAt, conversationId } = props;
diff --git a/ts/models/message.ts b/ts/models/message.ts
index e7219a9bd..70b9e89ed 100644
--- a/ts/models/message.ts
+++ b/ts/models/message.ts
@@ -338,13 +338,8 @@ export class MessageModel extends Backbone.Model {
return null;
}
const invitation = this.get('groupInvitation');
-
- let direction = this.get('direction');
- if (!direction) {
- direction = this.get('type') === 'outgoing' ? 'outgoing' : 'incoming';
- }
-
let serverAddress = '';
+
try {
const url = new URL(invitation.url);
serverAddress = url.origin;
@@ -382,6 +377,7 @@ export class MessageModel extends Backbone.Model {
messageId: this.id,
receivedAt: this.get('received_at'),
isUnread: this.isUnread(),
+ ...this.getPropsForExpiringMessage(),
};
}
diff --git a/ts/models/messageType.ts b/ts/models/messageType.ts
index 760f5744f..bf0ff3d2e 100644
--- a/ts/models/messageType.ts
+++ b/ts/models/messageType.ts
@@ -1,6 +1,10 @@
import { defaultsDeep } from 'lodash';
import { v4 as uuidv4 } from 'uuid';
-import { CallNotificationType, PropsForMessageWithConvoProps } from '../state/ducks/conversations';
+import {
+ CallNotificationType,
+ PropsForExpiringMessage,
+ PropsForMessageWithConvoProps,
+} from '../state/ducks/conversations';
import { AttachmentTypeWithPath } from '../types/Attachment';
import { Reaction, ReactionList, SortedReactionList } from '../types/Reaction';
import { DisappearingMessageType } from '../util/expiringMessages';
@@ -135,12 +139,14 @@ export enum MessageDirection {
any = '%',
}
-export type PropsForDataExtractionNotification = DataExtractionNotificationMsg & {
+export interface PropsForDataExtractionNotification
+ extends DataExtractionNotificationMsg,
+ PropsForExpiringMessage {
name: string;
messageId: string;
receivedAt?: number;
isUnread: boolean;
-};
+}
export type PropsForMessageRequestResponse = MessageRequestResponseMsg & {
conversationId?: string;
diff --git a/ts/receiver/contentMessage.ts b/ts/receiver/contentMessage.ts
index d597d6a36..df4d62c23 100644
--- a/ts/receiver/contentMessage.ts
+++ b/ts/receiver/contentMessage.ts
@@ -28,7 +28,10 @@ import {
import { ConversationTypeEnum } from '../models/conversationAttributes';
import { findCachedBlindedMatchOrLookupOnAllServers } from '../session/apis/open_group_api/sogsv3/knownBlindedkeys';
import { appendFetchAvatarAndProfileJob } from './userProfileImageUpdates';
-import { DisappearingMessageConversationSetting } from '../util/expiringMessages';
+import {
+ DisappearingMessageConversationSetting,
+ setExpirationStartTimestamp,
+} from '../util/expiringMessages';
export async function handleSwarmContentMessage(envelope: EnvelopePlus, messageHash: string) {
try {
@@ -332,7 +335,7 @@ function shouldDropBlockedUserMessage(
return !isControlDataMessageOnly;
}
-// tslint:disable-next-line: cyclomatic-complexity
+// tslint:disable-next-line: cyclomatic-complexity max-func-body-length
export async function innerHandleSwarmContentMessage(
envelope: EnvelopePlus,
sentAtTimestamp: number,
@@ -414,7 +417,7 @@ export async function innerHandleSwarmContentMessage(
if (dataMessage.expireTimer) {
// TODO Trigger banner in UI?
expireTimer = dataMessage.expireTimer;
- window.log.info(`WIP: Received outdated disappearing message data message`, content);
+ window.log.info('WIP: Received outdated disappearing message data message', content);
}
// NOTE In the protobuf this is a long
@@ -777,6 +780,7 @@ export async function handleDataExtractionNotification(
if (timestamp) {
const envelopeTimestamp = toNumber(timestamp);
const referencedAttachmentTimestamp = toNumber(referencedAttachment);
+ const expirationType = convo.get('expirationType');
await convo.addSingleIncomingMessage({
source,
@@ -787,7 +791,9 @@ export async function handleDataExtractionNotification(
source,
},
unread: 1, // 1 means unread
- expireTimer: 0,
+ expirationType: expirationType !== 'off' ? expirationType : undefined,
+ expireTimer: convo.get('expireTimer') ? convo.get('expireTimer') : 0,
+ expirationStartTimestamp: setExpirationStartTimestamp(expirationType),
});
convo.updateLastMessage();
}
diff --git a/ts/receiver/dataMessage.ts b/ts/receiver/dataMessage.ts
index b3bb42deb..554b8b759 100644
--- a/ts/receiver/dataMessage.ts
+++ b/ts/receiver/dataMessage.ts
@@ -228,7 +228,7 @@ export async function handleSwarmDataMessage(
return;
}
- let msgModel =
+ const msgModel =
isSyncedMessage || (envelope.senderIdentity && isUsFromCache(envelope.senderIdentity))
? createSwarmMessageSentFromUs({
conversationId: convoIdToAddTheMessageTo,
@@ -245,7 +245,6 @@ export async function handleSwarmDataMessage(
if (isSyncedMessage) {
// TODO handle sync messages separately
window.log.info('WIP: Sync Message dropping');
- expireUpdate = null;
}
await handleSwarmMessage(
@@ -255,7 +254,7 @@ export async function handleSwarmDataMessage(
cleanDataMessage,
convoToAddMessageTo,
() => removeFromCache(envelope),
- expireUpdate
+ isSyncedMessage ? expireUpdate : null
);
}
diff --git a/ts/receiver/queuedJob.ts b/ts/receiver/queuedJob.ts
index c14d4e328..aa64de826 100644
--- a/ts/receiver/queuedJob.ts
+++ b/ts/receiver/queuedJob.ts
@@ -314,7 +314,7 @@ async function handleExpirationTimerUpdateNoCommit(
// TODO Not entirely sure that this works
if (conversation.get('lastDisappearingMessageChangeTimestamp') > providedChangeTimestamp) {
- window.log.info(`WIP: This is an outdated disappearing message setting`);
+ window.log.info('WIP: This is an outdated disappearing message setting');
return;
}
diff --git a/ts/session/apis/snode_api/expire.ts b/ts/session/apis/snode_api/expire.ts
index bcca1fc40..3954cdc6d 100644
--- a/ts/session/apis/snode_api/expire.ts
+++ b/ts/session/apis/snode_api/expire.ts
@@ -139,7 +139,7 @@ async function processExpirationResults(
if (!isValid) {
window.log.warn(
- `WIP: loki_message:::expireMessage - Signature verification failed!`,
+ 'WIP: loki_message:::expireMessage - Signature verification failed!',
messageHashes
);
}
diff --git a/ts/session/sending/MessageSentHandler.ts b/ts/session/sending/MessageSentHandler.ts
index 4c22ef19f..1156f1ce6 100644
--- a/ts/session/sending/MessageSentHandler.ts
+++ b/ts/session/sending/MessageSentHandler.ts
@@ -154,7 +154,7 @@ async function handleMessageSentFailure(
sentMessage: RawMessage | OpenGroupVisibleMessage,
error: any
) {
- let fetchedMessage = await fetchHandleMessageSentData(sentMessage.identifier);
+ const fetchedMessage = await fetchHandleMessageSentData(sentMessage.identifier);
if (!fetchedMessage) {
return;
}