diff --git a/js/background.js b/js/background.js index 42d74b8df..0788764ac 100644 --- a/js/background.js +++ b/js/background.js @@ -438,17 +438,24 @@ color: details.color, active_at: activeAt, })).then(function() { - // this needs to be inline to get access to conversation model - if (typeof details.expireTimer !== 'undefined') { - var source = textsecure.storage.user.getNumber(); - var receivedAt = Date.now(); - return conversation.updateExpirationTimer( - details.expireTimer, - source, - receivedAt, - {fromSync: true} + const { expireTimer } = details; + const isValidExpireTimer = typeof expireTimer === 'number'; + if (!isValidExpireTimer) { + console.log( + 'Ignore invalid expire timer.', + 'Expected numeric `expireTimer`, got:', expireTimer ); + return; } + + var source = textsecure.storage.user.getNumber(); + var receivedAt = Date.now(); + return conversation.updateExpirationTimer( + expireTimer, + source, + receivedAt, + {fromSync: true} + ); }); }) .then(function() { @@ -498,16 +505,24 @@ } return wrapDeferred(conversation.save(updates)).then(function() { - if (typeof details.expireTimer !== 'undefined') { - var source = textsecure.storage.user.getNumber(); - var receivedAt = Date.now(); - return conversation.updateExpirationTimer( - details.expireTimer, - source, - receivedAt, - {fromSync: true} + const { expireTimer } = details; + const isValidExpireTimer = typeof expireTimer === 'number'; + if (!isValidExpireTimer) { + console.log( + 'Ignore invalid expire timer.', + 'Expected numeric `expireTimer`, got:', expireTimer ); + return; } + + var source = textsecure.storage.user.getNumber(); + var receivedAt = Date.now(); + return conversation.updateExpirationTimer( + expireTimer, + source, + receivedAt, + {fromSync: true} + ); }).then(ev.confirm); }); } diff --git a/js/models/conversations.js b/js/models/conversations.js index 6ed49da82..63e244ac1 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -707,6 +707,8 @@ console.log( 'Updating expireTimer for conversation', this.idForLogging(), + 'to', + expireTimer, 'via', source ); diff --git a/js/models/messages.js b/js/models/messages.js index dbde2dd90..3e7ea0a70 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -457,6 +457,21 @@ message.set({expireTimer: dataMessage.expireTimer}); } + // NOTE: Remove once the above uses + // `Conversation::updateExpirationTimer`: + const { expireTimer } = dataMessage; + const shouldLogExpireTimerChange = + message.isExpirationTimerUpdate() || expireTimer; + if (shouldLogExpireTimerChange) { + console.log( + 'Updating expireTimer for conversation', + conversation.idForLogging(), + 'to', + expireTimer, + 'via `handleDataMessage`' + ); + } + if (!message.isEndSession() && !message.isGroupUpdate()) { if (dataMessage.expireTimer) { if (dataMessage.expireTimer !== conversation.get('expireTimer')) {