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 5d2e3862bf
commit 1c388b44c2
4 changed files with 39 additions and 10 deletions

View file

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

View file

@ -33,7 +33,7 @@ NSString *const kMediaLoaderProgressDownloadRateKey = @"kMediaLoaderProgressDown
- (void)cancel {
// Cancel potential connection
if (downloadConnection) {
NSLog(@"Image download has been cancelled (%@)", mediaURL);
NSLog(@"media download has been cancelled (%@)", mediaURL);
if (onError){
onError(nil);
}
@ -45,6 +45,12 @@ NSString *const kMediaLoaderProgressDownloadRateKey = @"kMediaLoaderProgressDown
downloadData = nil;
}
else {
if (operation.executing) {
NSLog(@"media upload has been cancelled (%@)", mediaURL);
[operation cancel];
operation = nil;
}
// Reset blocks
onSuccess = nil;
onError = nil;
@ -200,7 +206,7 @@ NSString *const kMediaLoaderProgressDownloadRateKey = @"kMediaLoaderProgressDown
statsStartTime = CFAbsoluteTimeGetCurrent();
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];
}];

View file

@ -23,6 +23,8 @@
#import "AppDelegate.h"
#import "MatrixHandler.h"
#import "MediaManager.h"
@interface RecentsViewController () {
// Array of RecentRooms
NSMutableArray *recents;
@ -548,7 +550,14 @@
} else {
recentRoom = recents[indexPath.row];
}
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:^{
// Refresh table display
if (filteredRecents) {

View file

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