Merge branch 'charlesmchen/attachmentRetryVsFailure'

pull/1/head
Matthew Chen 8 years ago
commit d4e0c49ff9

@ -73,6 +73,8 @@ void AssertIsOnSendingQueue()
@end
#pragma mark -
typedef NS_ENUM(NSInteger, OWSSendMessageOperationState) {
OWSSendMessageOperationStateNew,
OWSSendMessageOperationStateExecuting,
@ -85,8 +87,12 @@ typedef NS_ENUM(NSInteger, OWSSendMessageOperationState) {
success:(void (^)())successHandler
failure:(RetryableFailureHandler)failureHandler;
- (void)saveMessage:(TSOutgoingMessage *)message withError:(NSError *)error;
@end
#pragma mark -
NSString *const OWSSendMessageOperationKeyIsExecuting = @"isExecuting";
NSString *const OWSSendMessageOperationKeyIsFinished = @"isFinished";
@ -103,6 +109,8 @@ NSUInteger const OWSSendMessageOperationMaxRetries = 4;
@end
#pragma mark -
@implementation OWSSendMessageOperation
- (instancetype)initWithMessage:(TSOutgoingMessage *)message
@ -140,6 +148,8 @@ NSUInteger const OWSSendMessageOperationMaxRetries = 4;
return;
}
[strongSelf.messageSender saveMessage:strongSelf.message withError:error];
DDLogDebug(@"%@ failed with error: %@", strongSelf.tag, error);
aFailureHandler(error);
[strongSelf markAsComplete];
@ -228,6 +238,7 @@ NSUInteger const OWSSendMessageOperationMaxRetries = 4;
[self tryWithRemainingRetries:remainingRetries - 1];
} else {
DDLogWarn(@"%@ Too many failures. Giving up sending.", self.tag);
self.failureHandler(error);
}
};
@ -363,17 +374,20 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
failure:(RetryableFailureHandler)failureHandler
{
DDLogDebug(@"%@ sending message: %@", self.tag, message.debugDescription);
RetryableFailureHandler markAndFailureHandler = ^(NSError *error, BOOL isRetryable) {
// TODO do we really want to mark this as failed if we're still retrying?
[self saveMessage:message withError:error];
failureHandler(error, isRetryable);
};
[self ensureAnyAttachmentsUploaded:message
success:^() {
[self deliverMessage:message success:successHandler failure:markAndFailureHandler];
}
failure:markAndFailureHandler];
success:^() {
[self deliverMessage:message
success:successHandler
failure:^(NSError *error, BOOL isRetryable) {
DDLogDebug(@"%@ Message send attempt failed: %@", self.tag, message.debugDescription);
failureHandler(error, isRetryable);
}];
}
failure:^(NSError *error, BOOL isRetryable) {
DDLogDebug(@"%@ Attachment upload attempt failed: %@", self.tag, message.debugDescription);
failureHandler(error, isRetryable);
}];
}
- (void)ensureAnyAttachmentsUploaded:(TSOutgoingMessage *)message

Loading…
Cancel
Save