1 - the uploads are cancellable

2 - delete a room also cancelled epnding uploads/downloads
This commit is contained in:
ylecollen 2015-01-19 15:30:45 +01:00
parent 7b84bb2320
commit 5672b385c0
4 changed files with 39 additions and 10 deletions

View file

@ -66,6 +66,7 @@ typedef void (^blockMediaLoader_onError)(NSError *error);
NSString *uploadId; NSString *uploadId;
CGFloat initialRange; CGFloat initialRange;
CGFloat range; CGFloat range;
NSOperation* operation;
} }
@property (strong, readonly) NSMutableDictionary* statisticsDict; @property (strong, readonly) NSMutableDictionary* statisticsDict;

View file

@ -33,7 +33,7 @@ NSString *const kMediaLoaderProgressDownloadRateKey = @"kMediaLoaderProgressDown
- (void)cancel { - (void)cancel {
// Cancel potential connection // Cancel potential connection
if (downloadConnection) { if (downloadConnection) {
NSLog(@"Image download has been cancelled (%@)", mediaURL); NSLog(@"media download has been cancelled (%@)", mediaURL);
if (onError){ if (onError){
onError(nil); onError(nil);
} }
@ -45,6 +45,12 @@ NSString *const kMediaLoaderProgressDownloadRateKey = @"kMediaLoaderProgressDown
downloadData = nil; downloadData = nil;
} }
else { else {
if (operation.executing) {
NSLog(@"media upload has been cancelled (%@)", mediaURL);
[operation cancel];
operation = nil;
}
// Reset blocks // Reset blocks
onSuccess = nil; onSuccess = nil;
onError = nil; onError = nil;
@ -200,7 +206,7 @@ NSString *const kMediaLoaderProgressDownloadRateKey = @"kMediaLoaderProgressDown
statsStartTime = CFAbsoluteTimeGetCurrent(); statsStartTime = CFAbsoluteTimeGetCurrent();
MatrixHandler *mxHandler = [MatrixHandler sharedHandler]; MatrixHandler *mxHandler = [MatrixHandler sharedHandler];
[mxHandler.mxRestClient uploadContent:data mimeType:mimeType timeout:30 success:success failure:failure uploadProgress:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { operation = [mxHandler.mxRestClient uploadContent:data mimeType:mimeType timeout:30 success:success failure:failure uploadProgress:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
[self updateUploadProgressWithBytesWritten:bytesWritten totalBytesWritten:totalBytesWritten andTotalBytesExpectedToWrite:totalBytesExpectedToWrite]; [self updateUploadProgressWithBytesWritten:bytesWritten totalBytesWritten:totalBytesWritten andTotalBytesExpectedToWrite:totalBytesExpectedToWrite];
}]; }];

View file

@ -23,6 +23,8 @@
#import "AppDelegate.h" #import "AppDelegate.h"
#import "MatrixHandler.h" #import "MatrixHandler.h"
#import "MediaManager.h"
@interface RecentsViewController () { @interface RecentsViewController () {
// Array of RecentRooms // Array of RecentRooms
NSMutableArray *recents; NSMutableArray *recents;
@ -548,7 +550,14 @@
} else { } else {
recentRoom = recents[indexPath.row]; recentRoom = recents[indexPath.row];
} }
MXRoom *mxRoom = [[MatrixHandler sharedHandler].mxSession roomWithRoomId:recentRoom.roomId]; MXRoom *mxRoom = [[MatrixHandler sharedHandler].mxSession roomWithRoomId:recentRoom.roomId];
// cancel pending uploads/downloads
// they are useless by now
[MediaManager cancelDownloadsInFolder:recentRoom.roomId];
[MediaManager cancelUploadsInFolder:recentRoom.roomId];
[mxRoom leave:^{ [mxRoom leave:^{
// Refresh table display // Refresh table display
if (filteredRecents) { if (filteredRecents) {

View file

@ -1262,8 +1262,12 @@ NSString *const kCmdResetUserPowerLevel = @"/deop";
[self sendMessage:videoContent withLocalEvent:localEvent]; [self sendMessage:videoContent withLocalEvent:localEvent];
} failure:^(NSError *error) { } failure:^(NSError *error) {
NSLog(@"Video upload failed"); NSLog(@"Video upload failed");
[MediaManager removeUploaderWithId:localEvent.eventId inFolder:self.roomId]; // check if the upload is still defined
[self handleError:error forLocalEvent:localEvent]; // it could have been cancelled with an external events
if ([MediaManager existingUploaderWithId:localEvent.eventId inFolder:self.roomId]) {
[MediaManager removeUploaderWithId:localEvent.eventId inFolder:self.roomId];
[self handleError:error forLocalEvent:localEvent];
}
}]; }];
} }
else { else {
@ -1351,9 +1355,13 @@ NSString *const kCmdResetUserPowerLevel = @"/deop";
} }
}]; }];
} failure:^(NSError *error) { } failure:^(NSError *error) {
NSLog(@"Video thumbnail upload failed"); // check if the upload is still defined
[MediaManager removeUploaderWithId:localEvent.eventId inFolder:self.roomId]; // it could have been cancelled with an external events
[self handleError:error forLocalEvent:localEvent]; if ([MediaManager existingUploaderWithId:localEvent.eventId inFolder:self.roomId]) {
NSLog(@"Video thumbnail upload failed");
[MediaManager removeUploaderWithId:localEvent.eventId inFolder:self.roomId];
[self handleError:error forLocalEvent:localEvent];
}
}]; }];
} }
@ -2920,9 +2928,14 @@ NSString *const kCmdResetUserPowerLevel = @"/deop";
// Send message for this attachment // Send message for this attachment
[self sendMessage:imageMessage withLocalEvent:localEvent]; [self sendMessage:imageMessage withLocalEvent:localEvent];
} failure:^(NSError *error) { } failure:^(NSError *error) {
[MediaManager removeUploaderWithId:localEvent.eventId inFolder:self.roomId]; // check if the upload is still defined
NSLog(@"Failed to upload image: %@", error); // it could have been cancelled with an external events
[self handleError:error forLocalEvent:localEvent]; if ([MediaManager existingUploaderWithId:localEvent.eventId inFolder:self.roomId])
{
[MediaManager removeUploaderWithId:localEvent.eventId inFolder:self.roomId];
NSLog(@"Failed to upload image: %@", error);
[self handleError:error forLocalEvent:localEvent];
}
}]; }];
} }