[ 
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: issues-unsubscr...@cordova.apache.org
For additional commands, e-mail: issues-h...@cordova.apache.org

Reply via email to