Merge pull request #250 from loki-project/photo-sending-bug

Retry Failed Attachment Downloads
pull/252/head
Niels Andriesse 5 years ago committed by GitHub
commit 449402804c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -5,9 +5,9 @@
<key>BuildDetails</key> <key>BuildDetails</key>
<dict> <dict>
<key>CarthageVersion</key> <key>CarthageVersion</key>
<string>0.35.0</string> <string>0.34.0</string>
<key>OSXVersion</key> <key>OSXVersion</key>
<string>10.15.6</string> <string>10.15.5</string>
<key>WebRTCCommit</key> <key>WebRTCCommit</key>
<string>1445d719bf05280270e9f77576f80f973fd847f8 M73</string> <string>1445d719bf05280270e9f77576f80f973fd847f8 M73</string>
</dict> </dict>

@ -517,7 +517,7 @@ static NSTimeInterval launchStartedAt;
[[[OWSFailedMessagesJob alloc] initWithPrimaryStorage:self.primaryStorage] run]; [[[OWSFailedMessagesJob alloc] initWithPrimaryStorage:self.primaryStorage] run];
// Mark all "incomplete" calls as missed, e.g. any incoming or outgoing calls that were not // Mark all "incomplete" calls as missed, e.g. any incoming or outgoing calls that were not
// connected, failed or hung up before the app existed should be marked as missed. // connected, failed or hung up before the app existed should be marked as missed.
[[[OWSIncompleteCallsJob alloc] initWithPrimaryStorage:self.primaryStorage] run]; // [[[OWSIncompleteCallsJob alloc] initWithPrimaryStorage:self.primaryStorage] run];
[[[OWSFailedAttachmentDownloadsJob alloc] initWithPrimaryStorage:self.primaryStorage] run]; [[[OWSFailedAttachmentDownloadsJob alloc] initWithPrimaryStorage:self.primaryStorage] run];
}); });
} else { } else {
@ -526,7 +526,7 @@ static NSTimeInterval launchStartedAt;
// Unregistered user should have no unread messages. e.g. if you delete your account. // Unregistered user should have no unread messages. e.g. if you delete your account.
[AppEnvironment.shared.notificationPresenter clearAllNotifications]; [AppEnvironment.shared.notificationPresenter clearAllNotifications];
[self.socketManager requestSocketOpen]; // [self.socketManager requestSocketOpen];
UITapGestureRecognizer *gesture = UITapGestureRecognizer *gesture =
[[UITapGestureRecognizer alloc] initWithTarget:[Pastelog class] action:@selector(submitLogs)]; [[UITapGestureRecognizer alloc] initWithTarget:[Pastelog class] action:@selector(submitLogs)];
@ -540,8 +540,8 @@ static NSTimeInterval launchStartedAt;
// At this point, potentially lengthy DB locking migrations could be running. // At this point, potentially lengthy DB locking migrations could be running.
// Avoid blocking app launch by putting all further possible DB access in async block // Avoid blocking app launch by putting all further possible DB access in async block
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
[self.socketManager requestSocketOpen]; // [self.socketManager requestSocketOpen];
[Environment.shared.contactsManager fetchSystemContactsOnceIfAlreadyAuthorized]; // [Environment.shared.contactsManager fetchSystemContactsOnceIfAlreadyAuthorized];
NSString *userPublicKey = self.tsAccountManager.localNumber; NSString *userPublicKey = self.tsAccountManager.localNumber;

@ -124,7 +124,9 @@ UIInterfaceOrientationMask DefaultUIInterfaceOrientationMask(void)
self.bottomLayoutView = view; self.bottomLayoutView = view;
if (avoidNotch) { if (avoidNotch) {
self.bottomLayoutConstraint = [view autoPinEdge:ALEdgeBottom toEdge:ALEdgeBottom ofView:self.view withOffset:0]; NSLayoutConstraint *bottomLayoutConstraint = [view.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor];
[bottomLayoutConstraint setActive:YES];
self.bottomLayoutConstraint = bottomLayoutConstraint;
} else { } else {
self.bottomLayoutConstraint = [view autoPinEdge:ALEdgeBottom toEdge:ALEdgeBottom ofView:self.view]; self.bottomLayoutConstraint = [view autoPinEdge:ALEdgeBottom toEdge:ALEdgeBottom ofView:self.view];
} }

@ -378,19 +378,30 @@ typedef void (^AttachmentDownloadFailure)(NSError *error);
}); });
}; };
dispatch_async([OWSDispatch attachmentsQueue], ^{ __block NSUInteger retryCount = 0;
[self downloadFromLocation:attachmentPointer.downloadURL NSUInteger maxRetryCount = 4;
job:job __block void (^attempt)();
success:^(NSString *encryptedDataFilePath) { attempt = ^() {
[self decryptAttachmentPath:encryptedDataFilePath dispatch_async([OWSDispatch attachmentsQueue], ^{
attachmentPointer:attachmentPointer [self downloadFromLocation:attachmentPointer.downloadURL
success:markAndHandleSuccess job:job
failure:markAndHandleFailure]; success:^(NSString *encryptedDataFilePath) {
} [self decryptAttachmentPath:encryptedDataFilePath
failure:^(NSURLSessionTask *_Nullable task, NSError *error) { attachmentPointer:attachmentPointer
markAndHandleFailure(error); success:markAndHandleSuccess
}]; failure:markAndHandleFailure];
}); }
failure:^(NSURLSessionTask *task, NSError *error) {
if (retryCount == maxRetryCount) {
markAndHandleFailure(error);
} else {
retryCount += 1;
attempt();
}
}];
});
};
attempt();
} }
- (void)decryptAttachmentPath:(NSString *)encryptedDataFilePath - (void)decryptAttachmentPath:(NSString *)encryptedDataFilePath
@ -630,6 +641,7 @@ typedef void (^AttachmentDownloadFailure)(NSError *error);
} }
successHandler(tempFilePath); successHandler(tempFilePath);
}]; }];
[task resume]; [task resume];
} }

Loading…
Cancel
Save