void HandleImagePickerControllerFinishedPickingMedia (object sender, UIImagePickerMediaPickedEventArgs e)
{
UIApplication.SharedApplication.InvokeOnMainThread (delegate {
if(popover != null && popover.PopoverVisible) {
popover.Dismiss(true);
popover.Dispose();
} else {
IPhoneServiceLocator.CurrentDelegate.MainUIViewController ().DismissModalViewController(true);
}
});
SystemLogger.Log(SystemLogger.Module.PLATFORM, "FinishedPickingMedia " + e.Info);
MediaMetadata mediaData = new MediaMetadata();
mediaData.Type = MediaType.NotSupported;
try {
NSString mediaType = (NSString) e.Info.ValueForKey(UIImagePickerController.MediaType);
UIImage image = (UIImage) e.Info.ValueForKey(UIImagePickerController.OriginalImage);
object url = e.Info.ValueForKey(UIImagePickerController.ReferenceUrl);
NSUrl nsReferenceUrl = new NSUrl(url.ToString());
if(image != null && mediaType !=null && mediaType == "public.image") { // "public.image" is the default UTI (uniform type) for images.
mediaData.Type = MediaType.Photo;
string fileExtension = Path.GetExtension(nsReferenceUrl.Path.ToLower());
mediaData.MimeType = MediaMetadata.GetMimeTypeFromExtension(fileExtension);
mediaData.Title = this.GetImageMediaTitle(nsReferenceUrl.AbsoluteString);
NSData imageData = null;
if(mediaData.MimeType == "image/png" || mediaData.MimeType == "image/gif" || mediaData.MimeType == "image/tiff") {
imageData = image.AsPNG();
} else if (mediaData.MimeType == "image/jpeg" || mediaData.MimeType == "image/jpg") {
imageData = image.AsJPEG();
}
if(imageData !=null) {
mediaData.Size = (long)imageData.Length;
SystemLogger.Log(SystemLogger.Module.PLATFORM, "Getting image file size: "+mediaData.Size);
byte[] buffer = new byte[imageData.Length];
Marshal.Copy(imageData.Bytes, buffer,0,buffer.Length);
IFileSystem fileSystemService = (IFileSystem)IPhoneServiceLocator.GetInstance ().GetService ("file");
SystemLogger.Log(SystemLogger.Module.CORE, "Storing media file on application filesystem...");
mediaData.ReferenceUrl = fileSystemService.StoreFile(IPhoneMedia.ASSETS_PATH, mediaData.Title, buffer);
}
SystemLogger.Log(SystemLogger.Module.PLATFORM, mediaData.MimeType + ", "+ mediaData.ReferenceUrl + ", " + mediaData.Title);
}
} catch(Exception ex) {
SystemLogger.Log(SystemLogger.Module.PLATFORM, "Error when extracting information from media file: " + ex.Message, ex);
}
IPhoneUtils.GetInstance().FireUnityJavascriptEvent("Appverse.Media.onFinishedPickingImage", mediaData);
}