diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 2efccf532..5bf920cb8 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -3918,7 +3918,11 @@ typedef enum : NSUInteger { groupThread.groupModel = newGroupModel; [groupThread saveWithTransaction:transaction]; - message = [TSOutgoingMessage outgoingMessageInThread:groupThread groupMetaMessage:TSGroupMessageUpdate]; + + uint32_t expiresInSeconds = [groupThread disappearingMessagesDurationWithTransaction:transaction]; + message = [TSOutgoingMessage outgoingMessageInThread:groupThread + groupMetaMessage:TSGroupMessageUpdate + expiresInSeconds:expiresInSeconds]; [message updateWithCustomMessage:updateGroupInfo transaction:transaction]; }]; diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m index d2e32ed5e..66ad4cd75 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m @@ -3766,7 +3766,8 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac }]; OWSAssert(thread); - TSOutgoingMessage *message = [TSOutgoingMessage outgoingMessageInThread:thread groupMetaMessage:TSGroupMessageNew]; + TSOutgoingMessage *message = + [TSOutgoingMessage outgoingMessageInThread:thread groupMetaMessage:TSGroupMessageNew expiresInSeconds:0]; [message updateWithCustomMessage:NSLocalizedString(@"GROUP_CREATED", nil)]; OWSMessageSender *messageSender = [Environment current].messageSender; diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m b/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m index f47d4a32d..80609c4ba 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m @@ -75,8 +75,8 @@ NS_ASSUME_NONNULL_BEGIN YapDatabaseReadWriteTransaction *_Nonnull transaction) { OWSDisappearingMessagesConfiguration *config = [OWSDisappearingMessagesConfiguration - fetchOrCreateDefaultWithThreadId:thread.uniqueId - transaction:transaction]; + fetchOrBuildDefaultWithThreadId:thread.uniqueId + transaction:transaction]; [config removeWithTransaction:transaction]; }]; }]]; diff --git a/Signal/src/ViewControllers/HomeView/HomeViewController.m b/Signal/src/ViewControllers/HomeView/HomeViewController.m index 69abb91bb..00738aa84 100644 --- a/Signal/src/ViewControllers/HomeView/HomeViewController.m +++ b/Signal/src/ViewControllers/HomeView/HomeViewController.m @@ -938,8 +938,9 @@ NSString *const kArchivedConversationsReuseIdentifier = @"kArchivedConversations preferredStyle:UIAlertControllerStyleAlert]; [self presentViewController:removingFromGroup animated:YES completion:nil]; - TSOutgoingMessage *message = - [TSOutgoingMessage outgoingMessageInThread:thread groupMetaMessage:TSGroupMessageQuit]; + TSOutgoingMessage *message = [TSOutgoingMessage outgoingMessageInThread:thread + groupMetaMessage:TSGroupMessageQuit + expiresInSeconds:0]; [self.messageSender enqueueMessage:message success:^{ [self dismissViewControllerAnimated:YES diff --git a/Signal/src/ViewControllers/NewGroupViewController.m b/Signal/src/ViewControllers/NewGroupViewController.m index 6ed0f1ac1..6263fc355 100644 --- a/Signal/src/ViewControllers/NewGroupViewController.m +++ b/Signal/src/ViewControllers/NewGroupViewController.m @@ -482,8 +482,9 @@ const NSUInteger kNewGroupViewControllerAvatarWidth = 68; presentFromViewController:self canCancel:NO backgroundBlock:^(ModalActivityIndicatorViewController *modalActivityIndicator) { - TSOutgoingMessage *message = - [TSOutgoingMessage outgoingMessageInThread:thread groupMetaMessage:TSGroupMessageNew]; + TSOutgoingMessage *message = [TSOutgoingMessage outgoingMessageInThread:thread + groupMetaMessage:TSGroupMessageNew + expiresInSeconds:0]; [message updateWithCustomMessage:NSLocalizedString(@"GROUP_CREATED", nil)]; diff --git a/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m b/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m index d5881fe43..e110f4fb5 100644 --- a/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m +++ b/Signal/src/ViewControllers/ThreadSettings/OWSConversationSettingsViewController.m @@ -937,7 +937,7 @@ NS_ASSUME_NONNULL_BEGIN { TSGroupThread *gThread = (TSGroupThread *)self.thread; TSOutgoingMessage *message = - [TSOutgoingMessage outgoingMessageInThread:gThread groupMetaMessage:TSGroupMessageQuit]; + [TSOutgoingMessage outgoingMessageInThread:gThread groupMetaMessage:TSGroupMessageQuit expiresInSeconds:0]; [self.messageSender enqueueMessage:message success:^{ DDLogInfo(@"%@ Successfully left group.", self.logTag); diff --git a/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration.h b/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration.h index 4353dc19a..00d2871a0 100644 --- a/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration.h +++ b/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration.h @@ -23,8 +23,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) BOOL dictionaryValueDidChange; @property (readonly, getter=isNewRecord) BOOL newRecord; -+ (instancetype)fetchOrCreateDefaultWithThreadId:(NSString *)threadId - transaction:(YapDatabaseReadTransaction *)transaction; ++ (instancetype)fetchOrBuildDefaultWithThreadId:(NSString *)threadId + transaction:(YapDatabaseReadTransaction *)transaction; + (NSArray *)validDurationsSeconds; + (uint32_t)maxDurationSeconds; diff --git a/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration.m b/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration.m index 5650fc72a..9b8d3f14d 100644 --- a/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration.m +++ b/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration.m @@ -50,8 +50,8 @@ NS_ASSUME_NONNULL_BEGIN return self; } -+ (instancetype)fetchOrCreateDefaultWithThreadId:(NSString *)threadId - transaction:(YapDatabaseReadTransaction *)transaction ++ (instancetype)fetchOrBuildDefaultWithThreadId:(NSString *)threadId + transaction:(YapDatabaseReadTransaction *)transaction { OWSDisappearingMessagesConfiguration *savedConfiguration = [self fetchObjectWithUniqueID:threadId transaction:transaction]; diff --git a/SignalServiceKit/src/Contacts/TSThread.h b/SignalServiceKit/src/Contacts/TSThread.h index fa616048e..e09aff411 100644 --- a/SignalServiceKit/src/Contacts/TSThread.h +++ b/SignalServiceKit/src/Contacts/TSThread.h @@ -6,6 +6,7 @@ NS_ASSUME_NONNULL_BEGIN +@class OWSDisappearingMessagesConfiguration; @class TSInteraction; @class TSInvalidIdentityKeyReceivingErrorMessage; @@ -122,6 +123,13 @@ NS_ASSUME_NONNULL_BEGIN - (void)removeAllThreadInteractionsWithTransaction:(YapDatabaseReadWriteTransaction *)transaction; + +#pragma mark Disappearing Messages + +- (OWSDisappearingMessagesConfiguration *)disappearingMessagesConfigurationWithTransaction: + (YapDatabaseReadTransaction *)transaction; +- (uint32_t)disappearingMessagesDurationWithTransaction:(YapDatabaseReadTransaction *)transaction; + #pragma mark Drafts /** diff --git a/SignalServiceKit/src/Contacts/TSThread.m b/SignalServiceKit/src/Contacts/TSThread.m index 64b353bcc..62b51e848 100644 --- a/SignalServiceKit/src/Contacts/TSThread.m +++ b/SignalServiceKit/src/Contacts/TSThread.m @@ -5,6 +5,7 @@ #import "TSThread.h" #import "NSDate+OWS.h" #import "NSString+SSK.h" +#import "OWSDisappearingMessagesConfiguration.h" #import "OWSPrimaryStorage.h" #import "OWSReadTracking.h" #import "TSDatabaseView.h" @@ -324,6 +325,26 @@ NS_ASSUME_NONNULL_BEGIN } } +#pragma mark Disappearing Messages + +- (OWSDisappearingMessagesConfiguration *)disappearingMessagesConfigurationWithTransaction: + (YapDatabaseReadTransaction *)transaction +{ + return [OWSDisappearingMessagesConfiguration fetchOrBuildDefaultWithThreadId:self.uniqueId transaction:transaction]; +} + +- (uint32_t)disappearingMessagesDurationWithTransaction:(YapDatabaseReadTransaction *)transaction +{ + + OWSDisappearingMessagesConfiguration *config = [self disappearingMessagesConfigurationWithTransaction:transaction]; + + if (!config.isEnabled) { + return 0; + } else { + return config.durationSeconds; + } +} + #pragma mark Archival - (nullable NSDate *)archivalDate diff --git a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h index 1b749db8e..1d00b6ecd 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h +++ b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h @@ -106,7 +106,8 @@ typedef NS_ENUM(NSInteger, TSGroupMetaMessage) { quotedMessage:(nullable TSQuotedMessage *)quotedMessage; + (instancetype)outgoingMessageInThread:(nullable TSThread *)thread - groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage; + groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage + expiresInSeconds:(uint32_t)expiresInSeconds; @property (readonly) TSOutgoingMessageState messageState; @property (readonly) BOOL wasDeliveredToAnyRecipient; diff --git a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m index 849683310..24259c7b7 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m @@ -275,12 +275,13 @@ NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientSt + (instancetype)outgoingMessageInThread:(nullable TSThread *)thread groupMetaMessage:(TSGroupMetaMessage)groupMetaMessage + expiresInSeconds:(uint32_t)expiresInSeconds; { return [[TSOutgoingMessage alloc] initOutgoingMessageWithTimestamp:[NSDate ows_millisecondTimeStamp] inThread:thread messageBody:nil attachmentIds:[NSMutableArray new] - expiresInSeconds:0 + expiresInSeconds:expiresInSeconds expireStartedAt:0 isVoiceMessage:NO groupMetaMessage:groupMetaMessage diff --git a/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m b/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m index 1c7461604..51afe95d2 100644 --- a/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m +++ b/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m @@ -205,8 +205,8 @@ void AssertIsOnDisappearingMessagesQueue() // Become eventually consistent in the case that the remote changed their settings at the same time. // Also in case remote doesn't support expiring messages OWSDisappearingMessagesConfiguration *disappearingMessagesConfiguration = - [OWSDisappearingMessagesConfiguration fetchOrCreateDefaultWithThreadId:message.uniqueThreadId - transaction:transaction]; + [OWSDisappearingMessagesConfiguration fetchOrBuildDefaultWithThreadId:message.uniqueThreadId + transaction:transaction]; if (message.expiresInSeconds == 0) { disappearingMessagesConfiguration.enabled = NO; diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 7f1179ea1..fcc12eaf1 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -888,8 +888,12 @@ NS_ASSUME_NONNULL_BEGIN NSString *updateGroupInfo = [gThread.groupModel getInfoStringAboutUpdateTo:gThread.groupModel contactsManager:self.contactsManager]; - TSOutgoingMessage *message = - [TSOutgoingMessage outgoingMessageInThread:gThread groupMetaMessage:TSGroupMessageUpdate]; + + uint32_t expiresInSeconds = [gThread disappearingMessagesDurationWithTransaction:transaction]; + TSOutgoingMessage *message = [TSOutgoingMessage outgoingMessageInThread:gThread + groupMetaMessage:TSGroupMessageUpdate + expiresInSeconds:expiresInSeconds]; + [message updateWithCustomMessage:updateGroupInfo transaction:transaction]; // Only send this group update to the requester. [message updateWithSendingToSingleGroupRecipient:envelope.source transaction:transaction];