fix: duplicate timer update messages

pull/2660/head
William Grant 2 years ago
parent 97ecc9e521
commit 42356b0d60

@ -12,10 +12,13 @@ export const TimerNotification = (props: PropsForExpirationTimer) => {
const {
messageId,
receivedAt,
direction,
isUnread,
pubkey,
profileName,
expirationType,
expirationLength,
expirationTimestamp,
timespan,
type,
disabled,
@ -52,11 +55,11 @@ export const TimerNotification = (props: PropsForExpirationTimer) => {
<ExpirableReadableMessage
convoId={props.convoId}
messageId={messageId}
direction={props.direction}
direction={direction}
receivedAt={receivedAt}
isUnread={isUnread}
expirationLength={props.expirationLength}
expirationTimestamp={props.expirationTimestamp}
expirationLength={expirationLength}
expirationTimestamp={expirationTimestamp}
isExpired={props.isExpired}
key={`readable-message-${messageId}`}
>

@ -90,11 +90,11 @@ export const ExpirableReadableMessage = (props: ExpirableReadableMessageProps) =
const expiringProps: PropsForExpiringMessage = {
convoId,
messageId: messageId,
messageId,
expirationLength,
expirationTimestamp,
isExpired: props.isExpired,
direction: props.direction,
direction,
};
const { isExpired } = useIsExpired(expiringProps);
const isIncoming = direction === 'incoming';

@ -1141,6 +1141,7 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
// tell the UI this conversation was updated
await this.commit();
}
// if change was made remotely, don't send it to the number/group
if (receivedAt) {
return;

@ -303,6 +303,7 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
if (!this.isExpirationTimerUpdate()) {
return null;
}
const timerUpdate = this.get('expirationTimerUpdate');
if (!timerUpdate || !timerUpdate.source) {
return null;
@ -1198,11 +1199,7 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
public markReadNoCommit(readAt: number) {
this.set({ unread: 0 });
if (
this.get('expirationType') === 'deleteAfterRead' &&
this.get('expireTimer') &&
Boolean(this.get('expirationStartTimestamp')) === false
) {
if (this.get('expirationType') === 'deleteAfterRead' && this.get('expireTimer')) {
this.set({
expirationStartTimestamp: setExpirationStartTimestamp('deleteAfterRead', readAt),
});

@ -165,6 +165,12 @@ function handleMentions(
function updateReadStatus(message: MessageModel) {
if (message.isExpirationTimerUpdate()) {
message.set({ unread: 0 });
if (message.get('expirationType') === 'deleteAfterRead' && message.get('expireTimer')) {
message.set({
expirationStartTimestamp: setExpirationStartTimestamp('deleteAfterRead'),
});
}
}
}
@ -311,10 +317,6 @@ async function handleExpirationTimerUpdateNoCommit(
expireTimer: number,
lastDisappearingMessageChangeTimestamp: number
) {
message.set({
unread: 0, // mark the message as read.
});
await conversation.updateExpireTimer({
providedExpirationType: expirationType,
providedExpireTimer: expireTimer,

Loading…
Cancel
Save