From 742d4cabc29cc97c452a3df5c47819bd09c5c18d Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 31 Jan 2018 13:58:13 -0500 Subject: [PATCH] Send "disappearing messages" state for contacts. --- .../src/Contacts/Threads/TSContactThread.h | 5 ++++- .../src/Contacts/Threads/TSContactThread.m | 15 ++++++++++++++- .../src/Devices/OWSContactsOutputStream.m | 14 +++++++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/SignalServiceKit/src/Contacts/Threads/TSContactThread.h b/SignalServiceKit/src/Contacts/Threads/TSContactThread.h index 4fbaec9f5..e8c94e1c1 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSContactThread.h +++ b/SignalServiceKit/src/Contacts/Threads/TSContactThread.h @@ -1,5 +1,5 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "TSThread.h" @@ -19,6 +19,9 @@ NS_ASSUME_NONNULL_BEGIN transaction:(YapDatabaseReadWriteTransaction *)transaction relay:(nullable NSString *)relay; +// Unlike getOrCreateThreadWithContactId, this will _NOT_ create a thread if one does not already exist. ++ (nullable instancetype)getThreadWithContactId:(NSString *)contactId; + - (NSString *)contactIdentifier; + (NSString *)contactIdFromThreadId:(NSString *)threadId; diff --git a/SignalServiceKit/src/Contacts/Threads/TSContactThread.m b/SignalServiceKit/src/Contacts/Threads/TSContactThread.m index 58b4401de..599ea9202 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSContactThread.m +++ b/SignalServiceKit/src/Contacts/Threads/TSContactThread.m @@ -1,5 +1,5 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "TSContactThread.h" @@ -83,6 +83,19 @@ NS_ASSUME_NONNULL_BEGIN return thread; } ++ (nullable instancetype)getThreadWithContactId:(NSString *)contactId +{ + OWSAssert(contactId.length > 0); + + __block TSContactThread *_Nullable thread; + [[self dbReadWriteConnection] readWithBlock:^(YapDatabaseReadTransaction *transaction) { + thread = + [TSContactThread fetchObjectWithUniqueID:[self threadIdFromContactId:contactId] transaction:transaction]; + }]; + + return thread; +} + - (NSString *)contactIdentifier { return [[self class] contactIdFromThreadId:self.uniqueId]; } diff --git a/SignalServiceKit/src/Devices/OWSContactsOutputStream.m b/SignalServiceKit/src/Devices/OWSContactsOutputStream.m index 191e2034f..2ee8c454a 100644 --- a/SignalServiceKit/src/Devices/OWSContactsOutputStream.m +++ b/SignalServiceKit/src/Devices/OWSContactsOutputStream.m @@ -1,5 +1,5 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "OWSContactsOutputStream.h" @@ -7,9 +7,11 @@ #import "Cryptography.h" #import "MIMETypeUtil.h" #import "NSData+keyVersionByte.h" +#import "OWSDisappearingMessagesConfiguration.h" #import "OWSRecipientIdentity.h" #import "OWSSignalServiceProtos.pb.h" #import "SignalAccount.h" +#import "TSContactThread.h" #import NS_ASSUME_NONNULL_BEGIN @@ -51,6 +53,16 @@ NS_ASSUME_NONNULL_BEGIN [contactBuilder setProfileKey:profileKeyData]; } + TSContactThread *_Nullable contactThread = [TSContactThread getThreadWithContactId:signalAccount.recipientId]; + if (contactThread) { + OWSDisappearingMessagesConfiguration *_Nullable disappearingMessagesConfiguration = + [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:contactThread.uniqueId]; + + if (disappearingMessagesConfiguration && disappearingMessagesConfiguration.isEnabled) { + [contactBuilder setExpireTimer:disappearingMessagesConfiguration.durationSeconds]; + } + } + NSData *contactData = [[contactBuilder build] data]; uint32_t contactDataLength = (uint32_t)contactData.length;