From 84776f275719a3eaf87defab33df33f08fa99219 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Wed, 23 May 2018 12:37:34 -0400 Subject: [PATCH] Start timers for migrated messages // FREEBIE --- .../Messages/Interactions/TSOutgoingMessage.m | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m index 839a14e18..cc87cc5d3 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m @@ -421,16 +421,6 @@ NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientSt [super saveWithTransaction:transaction]; } -- (BOOL)hasSentToAnyRecipient -{ - for (TSOutgoingMessageRecipientState *recipientState in self.recipientStateMap.allValues) { - if (recipientState.state == OWSOutgoingMessageRecipientStateSent) { - return YES; - } - } - return NO; -} - - (BOOL)shouldStartExpireTimerWithTransaction:(YapDatabaseReadTransaction *)transaction { // It's not clear if we should wait until _all_ recipients have reached "sent or later" @@ -442,8 +432,21 @@ NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientSt if (!self.isExpiringMessage) { return NO; + } else if (self.messageState == TSOutgoingMessageStateSent) { + return YES; } else { - return self.hasSentToAnyRecipient; + if (self.expireStartedAt > 0) { + // Our initial migration to populate the recipient state map was incomplete. It's since been + // addressed, but it's possible there are edge cases where a previously sent message would + // no longer be considered sent. + // So here we take extra care not to stop any expiration that had previously started. + // This can also happen under normal cirumstances with an outgoing group message. + DDLogWarn(@"%@ in %s expiration previously started", self.logTag, __PRETTY_FUNCTION__); + + return YES; + } + + return NO; } }