diff --git a/src/Messages/TSMessagesManager.m b/src/Messages/TSMessagesManager.m index e3bdce81b..bf2129a85 100644 --- a/src/Messages/TSMessagesManager.m +++ b/src/Messages/TSMessagesManager.m @@ -336,19 +336,6 @@ NS_ASSUME_NONNULL_BEGIN NSString *recipientId = messageEnvelope.source; int deviceId = messageEnvelope.sourceDevice; dispatch_async([OWSDispatch sessionStoreQueue], ^{ - if (![storageManager containsSession:recipientId deviceId:deviceId]) { - __block TSErrorMessage *errorMessage; - [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - errorMessage = - [TSErrorMessage missingSessionWithEnvelope:messageEnvelope withTransaction:transaction]; - [errorMessage saveWithTransaction:transaction]; - }]; - [self notififyForErrorMessage:errorMessage withEnvelope:messageEnvelope]; - DDLogError(@"Skipping message envelope for unknown session."); - completion(nil); - return; - } - // DEPRECATED - Remove after all clients have been upgraded. NSData *encryptedData = messageEnvelope.hasContent ? messageEnvelope.content : messageEnvelope.legacyMessage; diff --git a/src/Storage/AxolotlStore/TSStorageManager+SessionStore.h b/src/Storage/AxolotlStore/TSStorageManager+SessionStore.h index b33f33119..741146204 100644 --- a/src/Storage/AxolotlStore/TSStorageManager+SessionStore.h +++ b/src/Storage/AxolotlStore/TSStorageManager+SessionStore.h @@ -7,6 +7,8 @@ @interface TSStorageManager (SessionStore) +- (void)archiveAllSessionsForContact:(NSString *)contactIdentifier; + #pragma mark - debug - (void)printAllSessions; diff --git a/src/Storage/AxolotlStore/TSStorageManager+SessionStore.m b/src/Storage/AxolotlStore/TSStorageManager+SessionStore.m index 74e26fc53..2e6f3690b 100644 --- a/src/Storage/AxolotlStore/TSStorageManager+SessionStore.m +++ b/src/Storage/AxolotlStore/TSStorageManager+SessionStore.m @@ -3,6 +3,7 @@ // #import "TSStorageManager+SessionStore.h" +#import NSString *const TSStorageManagerSessionStoreCollection = @"TSStorageManagerSessionStoreCollection"; NSString *const kSessionStoreDBConnectionKey = @"kSessionStoreDBConnectionKey"; @@ -158,6 +159,35 @@ void AssertIsOnSessionStoreQueue() }]; } +- (void)archiveAllSessionsForContact:(NSString *)contactIdentifier +{ + AssertIsOnSessionStoreQueue(); + + DDLogInfo(@"[TSStorageManager (SessionStore)] archiving all sessions for contact: %@", contactIdentifier); + + __block NSDictionary *sessionRecords; + [self.sessionDBConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + sessionRecords = + [transaction objectForKey:contactIdentifier inCollection:TSStorageManagerSessionStoreCollection]; + + + for (id deviceId in sessionRecords) { + id object = sessionRecords[deviceId]; + if (![object isKindOfClass:[SessionRecord class]]) { + OWSFail(@"Unexpected object in session dict: %@", object); + continue; + } + + SessionRecord *sessionRecord = (SessionRecord *)object; + [sessionRecord archiveCurrentState]; + } + + [transaction setObject:sessionRecords + forKey:contactIdentifier + inCollection:TSStorageManagerSessionStoreCollection]; + }]; +} + #pragma mark - debug - (void)printAllSessions