feat: DataExtractionNotifications now expire

MessageRequestResponses should not expire, pass yarn ready
pull/2660/head
William Grant 2 years ago
parent 5c697572a7
commit 446752cf54

@ -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 {

@ -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 (
<ReadableMessage
<ExpirableReadableMessage
messageId={messageId}
receivedAt={receivedAt}
isUnread={isUnread}
direction={direction}
expirationLength={expirationLength}
expirationTimestamp={expirationTimestamp}
isExpired={isExpired}
key={`readable-message-${messageId}`}
>
<Flex
@ -35,6 +50,6 @@ export const DataExtractionNotification = (props: PropsForDataExtractionNotifica
<SpacerSM />
<Text text={contentText} subtle={true} ellipsisOverflow={true} />
</Flex>
</ReadableMessage>
</ExpirableReadableMessage>
);
};

@ -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;

@ -338,13 +338,8 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
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<MessageAttributes> {
messageId: this.id,
receivedAt: this.get('received_at'),
isUnread: this.isUnread(),
...this.getPropsForExpiringMessage(),
};
}

@ -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;

@ -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();
}

@ -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
);
}

@ -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;
}

@ -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
);
}

@ -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;
}

Loading…
Cancel
Save