mirror of
https://github.com/apache/cordova-plugin-camera.git
synced 2025-01-31 12:42:50 +08:00
cleanup, finalize implementations/consolidations
This commit is contained in:
parent
f6e8548381
commit
ae2acd9ab2
262
src/wp/Camera.cs
262
src/wp/Camera.cs
@ -204,27 +204,32 @@ namespace WPCordovaClassLib.Cordova.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
//TODO Check if all the options are acceptable
|
||||
|
||||
if(cameraOptions.DestinationType != Camera.FILE_URI && cameraOptions.DestinationType != Camera.DATA_URL )
|
||||
{
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Incorrect option: destinationType"));
|
||||
return;
|
||||
}
|
||||
|
||||
ChooserBase<PhotoResult> chooserTask = null;
|
||||
if (cameraOptions.PictureSourceType == CAMERA)
|
||||
{
|
||||
CameraCaptureTask cameraTask = new CameraCaptureTask();
|
||||
cameraTask.Completed += onCameraTaskCompleted;
|
||||
cameraTask.Show();
|
||||
chooserTask = new CameraCaptureTask();
|
||||
}
|
||||
else if ((cameraOptions.PictureSourceType == PHOTOLIBRARY) || (cameraOptions.PictureSourceType == SAVEDPHOTOALBUM))
|
||||
{
|
||||
PhotoChooserTask photoChooserTask = new PhotoChooserTask();
|
||||
photoChooserTask.Completed += onPickerTaskCompleted;
|
||||
photoChooserTask.Show();
|
||||
chooserTask = new PhotoChooserTask();
|
||||
}
|
||||
// if chooserTask is still null, then PictureSourceType was invalid
|
||||
if (chooserTask != null)
|
||||
{
|
||||
chooserTask.Completed += onTaskCompleted;
|
||||
chooserTask.Show();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.WriteLine("Unrecognized PictureSourceType :: " + cameraOptions.PictureSourceType.ToString());
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.NO_RESULT));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void onTaskCompleted(object sender, PhotoResult e)
|
||||
@ -232,96 +237,7 @@ namespace WPCordovaClassLib.Cordova.Commands
|
||||
var task = sender as ChooserBase<PhotoResult>;
|
||||
if (task != null)
|
||||
{
|
||||
task.Completed -= onCameraTaskCompleted;
|
||||
}
|
||||
|
||||
if (e.Error != null)
|
||||
{
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
|
||||
return;
|
||||
}
|
||||
|
||||
switch (e.TaskResult)
|
||||
{
|
||||
case TaskResult.OK:
|
||||
try
|
||||
{
|
||||
string imagePathOrContent = string.Empty;
|
||||
if (cameraOptions.DestinationType == FILE_URI)
|
||||
{
|
||||
// Save image in media library
|
||||
if (cameraOptions.SaveToPhotoAlbum)
|
||||
{
|
||||
MediaLibrary library = new MediaLibrary();
|
||||
Picture pict = library.SavePicture(e.OriginalFileName, e.ChosenPhoto); // to save to photo-roll ...
|
||||
}
|
||||
|
||||
/*
|
||||
int orient = ImageExifHelper.getImageOrientationFromStream(e.ChosenPhoto);
|
||||
int newAngle = 0;
|
||||
switch (orient)
|
||||
{
|
||||
case ImageExifOrientation.LandscapeLeft:
|
||||
newAngle = 90;
|
||||
break;
|
||||
case ImageExifOrientation.PortraitUpsideDown:
|
||||
newAngle = 180;
|
||||
break;
|
||||
case ImageExifOrientation.LandscapeRight:
|
||||
newAngle = 270;
|
||||
break;
|
||||
case ImageExifOrientation.Portrait:
|
||||
default: break; // 0 default already set
|
||||
}
|
||||
|
||||
Stream rotImageStream = ImageExifHelper.RotateStream(e.ChosenPhoto, newAngle);
|
||||
|
||||
// we should reset stream position after saving stream to media library
|
||||
rotImageStream.Seek(0, SeekOrigin.Begin);
|
||||
imagePathOrContent = SaveImageToLocalStorage(rotImageStream, Path.GetFileName(e.OriginalFileName));
|
||||
|
||||
*/
|
||||
|
||||
|
||||
imagePathOrContent = SaveImageToLocalStorage(e.ChosenPhoto, Path.GetFileName(e.OriginalFileName));
|
||||
}
|
||||
else if (cameraOptions.DestinationType == DATA_URL)
|
||||
{
|
||||
imagePathOrContent = GetImageContent(e.ChosenPhoto);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: shouldn't this happen before we launch the camera-picker?
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Incorrect option: destinationType"));
|
||||
return;
|
||||
}
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.OK, imagePathOrContent));
|
||||
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error retrieving image."));
|
||||
}
|
||||
break;
|
||||
|
||||
case TaskResult.Cancel:
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Selection cancelled."));
|
||||
break;
|
||||
|
||||
default:
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Selection did not complete!"));
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void onCameraTaskCompleted(object sender, PhotoResult e)
|
||||
{
|
||||
var task = sender as ChooserBase<PhotoResult>;
|
||||
if (task != null)
|
||||
{
|
||||
task.Completed -= onCameraTaskCompleted;
|
||||
task.Completed -= onTaskCompleted;
|
||||
}
|
||||
|
||||
if (e.Error != null)
|
||||
@ -337,127 +253,75 @@ namespace WPCordovaClassLib.Cordova.Commands
|
||||
{
|
||||
string imagePathOrContent = string.Empty;
|
||||
|
||||
if (cameraOptions.DestinationType == FILE_URI)
|
||||
// Save image back to media library
|
||||
// only save to photoalbum if it didn't come from there ...
|
||||
if (cameraOptions.PictureSourceType == CAMERA && cameraOptions.SaveToPhotoAlbum)
|
||||
{
|
||||
// Save image in media library
|
||||
if (cameraOptions.SaveToPhotoAlbum)
|
||||
{
|
||||
MediaLibrary library = new MediaLibrary();
|
||||
Picture pict = library.SavePicture(e.OriginalFileName, e.ChosenPhoto); // to save to photo-roll ...
|
||||
}
|
||||
|
||||
int orient = ImageExifHelper.getImageOrientationFromStream(e.ChosenPhoto);
|
||||
int newAngle = 0;
|
||||
switch (orient)
|
||||
{
|
||||
case ImageExifOrientation.LandscapeLeft:
|
||||
newAngle = 90;
|
||||
break;
|
||||
case ImageExifOrientation.PortraitUpsideDown:
|
||||
newAngle = 180;
|
||||
break;
|
||||
case ImageExifOrientation.LandscapeRight:
|
||||
newAngle = 270;
|
||||
break;
|
||||
case ImageExifOrientation.Portrait:
|
||||
default: break; // 0 default already set
|
||||
}
|
||||
|
||||
Stream rotImageStream = ImageExifHelper.RotateStream(e.ChosenPhoto, newAngle);
|
||||
|
||||
// we should return stream position back after saving stream to media library
|
||||
rotImageStream.Seek(0, SeekOrigin.Begin);
|
||||
imagePathOrContent = SaveImageToLocalStorage(rotImageStream, Path.GetFileName(e.OriginalFileName));
|
||||
|
||||
|
||||
MediaLibrary library = new MediaLibrary();
|
||||
Picture pict = library.SavePicture(e.OriginalFileName, e.ChosenPhoto); // to save to photo-roll ...
|
||||
}
|
||||
else if (cameraOptions.DestinationType == DATA_URL)
|
||||
|
||||
int orient = ImageExifHelper.getImageOrientationFromStream(e.ChosenPhoto);
|
||||
int newAngle = 270;
|
||||
switch (orient)
|
||||
{
|
||||
imagePathOrContent = GetImageContent(e.ChosenPhoto);
|
||||
case ImageExifOrientation.LandscapeLeft:
|
||||
newAngle = 90;
|
||||
break;
|
||||
case ImageExifOrientation.PortraitUpsideDown:
|
||||
newAngle = 180;
|
||||
break;
|
||||
case ImageExifOrientation.LandscapeRight:
|
||||
newAngle = 270;
|
||||
break;
|
||||
case ImageExifOrientation.Portrait:
|
||||
default: break; // 0 default already set
|
||||
}
|
||||
else
|
||||
|
||||
if (newAngle != 0)
|
||||
{
|
||||
// TODO: shouldn't this happen before we launch the camera-picker?
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Incorrect option: destinationType"));
|
||||
return;
|
||||
using (Stream rotImageStream = ImageExifHelper.RotateStream(e.ChosenPhoto, newAngle))
|
||||
{
|
||||
// we should reset stream position after saving stream to media library
|
||||
rotImageStream.Seek(0, SeekOrigin.Begin);
|
||||
if (cameraOptions.DestinationType == DATA_URL)
|
||||
{
|
||||
imagePathOrContent = GetImageContent(rotImageStream);
|
||||
}
|
||||
else // FILE_URL
|
||||
{
|
||||
imagePathOrContent = SaveImageToLocalStorage(rotImageStream, Path.GetFileName(e.OriginalFileName));
|
||||
}
|
||||
}
|
||||
}
|
||||
else // no need to reorient
|
||||
{
|
||||
if (cameraOptions.DestinationType == DATA_URL)
|
||||
{
|
||||
imagePathOrContent = GetImageContent(e.ChosenPhoto);
|
||||
}
|
||||
else // FILE_URL
|
||||
{
|
||||
imagePathOrContent = SaveImageToLocalStorage(e.ChosenPhoto, Path.GetFileName(e.OriginalFileName));
|
||||
}
|
||||
}
|
||||
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.OK, imagePathOrContent));
|
||||
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error retrieving image."));
|
||||
}
|
||||
break;
|
||||
|
||||
case TaskResult.Cancel:
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Selection cancelled."));
|
||||
break;
|
||||
|
||||
default:
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Selection did not complete!"));
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void onPickerTaskCompleted(object sender, PhotoResult e)
|
||||
{
|
||||
var task = sender as ChooserBase<PhotoResult>;
|
||||
if (task != null)
|
||||
{
|
||||
task.Completed -= onCameraTaskCompleted;
|
||||
}
|
||||
|
||||
if (e.Error != null)
|
||||
{
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
|
||||
return;
|
||||
}
|
||||
|
||||
switch (e.TaskResult)
|
||||
{
|
||||
case TaskResult.OK:
|
||||
try
|
||||
{
|
||||
string imagePathOrContent = string.Empty;
|
||||
|
||||
if (cameraOptions.DestinationType == FILE_URI)
|
||||
{
|
||||
imagePathOrContent = SaveImageToLocalStorage(e.ChosenPhoto, Path.GetFileName(e.OriginalFileName));
|
||||
}
|
||||
else if (cameraOptions.DestinationType == DATA_URL)
|
||||
{
|
||||
imagePathOrContent = GetImageContent(e.ChosenPhoto);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: shouldn't this happen before we launch the camera-picker?
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Incorrect option: destinationType"));
|
||||
return;
|
||||
}
|
||||
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.OK, imagePathOrContent));
|
||||
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error retrieving image."));
|
||||
}
|
||||
break;
|
||||
|
||||
case TaskResult.Cancel:
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Selection cancelled."));
|
||||
break;
|
||||
|
||||
default:
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Selection did not complete!"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Returns image content in a form of base64 string
|
||||
/// </summary>
|
||||
|
Loading…
Reference in New Issue
Block a user