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;
+ (NSString *)temporaryFilePath;
+ (NSString *)temporaryFilePathWithFileExtension:(NSString *_Nullable)fileExtension;
// Returns nil on failure.
+ (nullable NSString *)writeDataToTemporaryFile:(NSData *)data fileExtension:(NSString *_Nullable)fileExtension;

@ -166,16 +166,28 @@ NS_ASSUME_NONNULL_BEGIN
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 *tempFileName = NSUUID.UUID.UUIDString;
if (fileExtension.length > 0) {
tempFileName = [[tempFileName stringByAppendingString:@"."] stringByAppendingString:fileExtension];
}
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;
BOOL success = [data writeToFile:tempFilePath options:NSDataWritingAtomic error:&error];
if (!success || error) {

@ -608,6 +608,19 @@ public class ShareViewController: UINavigationController, ShareViewDelegate, SAE
} else {
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 {
// It's unavoidable that we may sometimes receives data types that we
// don't know how to handle.

Loading…
Cancel
Save