Merge pull request #181 from loki-project/multi-device-session-reset

Multi Device Friend Request Bug Fixes
pull/183/head
Niels Andriesse 5 years ago committed by GitHub
commit 1e797353d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -404,10 +404,21 @@ NS_ASSUME_NONNULL_BEGIN
return; return;
} }
BOOL duplicateEnvelope = [self.incomingMessageFinder existsMessageWithTimestamp:envelope.timestamp OWSPrimaryStorage *storage = OWSPrimaryStorage.sharedManager;
sourceId:envelope.source __block NSSet<NSString *> *linkedDeviceHexEncodedPublicKeys;
sourceDeviceId:envelope.sourceDevice [storage.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
transaction:transaction]; linkedDeviceHexEncodedPublicKeys = [LKDatabaseUtilities getLinkedDeviceHexEncodedPublicKeysFor:envelope.source in:transaction];
}];
BOOL duplicateEnvelope = NO;
for (NSString *hexEncodedPublicKey in linkedDeviceHexEncodedPublicKeys) {
duplicateEnvelope = duplicateEnvelope
|| [self.incomingMessageFinder existsMessageWithTimestamp:envelope.timestamp
sourceId:hexEncodedPublicKey
sourceDeviceId:envelope.sourceDevice
transaction:transaction];
}
if (duplicateEnvelope) { if (duplicateEnvelope) {
OWSLogInfo(@"Ignoring previously received envelope from: %@ with timestamp: %llu.", OWSLogInfo(@"Ignoring previously received envelope from: %@ with timestamp: %llu.",
envelopeAddress(envelope), envelopeAddress(envelope),

@ -1185,7 +1185,11 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
[message saveIsCalculatingProofOfWork:YES withTransaction:transaction]; [message saveIsCalculatingProofOfWork:YES withTransaction:transaction];
// Update the message and thread if needed // Update the message and thread if needed
if (signalMessage.isFriendRequest) { if (signalMessage.isFriendRequest) {
[message.thread saveFriendRequestStatus:LKThreadFriendRequestStatusRequestSending withTransaction:transaction]; __block TSContactThread *thread;
[OWSPrimaryStorage.sharedManager.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
thread = [TSContactThread getThreadWithContactId:recipientID transaction:transaction]; // Take into account multi device
}];
[thread saveFriendRequestStatus:LKThreadFriendRequestStatusRequestSending withTransaction:transaction];
[message saveFriendRequestStatus:LKMessageFriendRequestStatusSendingOrFailed withTransaction:transaction]; [message saveFriendRequestStatus:LKMessageFriendRequestStatusSendingOrFailed withTransaction:transaction];
} }
}]; }];
@ -1197,7 +1201,11 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
// Update the message and thread if needed // Update the message and thread if needed
if (signalMessage.isFriendRequest) { if (signalMessage.isFriendRequest) {
[message.thread saveFriendRequestStatus:LKThreadFriendRequestStatusNone withTransaction:transaction]; __block TSContactThread *thread;
[OWSPrimaryStorage.sharedManager.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
thread = [TSContactThread getThreadWithContactId:recipientID transaction:transaction]; // Take into account multi device
}];
[thread saveFriendRequestStatus:LKThreadFriendRequestStatusNone withTransaction:transaction];
[message saveFriendRequestStatus:LKMessageFriendRequestStatusSendingOrFailed withTransaction:transaction]; [message saveFriendRequestStatus:LKMessageFriendRequestStatusSendingOrFailed withTransaction:transaction];
} }
// Update the PoW calculation status // Update the PoW calculation status
@ -1224,7 +1232,11 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
if (!message.skipSave) { if (!message.skipSave) {
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
// Update the thread // Update the thread
[message.thread saveFriendRequestStatus:LKThreadFriendRequestStatusRequestSent withTransaction:transaction]; __block TSContactThread *thread;
[OWSPrimaryStorage.sharedManager.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
thread = [TSContactThread getThreadWithContactId:recipientID transaction:transaction]; // Take into account multi device
}];
[thread saveFriendRequestStatus:LKThreadFriendRequestStatusRequestSent withTransaction:transaction];
[message.thread removeOldOutgoingFriendRequestMessagesIfNeededWithTransaction:transaction]; [message.thread removeOldOutgoingFriendRequestMessagesIfNeededWithTransaction:transaction];
if ([message.thread isKindOfClass:[TSContactThread class]]) { if ([message.thread isKindOfClass:[TSContactThread class]]) {
[((TSContactThread *) message.thread) removeAllSessionRestoreDevicesWithTransaction:transaction]; [((TSContactThread *) message.thread) removeAllSessionRestoreDevicesWithTransaction:transaction];

Loading…
Cancel
Save