Merge branch 'charlesmchen/shareAllMediaInAlbum' into release/2.34.0

pull/1/head
Matthew Chen 6 years ago
commit f822ee7375

@ -9,7 +9,6 @@
#import "OWSMessageHeaderView.h" #import "OWSMessageHeaderView.h"
#import "OWSSystemMessageCell.h" #import "OWSSystemMessageCell.h"
#import "Signal-Swift.h" #import "Signal-Swift.h"
#import <AssetsLibrary/AssetsLibrary.h>
#import <SignalMessaging/OWSUnreadIndicator.h> #import <SignalMessaging/OWSUnreadIndicator.h>
#import <SignalServiceKit/NSData+Image.h> #import <SignalServiceKit/NSData+Image.h>
#import <SignalServiceKit/NSString+SSK.h> #import <SignalServiceKit/NSString+SSK.h>
@ -1020,39 +1019,57 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
break; break;
} }
case OWSMessageCellType_MediaAlbum: { case OWSMessageCellType_MediaAlbum: {
// TODO: Use PHPhotoLibrary. [self saveMediaAlbumItems];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; break;
for (ConversationMediaAlbumItem *mediaAlbumItem in self.mediaAlbumItems) { }
if (!mediaAlbumItem.attachmentStream) { }
continue; }
}
if (!mediaAlbumItem.attachmentStream.isValidVisualMedia) { - (void)saveMediaAlbumItems
continue; {
} // We need to do these writes serially to avoid "write busy" errors
if (mediaAlbumItem.attachmentStream.isImage || mediaAlbumItem.attachmentStream.isAnimated) { // from too many concurrent asset saves.
NSData *data = [NSData dataWithContentsOfURL:[mediaAlbumItem.attachmentStream originalMediaURL]]; [self saveMediaAlbumItems:[self.mediaAlbumItems mutableCopy]];
if (!data) { }
OWSFailDebug(@"Could not load image data");
continue; - (void)saveMediaAlbumItems:(NSMutableArray<ConversationMediaAlbumItem *> *)mediaAlbumItems
} {
[library writeImageDataToSavedPhotosAlbum:data if (mediaAlbumItems.count < 1) {
metadata:nil return;
completionBlock:^(NSURL *assetURL, NSError *error) { }
if (error) { ConversationMediaAlbumItem *mediaAlbumItem = mediaAlbumItems.firstObject;
OWSLogWarn(@"Error saving image to photo album: %@", error); [mediaAlbumItems removeObjectAtIndex:0];
}
}]; if (!mediaAlbumItem.attachmentStream || !mediaAlbumItem.attachmentStream.isValidVisualMedia) {
} // Skip this item.
if (mediaAlbumItem.attachmentStream.isVideo) { } else if (mediaAlbumItem.attachmentStream.isImage || mediaAlbumItem.attachmentStream.isAnimated) {
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum( [[PHPhotoLibrary sharedPhotoLibrary]
mediaAlbumItem.attachmentStream.originalFilePath)) { performChanges:^{
UISaveVideoAtPathToSavedPhotosAlbum( [PHAssetChangeRequest
mediaAlbumItem.attachmentStream.originalFilePath, self, nil, nil); creationRequestForAssetFromImageAtFileURL:mediaAlbumItem.attachmentStream.originalMediaURL];
} }
completionHandler:^(BOOL success, NSError *error) {
if (error || !success) {
OWSFailDebug(@"Image save failed: %@", error);
} }
[self saveMediaAlbumItems:mediaAlbumItems];
}];
return;
} else if (mediaAlbumItem.attachmentStream.isVideo) {
[[PHPhotoLibrary sharedPhotoLibrary]
performChanges:^{
[PHAssetChangeRequest
creationRequestForAssetFromVideoAtFileURL:mediaAlbumItem.attachmentStream.originalMediaURL];
} }
} completionHandler:^(BOOL success, NSError *error) {
if (error || !success) {
OWSFailDebug(@"Video save failed: %@", error);
}
[self saveMediaAlbumItems:mediaAlbumItems];
}];
return;
} }
return [self saveMediaAlbumItems:mediaAlbumItems];
} }
- (void)deleteAction - (void)deleteAction

Loading…
Cancel
Save