[
https://issues.apache.org/jira/browse/CB-8706?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14386468#comment-14386468
]
ASF GitHub Bot commented on CB-8706:
------------------------------------
Github user vladimir-kotikov commented on a diff in the pull request:
https://github.com/apache/cordova-plugin-camera/pull/78#discussion_r27377326
--- Diff: src/windows/CameraProxy.js ---
@@ -43,399 +43,468 @@ module.exports = {
// 11 cameraDirection:0
takePicture: function (successCallback, errorCallback, args) {
- var encodingType = args[5];
- var targetWidth = args[3];
- var targetHeight = args[4];
var sourceType = args[2];
- var destinationType = args[1];
- var mediaType = args[6];
- var allowCrop = !!args[7];
- var saveToPhotoAlbum = args[9];
- var cameraDirection = args[11];
-
- // resize method :)
- var resizeImage = function (file) {
- var tempPhotoFileName = "";
- if (encodingType == Camera.EncodingType.PNG) {
- tempPhotoFileName = "camera_cordova_temp_return.png";
- } else {
- tempPhotoFileName = "camera_cordova_temp_return.jpg";
- }
-
- var storageFolder =
Windows.Storage.ApplicationData.current.localFolder;
- file.copyAsync(storageFolder, file.name,
Windows.Storage.NameCollisionOption.replaceExisting).then(function
(storageFile) {
-
Windows.Storage.FileIO.readBufferAsync(storageFile).then(function(buffer) {
- var strBase64 =
Windows.Security.Cryptography.CryptographicBuffer.encodeToBase64String(buffer);
- var imageData = "data:" + file.contentType +
";base64," + strBase64;
- var image = new Image();
- image.src = imageData;
- image.onload = function() {
- var imageWidth = targetWidth,
- imageHeight = targetHeight;
- var canvas = document.createElement('canvas');
-
- canvas.width = imageWidth;
- canvas.height = imageHeight;
- canvas.getContext("2d").drawImage(this, 0, 0,
imageWidth, imageHeight);
-
- var fileContent =
canvas.toDataURL(file.contentType).split(',')[1];
-
- var storageFolder =
Windows.Storage.ApplicationData.current.localFolder;
+ if (sourceType != Camera.PictureSourceType.CAMERA) {
+ takePictureFromFile(successCallback, errorCallback, args);
+ } else {
+ takePictureFromCamera(successCallback, errorCallback, args);
+ }
+ }
+};
- storageFolder.createFileAsync(tempPhotoFileName,
Windows.Storage.CreationCollisionOption.generateUniqueName).done(function
(storagefile) {
- var content =
Windows.Security.Cryptography.CryptographicBuffer.decodeFromBase64String(fileContent);
-
Windows.Storage.FileIO.writeBufferAsync(storagefile, content).then(function () {
- successCallback("ms-appdata:///local/" +
storagefile.name);
- }, function () {
- errorCallback("Resize picture error.");
- });
- });
- };
- });
- }, function () {
- errorCallback("Can't access localStorage folder");
- });
- };
+// Resize method
+function resizeImage(successCallback, errorCallback, file, targetWidth,
targetHeight, encodingType) {
+ var tempPhotoFileName = "";
+ if (encodingType == Camera.EncodingType.PNG) {
+ tempPhotoFileName = "camera_cordova_temp_return.png";
+ } else {
+ tempPhotoFileName = "camera_cordova_temp_return.jpg";
+ }
- // because of asynchronous method, so let the successCallback be
called in it.
- var resizeImageBase64 = function (file) {
+ var storageFolder =
Windows.Storage.ApplicationData.current.localFolder;
+ file.copyAsync(storageFolder, file.name,
Windows.Storage.NameCollisionOption.replaceExisting)
+ .then(function (storageFile) { return
Windows.Storage.FileIO.readBufferAsync(storageFile); })
+ .then(function(buffer) {
+ var strBase64 =
Windows.Security.Cryptography.CryptographicBuffer.encodeToBase64String(buffer);
+ var imageData = "data:" + file.contentType + ";base64," +
strBase64;
+ var image = new Image();
+ image.src = imageData;
+ image.onload = function() {
+ var imageWidth = targetWidth,
+ imageHeight = targetHeight;
+ var canvas = document.createElement('canvas');
+ var storageFileName;
+
+ canvas.width = imageWidth;
+ canvas.height = imageHeight;
+
+ canvas.getContext("2d").drawImage(this, 0, 0, imageWidth,
imageHeight);
+
+ var fileContent =
canvas.toDataURL(file.contentType).split(',')[1];
+
+ var storageFolder =
Windows.Storage.ApplicationData.current.localFolder;
+
+ storageFolder.createFileAsync(tempPhotoFileName,
Windows.Storage.CreationCollisionOption.generateUniqueName)
+ .then(function (storagefile) {
+ var content =
Windows.Security.Cryptography.CryptographicBuffer.decodeFromBase64String(fileContent);
+ storageFileName = storagefile.name;
+ return
Windows.Storage.FileIO.writeBufferAsync(storagefile, content);
+ })
+ .done(function () {
+ successCallback("ms-appdata:///local/" +
storageFileName);
+ }, errorCallback);
+ };
+ })
+ .done(null, function(err) {
+ errorCallback(err);
+ }
+ );
+}
- Windows.Storage.FileIO.readBufferAsync(file).done(
function(buffer) {
- var strBase64 =
Windows.Security.Cryptography.CryptographicBuffer.encodeToBase64String(buffer);
- var imageData = "data:" + file.contentType + ";base64," +
strBase64;
+// Because of asynchronous method, so let the successCallback be called in
it.
+function resizeImageBase64(successCallback, errorCallback, file,
targetWidth, targetHeight) {
+ Windows.Storage.FileIO.readBufferAsync(file).done( function(buffer) {
+ var strBase64 =
Windows.Security.Cryptography.CryptographicBuffer.encodeToBase64String(buffer);
+ var imageData = "data:" + file.contentType + ";base64," +
strBase64;
- var image = new Image();
- image.src = imageData;
+ var image = new Image();
+ image.src = imageData;
- image.onload = function() {
- var imageWidth = targetWidth,
- imageHeight = targetHeight;
- var canvas = document.createElement('canvas');
+ image.onload = function() {
+ var imageWidth = targetWidth,
+ imageHeight = targetHeight;
+ var canvas = document.createElement('canvas');
- canvas.width = imageWidth;
- canvas.height = imageHeight;
+ canvas.width = imageWidth;
+ canvas.height = imageHeight;
- var ctx = canvas.getContext("2d");
- ctx.drawImage(this, 0, 0, imageWidth, imageHeight);
+ var ctx = canvas.getContext("2d");
+ ctx.drawImage(this, 0, 0, imageWidth, imageHeight);
- // The resized file ready for upload
- var finalFile = canvas.toDataURL(file.contentType);
+ // The resized file ready for upload
+ var finalFile = canvas.toDataURL(file.contentType);
- // Remove the prefix such as "data:" + contentType +
";base64," , in order to meet the Cordova API.
- var arr = finalFile.split(",");
- var newStr = finalFile.substr(arr[0].length + 1);
- successCallback(newStr);
- };
- });
+ // Remove the prefix such as "data:" + contentType +
";base64," , in order to meet the Cordova API.
+ var arr = finalFile.split(",");
+ var newStr = finalFile.substr(arr[0].length + 1);
+ successCallback(newStr);
};
+ }, function(err) { errorCallback(err); });
+}
+
+function takePictureFromFile(successCallback, errorCallback, mediaType,
destinationType, targetWidth, targetHeight, encodingType) {
+ // TODO: Add WP8.1 support
+ // WP8.1 doesn't allow to use of pickSingleFileAsync method
+ // see
http://msdn.microsoft.com/en-us/library/windows/apps/br207852.aspx for details
+ // replacement of pickSingleFileAsync - pickSingleFileAndContinue
method
+ // will take application to suspended state and this require
additional logic to wake application up
+ if (navigator.appVersion.indexOf('Windows Phone 8.1') >= 0 ) {
+ errorCallback('Not supported');
+ return;
+ }
- if (sourceType != Camera.PictureSourceType.CAMERA) {
+ var fileOpenPicker = new Windows.Storage.Pickers.FileOpenPicker();
+ fileOpenPicker.suggestedStartLocation =
Windows.Storage.Pickers.PickerLocationId.picturesLibrary;
+ if (mediaType == Camera.MediaType.PICTURE) {
+ fileOpenPicker.fileTypeFilter.replaceAll([".png", ".jpg",
".jpeg"]);
+ }
+ else if (mediaType == Camera.MediaType.VIDEO) {
+ fileOpenPicker.fileTypeFilter.replaceAll([".avi", ".flv", ".asx",
".asf", ".mov", ".mp4", ".mpg", ".rm", ".srt", ".swf", ".wmv", ".vob"]);
+ }
+ else {
+ fileOpenPicker.fileTypeFilter.replaceAll(["*"]);
+ }
- // TODO: Add WP8.1 support
- // WP8.1 doesn't allow to use of pickSingleFileAsync method
- // see
http://msdn.microsoft.com/en-us/library/windows/apps/br207852.aspx for details
- // replacement of pickSingleFileAsync -
pickSingleFileAndContinue method
- // will take application to suspended state and this require
additional logic to wake application up
- if (navigator.appVersion.indexOf('Windows Phone 8.1') >= 0 ) {
- errorCallback('Not supported');
- return;
- }
+ fileOpenPicker.pickSingleFileAsync().done(function (file) {
+ if (file) {
--- End diff --
Consider invert `if` statement to remove extra nesting.
> Camera should use filepicker if saveToPhotoAlbum is true
> --------------------------------------------------------
>
> Key: CB-8706
> URL: https://issues.apache.org/jira/browse/CB-8706
> Project: Apache Cordova
> Issue Type: Bug
> Components: Plugin Camera
> Reporter: Murat Sutunc
> Assignee: Murat Sutunc
> Priority: Minor
>
> Currently camera plugin is saving pictures programmatically to pictures
> library. It should use filePicker to not require unnecessary capabilities.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]