pull/1/head
Frederic Jacobs 11 years ago
parent eff589af93
commit 7a1a2c2050

@ -13,8 +13,6 @@
- (void)handleReceivedMediaMessage:(IncomingPushMessageSignal*)message withContent:(PushMessageContent*)content; - (void)handleReceivedMediaMessage:(IncomingPushMessageSignal*)message withContent:(PushMessageContent*)content;
- (void)retrieveAttachment:(TSAttachment*)attachment; - (void)retrieveAttachment:(TSAttachment*)attachment;
- (void)sendAttachment:(NSData*)attachmentData contentType:(NSString*)contentType thread:(TSThread*)thread;
- (void)sendAttachment:(NSData*)attachmentData contentType:(NSString*)contentType inMessage:(TSOutgoingMessage*)outgoingMessage thread:(TSThread*)thread; - (void)sendAttachment:(NSData*)attachmentData contentType:(NSString*)contentType inMessage:(TSOutgoingMessage*)outgoingMessage thread:(TSThread*)thread;
@end @end

@ -41,21 +41,37 @@ dispatch_queue_t attachmentsQueue() {
- (void)handleReceivedMediaMessage:(IncomingPushMessageSignal*)message withContent:(PushMessageContent*)content { - (void)handleReceivedMediaMessage:(IncomingPushMessageSignal*)message withContent:(PushMessageContent*)content {
NSArray *attachmentsToRetrieve = (content.group != nil && (content.group.type == PushMessageContentGroupContextTypeUpdate)) ? [NSArray arrayWithObject:content.group.avatar] : content.attachments; NSArray *attachmentsToRetrieve = (content.group != nil && (content.group.type == PushMessageContentGroupContextTypeUpdate)) ? [NSArray arrayWithObject:content.group.avatar] : content.attachments;
NSMutableArray *retrievedAttachments = [NSMutableArray array]; NSMutableArray *retrievedAttachments = [NSMutableArray array];
__block BOOL shouldProcessMessage = YES;
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
for (PushMessageContentAttachmentPointer *pointer in attachmentsToRetrieve) { for (PushMessageContentAttachmentPointer *pointer in attachmentsToRetrieve) {
TSAttachmentPointer *attachmentPointer = (content.group != nil && (content.group.type == PushMessageContentGroupContextTypeUpdate)) ? [[TSAttachmentPointer alloc] initWithIdentifier:pointer.id key:pointer.key contentType:pointer.contentType relay:message.relay avatarOfGroupId:content.group.id] : [[TSAttachmentPointer alloc] initWithIdentifier:pointer.id key:pointer.key contentType:pointer.contentType relay:message.relay]; TSAttachmentPointer *attachmentPointer = (content.group != nil && (content.group.type == PushMessageContentGroupContextTypeUpdate)) ? [[TSAttachmentPointer alloc] initWithIdentifier:pointer.id key:pointer.key contentType:pointer.contentType relay:message.relay avatarOfGroupId:content.group.id] : [[TSAttachmentPointer alloc] initWithIdentifier:pointer.id key:pointer.key contentType:pointer.contentType relay:message.relay];
[attachmentPointer saveWithTransaction:transaction];
dispatch_async(attachmentsQueue(), ^{ if ([attachmentPointer.contentType hasPrefix:@"image/"]) {
[self retrieveAttachment:attachmentPointer]; [attachmentPointer saveWithTransaction:transaction];
});
[retrievedAttachments addObject:attachmentPointer.uniqueId]; dispatch_async(attachmentsQueue(), ^{
[self retrieveAttachment:attachmentPointer];
});
[retrievedAttachments addObject:attachmentPointer.uniqueId];
shouldProcessMessage = YES;
} else {
TSThread *thread = [TSContactThread getOrCreateThreadWithContactId:message.source transaction:transaction];
TSInfoMessage *infoMessage = [[TSInfoMessage alloc] initWithTimestamp:message.timestamp
inThread:thread
messageType:TSInfoMessageTypeUnsupportedMessage];
[infoMessage saveWithTransaction:transaction];
shouldProcessMessage = NO;
}
} }
}]; }];
[self handleReceivedMessage:message withContent:content attachments:retrievedAttachments]; if (shouldProcessMessage) {
[self handleReceivedMessage:message withContent:content attachments:retrievedAttachments];
}
} }
- (void)sendAttachment:(NSData*)attachmentData contentType:(NSString*)contentType inMessage:(TSOutgoingMessage*)outgoingMessage thread:(TSThread*)thread { - (void)sendAttachment:(NSData*)attachmentData contentType:(NSString*)contentType inMessage:(TSOutgoingMessage*)outgoingMessage thread:(TSThread*)thread {
@ -76,8 +92,10 @@ dispatch_queue_t attachmentsQueue() {
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[result.pointer saveWithTransaction:transaction]; [result.pointer saveWithTransaction:transaction];
}]; }];
[outgoingMessage.attachments addObject:attachementId];
[self sendMessage:outgoingMessage inThread:thread]; TSOutgoingMessage *messageToSend = [[TSOutgoingMessage alloc] initWithTimestamp:outgoingMessage.timeStamp inThread:thread messageBody:@"" attachments:[@[attachementId] mutableCopy]];
[self sendMessage:messageToSend inThread:thread];
} else{ } else{
DDLogWarn(@"Failed to upload attachment"); DDLogWarn(@"Failed to upload attachment");
} }
@ -87,7 +105,7 @@ dispatch_queue_t attachmentsQueue() {
}); });
} failure:^(NSURLSessionDataTask *task, NSError *error) { } failure:^(NSURLSessionDataTask *task, NSError *error) {
DDLogError(@"Failed to get attachment allocated: %@", error); DDLogError(@"Failed to get attachment allocated: %@", error);
}]; }];
} }
- (void)sendAttachment:(NSData*)attachmentData contentType:(NSString*)contentType thread:(TSThread*)thread { - (void)sendAttachment:(NSData*)attachmentData contentType:(NSString*)contentType thread:(TSThread*)thread {
@ -98,7 +116,7 @@ dispatch_queue_t attachmentsQueue() {
- (void)retrieveAttachment:(TSAttachmentPointer*)attachment { - (void)retrieveAttachment:(TSAttachmentPointer*)attachment {
TSAttachmentRequest *attachmentRequest = [[TSAttachmentRequest alloc] initWithId:[attachment identifier] TSAttachmentRequest *attachmentRequest = [[TSAttachmentRequest alloc] initWithId:[attachment identifier]
relay:attachment.relay]; relay:attachment.relay];
[[TSNetworkManager sharedManager] queueAuthenticatedRequest:attachmentRequest success:^(NSURLSessionDataTask *task, id responseObject) { [[TSNetworkManager sharedManager] queueAuthenticatedRequest:attachmentRequest success:^(NSURLSessionDataTask *task, id responseObject) {
if ([responseObject isKindOfClass:[NSDictionary class]]) { if ([responseObject isKindOfClass:[NSDictionary class]]) {
@ -123,8 +141,8 @@ dispatch_queue_t attachmentsQueue() {
DDLogError(@"Failed to get attachment decrypted ..."); DDLogError(@"Failed to get attachment decrypted ...");
} else { } else {
TSAttachmentStream *stream = [[TSAttachmentStream alloc] initWithIdentifier:attachment.uniqueId TSAttachmentStream *stream = [[TSAttachmentStream alloc] initWithIdentifier:attachment.uniqueId
data:plaintext key:attachment.encryptionKey data:plaintext key:attachment.encryptionKey
contentType:attachment.contentType]; contentType:attachment.contentType];
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[stream saveWithTransaction:transaction]; [stream saveWithTransaction:transaction];
if([attachment.avatarOfGroupId length]!=0) { if([attachment.avatarOfGroupId length]!=0) {
@ -132,7 +150,7 @@ dispatch_queue_t attachmentsQueue() {
TSGroupThread* gThread = [TSGroupThread getOrCreateThreadWithGroupModel:emptyModelToFillOutId transaction:transaction]; TSGroupThread* gThread = [TSGroupThread getOrCreateThreadWithGroupModel:emptyModelToFillOutId transaction:transaction];
gThread.groupModel.groupImage=[stream image]; gThread.groupModel.groupImage=[stream image];
[gThread saveWithTransaction:transaction]; [gThread saveWithTransaction:transaction];
} }
}]; }];
} }

@ -700,7 +700,14 @@ typedef enum : NSUInteger {
DDLogWarn(@"Video formats not supported, yet"); DDLogWarn(@"Video formats not supported, yet");
} else if (picture_camera) { } else if (picture_camera) {
DDLogVerbose(@"Sending picture attachement ..."); DDLogVerbose(@"Sending picture attachement ...");
[[TSMessagesManager sharedManager] sendAttachment:[self qualityAdjustedAttachmentForImage:picture_camera] contentType:@"image/jpeg" thread:self.thread];
TSOutgoingMessage *message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] inThread:self.thread messageBody:@"Uploading attachment" attachments:[NSMutableArray array]];
[self.editingDatabaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[message saveWithTransaction:transaction];
}];
[[TSMessagesManager sharedManager] sendAttachment:[self qualityAdjustedAttachmentForImage:picture_camera] contentType:@"image/jpeg" inMessage:message thread:self.thread];
[self finishSendingMessage]; [self finishSendingMessage];
} }

Loading…
Cancel
Save