Handle UIImage shares.

pull/1/head
Matthew Chen 7 years ago
parent 374714c456
commit 9d909025c9

@ -29,6 +29,9 @@ NS_ASSUME_NONNULL_BEGIN
+ (NSArray<NSString *> *_Nullable)allFilesInDirectoryRecursive:(NSString *)dirPath error:(NSError **)error; + (NSArray<NSString *> *_Nullable)allFilesInDirectoryRecursive:(NSString *)dirPath error:(NSError **)error;
+ (NSString *)temporaryFilePath;
+ (NSString *)temporaryFilePathWithFileExtension:(NSString *_Nullable)fileExtension;
// Returns nil on failure. // Returns nil on failure.
+ (nullable NSString *)writeDataToTemporaryFile:(NSData *)data fileExtension:(NSString *_Nullable)fileExtension; + (nullable NSString *)writeDataToTemporaryFile:(NSData *)data fileExtension:(NSString *_Nullable)fileExtension;

@ -166,16 +166,28 @@ NS_ASSUME_NONNULL_BEGIN
return filePaths; return filePaths;
} }
+ (nullable NSString *)writeDataToTemporaryFile:(NSData *)data fileExtension:(NSString *_Nullable)fileExtension + (NSString *)temporaryFilePath
{ {
OWSAssert(data); return [self temporaryFilePathWithFileExtension:nil];
}
+ (NSString *)temporaryFilePathWithFileExtension:(NSString *_Nullable)fileExtension
{
NSString *temporaryDirectory = NSTemporaryDirectory(); NSString *temporaryDirectory = NSTemporaryDirectory();
NSString *tempFileName = NSUUID.UUID.UUIDString; NSString *tempFileName = NSUUID.UUID.UUIDString;
if (fileExtension.length > 0) { if (fileExtension.length > 0) {
tempFileName = [[tempFileName stringByAppendingString:@"."] stringByAppendingString:fileExtension]; tempFileName = [[tempFileName stringByAppendingString:@"."] stringByAppendingString:fileExtension];
} }
NSString *tempFilePath = [temporaryDirectory stringByAppendingPathComponent:tempFileName]; NSString *tempFilePath = [temporaryDirectory stringByAppendingPathComponent:tempFileName];
return tempFilePath;
}
+ (nullable NSString *)writeDataToTemporaryFile:(NSData *)data fileExtension:(NSString *_Nullable)fileExtension
{
OWSAssert(data);
NSString *tempFilePath = [self temporaryFilePathWithFileExtension:fileExtension];
NSError *error; NSError *error;
BOOL success = [data writeToFile:tempFilePath options:NSDataWritingAtomic error:&error]; BOOL success = [data writeToFile:tempFilePath options:NSDataWritingAtomic error:&error];
if (!success || error) { if (!success || error) {

@ -608,6 +608,19 @@ public class ShareViewController: UINavigationController, ShareViewDelegate, SAE
} else { } else {
fulfill((itemUrl: url, utiType: srcUtiType)) fulfill((itemUrl: url, utiType: srcUtiType))
} }
} else if let image = value as? UIImage {
if let data = UIImagePNGRepresentation(image) {
let tempFilePath = OWSFileSystem.temporaryFilePath(withFileExtension:"png")
do {
let url = NSURL.fileURL(withPath:tempFilePath)
try data.write(to: url, options: .atomicWrite)
fulfill((url, srcUtiType))
} catch {
reject(ShareViewControllerError.assertionError(description: "couldn't write UIImage: \(String(describing: error))"))
}
} else {
reject(ShareViewControllerError.assertionError(description: "couldn't convert UIImage to PNG: \(String(describing: error))"))
}
} else { } else {
// It's unavoidable that we may sometimes receives data types that we // It's unavoidable that we may sometimes receives data types that we
// don't know how to handle. // don't know how to handle.

Loading…
Cancel
Save