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) {
continue;
} }
if (mediaAlbumItem.attachmentStream.isImage || mediaAlbumItem.attachmentStream.isAnimated) {
NSData *data = [NSData dataWithContentsOfURL:[mediaAlbumItem.attachmentStream originalMediaURL]];
if (!data) {
OWSFailDebug(@"Could not load image data");
continue;
} }
[library writeImageDataToSavedPhotosAlbum:data
metadata:nil - (void)saveMediaAlbumItems
completionBlock:^(NSURL *assetURL, NSError *error) { {
if (error) { // We need to do these writes serially to avoid "write busy" errors
OWSLogWarn(@"Error saving image to photo album: %@", error); // from too many concurrent asset saves.
[self saveMediaAlbumItems:[self.mediaAlbumItems mutableCopy]];
} }
}];
- (void)saveMediaAlbumItems:(NSMutableArray<ConversationMediaAlbumItem *> *)mediaAlbumItems
{
if (mediaAlbumItems.count < 1) {
return;
} }
if (mediaAlbumItem.attachmentStream.isVideo) { ConversationMediaAlbumItem *mediaAlbumItem = mediaAlbumItems.firstObject;
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum( [mediaAlbumItems removeObjectAtIndex:0];
mediaAlbumItem.attachmentStream.originalFilePath)) {
UISaveVideoAtPathToSavedPhotosAlbum( if (!mediaAlbumItem.attachmentStream || !mediaAlbumItem.attachmentStream.isValidVisualMedia) {
mediaAlbumItem.attachmentStream.originalFilePath, self, nil, nil); // Skip this item.
} else if (mediaAlbumItem.attachmentStream.isImage || mediaAlbumItem.attachmentStream.isAnimated) {
[[PHPhotoLibrary sharedPhotoLibrary]
performChanges:^{
[PHAssetChangeRequest
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