From a9ad6643a05694cf98eb7c1e5dd388ac1661cf8b Mon Sep 17 00:00:00 2001 From: Frederic Jacobs Date: Sun, 25 Jan 2015 19:40:19 -1000 Subject: [PATCH] Close #509 --- .../Messages/TSInvalidIdentityKeyErrorMessage.m | 1 + .../Messages/TSMessagesManager+attachments.m | 15 ++++++++++----- .../src/textsecure/Messages/TSMessagesManager.h | 1 + .../src/textsecure/Messages/TSMessagesManager.m | 9 ++++++++- .../Network/API/Requests/TSAttachmentRequest.m | 2 +- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Signal/src/textsecure/Messages/TSInvalidIdentityKeyErrorMessage.m b/Signal/src/textsecure/Messages/TSInvalidIdentityKeyErrorMessage.m index 9723a7153..22ce843ba 100644 --- a/Signal/src/textsecure/Messages/TSInvalidIdentityKeyErrorMessage.m +++ b/Signal/src/textsecure/Messages/TSInvalidIdentityKeyErrorMessage.m @@ -70,6 +70,7 @@ } } }]; + [self removeWithTransaction:transaction]; }]; for (IncomingPushMessageSignal *aSignal in messagesToDecrypt) { diff --git a/Signal/src/textsecure/Messages/TSMessagesManager+attachments.m b/Signal/src/textsecure/Messages/TSMessagesManager+attachments.m index aefd38568..fd5f814ab 100644 --- a/Signal/src/textsecure/Messages/TSMessagesManager+attachments.m +++ b/Signal/src/textsecure/Messages/TSMessagesManager+attachments.m @@ -51,10 +51,6 @@ dispatch_queue_t attachmentsQueue() { if ([attachmentPointer.contentType hasPrefix:@"image/"]||[attachmentPointer.contentType hasPrefix:@"video/"] || [attachmentPointer.contentType hasPrefix:@"audio/"]) { [attachmentPointer saveWithTransaction:transaction]; - dispatch_async(attachmentsQueue(), ^{ - [self retrieveAttachment:attachmentPointer messageId:[TSInteraction stringFromTimeStamp:message.timestamp]]; - }); - [retrievedAttachments addObject:attachmentPointer.uniqueId]; shouldProcessMessage = YES; } @@ -70,7 +66,16 @@ dispatch_queue_t attachmentsQueue() { }]; if (shouldProcessMessage) { - [self handleReceivedMessage:message withContent:content attachments:retrievedAttachments]; + [self handleReceivedMessage:message withContent:content attachments:retrievedAttachments completionBlock:^(NSString *messageIdentifier) { + for (NSString *pointerId in retrievedAttachments) { + dispatch_async(attachmentsQueue(), ^{ + [self.dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { + TSAttachmentPointer *pointer = [TSAttachmentPointer fetchObjectWithUniqueID:pointerId transaction:transaction]; + [self retrieveAttachment:pointer messageId:messageIdentifier]; + }]; + }); + } + }]; } } diff --git a/Signal/src/textsecure/Messages/TSMessagesManager.h b/Signal/src/textsecure/Messages/TSMessagesManager.h index edfd9d851..471fcd78c 100644 --- a/Signal/src/textsecure/Messages/TSMessagesManager.h +++ b/Signal/src/textsecure/Messages/TSMessagesManager.h @@ -22,6 +22,7 @@ - (void)processException:(NSException*)exception outgoingMessage:(TSOutgoingMessage*)message; - (void)handleReceivedMessage:(IncomingPushMessageSignal*)message withContent:(PushMessageContent*)content attachments:(NSArray*)attachments; +- (void)handleReceivedMessage:(IncomingPushMessageSignal*)message withContent:(PushMessageContent*)content attachments:(NSArray*)attachments completionBlock:(void (^)(NSString* messageIdentifier))completionBlock ; -(void)handleSendToMyself:(TSOutgoingMessage*)outgoingMessage; diff --git a/Signal/src/textsecure/Messages/TSMessagesManager.m b/Signal/src/textsecure/Messages/TSMessagesManager.m index ceb8b1ffb..810876efa 100644 --- a/Signal/src/textsecure/Messages/TSMessagesManager.m +++ b/Signal/src/textsecure/Messages/TSMessagesManager.m @@ -238,7 +238,11 @@ }]; } -- (void)handleReceivedMessage:(IncomingPushMessageSignal*)message withContent:(PushMessageContent*)content attachments:(NSArray*)attachments { +- (void)handleReceivedMessage:(IncomingPushMessageSignal *)message withContent:(PushMessageContent *)content attachments:(NSArray *)attachments{ + [self handleReceivedMessage:message withContent:content attachments:attachments completionBlock:nil]; +} + +- (void)handleReceivedMessage:(IncomingPushMessageSignal*)message withContent:(PushMessageContent*)content attachments:(NSArray*)attachments completionBlock:(void (^)(NSString* messageIdentifier))completionBlock { uint64_t timeStamp = message.timestamp; NSString *body = content.body; NSData *groupId = content.hasGroup?content.group.id:nil; @@ -294,6 +298,9 @@ incomingMessage = [[TSIncomingMessage alloc] initWithTimestamp:timeStamp inThread:cThread messageBody:body attachments:attachments]; [incomingMessage saveWithTransaction:transaction]; thread = cThread; + if (completionBlock) { + completionBlock(incomingMessage.uniqueId); + } } NSString *name = [thread name]; [self notifyUserForIncomingMessage:incomingMessage from:name]; diff --git a/Signal/src/textsecure/Network/API/Requests/TSAttachmentRequest.m b/Signal/src/textsecure/Network/API/Requests/TSAttachmentRequest.m index abf614650..be46555c9 100644 --- a/Signal/src/textsecure/Network/API/Requests/TSAttachmentRequest.m +++ b/Signal/src/textsecure/Network/API/Requests/TSAttachmentRequest.m @@ -11,7 +11,7 @@ @implementation TSAttachmentRequest --(TSRequest*) initWithId:(NSNumber*) attachmentId relay:(NSString*)relay { +-(TSRequest*) initWithId:(NSNumber*)attachmentId relay:(NSString*)relay { NSString *path = [NSString stringWithFormat:@"%@/%@", textSecureAttachmentsAPI, attachmentId];