You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by sg...@apache.org on 2014/10/08 18:44:14 UTC

[4/6] git commit: Optimize FileProxy for windows platforms

Optimize FileProxy for windows platforms


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/commit/3e383069
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/tree/3e383069
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/diff/3e383069

Branch: refs/heads/master
Commit: 3e383069afae0c230986467d80de2043895f06bf
Parents: 3d8a5c1
Author: SomaticIT <co...@somatic.fr>
Authored: Tue Oct 7 18:16:03 2014 +0200
Committer: SomaticIT <co...@somatic.fr>
Committed: Tue Oct 7 18:16:03 2014 +0200

----------------------------------------------------------------------
 src/windows/FileProxy.js  | 95 +++++++++++++++++++++++++-----------------
 src/windows8/FileProxy.js | 95 +++++++++++++++++++++++++-----------------
 2 files changed, 114 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/3e383069/src/windows/FileProxy.js
----------------------------------------------------------------------
diff --git a/src/windows/FileProxy.js b/src/windows/FileProxy.js
index 474f044..d466e87 100644
--- a/src/windows/FileProxy.js
+++ b/src/windows/FileProxy.js
@@ -61,6 +61,46 @@ function getFilesystemFromPath(path) {
 var getFolderFromPathAsync = Windows.Storage.StorageFolder.getFolderFromPathAsync;
 var getFileFromPathAsync = Windows.Storage.StorageFile.getFileFromPathAsync;
 
+var writeBytesAsync = Windows.Storage.FileIO.writeBytesAsync;
+var writeTextAsync = Windows.Storage.FileIO.writeTextAsync;
+var writeBlobAsync = function writeBlobAsync(storageFile, data) {
+    return new WinJS.Promise(function (resolve, reject) {
+        storageFile.openAsync(Windows.Storage.FileAccessMode.readWrite).then(
+            function (output) {
+                var input;
+                if (data.detachStream) {
+                    input = data.detachStream();
+                }
+                else {
+                    input = data.msDetachStream();
+                }
+
+                // Copy the stream from the blob to the File stream 
+                Windows.Storage.Streams.RandomAccessStream.copyAsync(input, output).then(
+                    function () {
+                        output.flushAsync().done(
+                            function () {
+                                input.close();
+                                output.close();
+
+                                resolve(data.length);
+                            },
+                            function () {
+                                reject(FileError.INVALID_MODIFICATION_ERR);
+                            }
+                        );
+                    },
+                    function () {
+                        reject(FileError.INVALID_MODIFICATION_ERR);
+                    }
+                );
+            },
+            function () {
+                reject(FileError.INVALID_MODIFICATION_ERR);
+            }
+        );
+    });
+};
 
 module.exports = {
 
@@ -516,7 +556,8 @@ module.exports = {
             isBinary = args[3];
 
         if (data instanceof ArrayBuffer) {
-            data = Array.apply(null, new Uint8Array(data));
+            var dataView = new DataView(data);
+            data = new Blob([dataView]);
         }
 
         fileName = fileName.split("/").join("\\");
@@ -529,47 +570,25 @@ module.exports = {
             function(storageFolder) {
                 storageFolder.createFileAsync(file, Windows.Storage.CreationCollisionOption.openIfExists).done(
                     function(storageFile) {
+                        var writePromise;
                         if (data instanceof Blob || data instanceof File) {
-                            storageFile.openAsync(Windows.Storage.FileAccessMode.readWrite).done(
-                                function (output) {
-                                    var input = data.msDetachStream();
-
-                                    // Copy the stream from the blob to the File stream 
-                                    Windows.Storage.Streams.RandomAccessStream.copyAsync(input, output).then(
-                                        function () {
-                                            output.flushAsync().done(
-                                                function () {
-                                                    input.close();
-                                                    output.close();
-
-                                                    win(data.length);
-                                                },
-                                                function () {
-                                                    fail(FileError.INVALID_MODIFICATION_ERR);
-                                                }
-                                            );
-                                        },
-                                        function () {
-                                            fail(FileError.INVALID_MODIFICATION_ERR);
-                                        }
-                                    );
-                                },
-                                function () {
-                                    fail(FileError.INVALID_MODIFICATION_ERR);
-                                }
-                            );
+                            writePromise = writeBlobAsync;
+                        }
+                        else if (isBinary) {
+                            writePromise = writeBytesAsync;
                         }
                         else {
-                            var writePromise = isBinary ? Windows.Storage.FileIO.writeBytesAsync : Windows.Storage.FileIO.writeTextAsync;
-                            writePromise(storageFile, data).done(
-                                function () {
-                                    win(data.length);
-                                },
-                                function () {
-                                    fail(FileError.INVALID_MODIFICATION_ERR);
-                                }
-                            );
+                            writePromise = writeTextAsync;
                         }
+
+                        writePromise(storageFile, data).done(
+                            function () {
+                                win(data.length);
+                            },
+                            function () {
+                                fail(FileError.INVALID_MODIFICATION_ERR);
+                            }
+                        );
                     },
                     function () {
                         fail(FileError.INVALID_MODIFICATION_ERR);

http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/3e383069/src/windows8/FileProxy.js
----------------------------------------------------------------------
diff --git a/src/windows8/FileProxy.js b/src/windows8/FileProxy.js
index 08ba1e5..b58eb1d 100644
--- a/src/windows8/FileProxy.js
+++ b/src/windows8/FileProxy.js
@@ -61,6 +61,46 @@ function getFilesystemFromPath(path) {
 var getFolderFromPathAsync = Windows.Storage.StorageFolder.getFolderFromPathAsync;
 var getFileFromPathAsync = Windows.Storage.StorageFile.getFileFromPathAsync;
 
+var writeBytesAsync = Windows.Storage.FileIO.writeBytesAsync;
+var writeTextAsync = Windows.Storage.FileIO.writeTextAsync;
+var writeBlobAsync = function writeBlobAsync(storageFile, data) {
+    return new WinJS.Promise(function (resolve, reject) {
+        storageFile.openAsync(Windows.Storage.FileAccessMode.readWrite).then(
+            function (output) {
+                var input;
+                if (data.detachStream) {
+                    input = data.detachStream();
+                }
+                else {
+                    input = data.msDetachStream();
+                }
+
+                // Copy the stream from the blob to the File stream 
+                Windows.Storage.Streams.RandomAccessStream.copyAsync(input, output).then(
+                    function () {
+                        output.flushAsync().done(
+                            function () {
+                                input.close();
+                                output.close();
+
+                                resolve(data.length);
+                            },
+                            function () {
+                                reject(FileError.INVALID_MODIFICATION_ERR);
+                            }
+                        );
+                    },
+                    function () {
+                        reject(FileError.INVALID_MODIFICATION_ERR);
+                    }
+                );
+            },
+            function () {
+                reject(FileError.INVALID_MODIFICATION_ERR);
+            }
+        );
+    });
+};
 
 module.exports = {
 
@@ -516,7 +556,8 @@ module.exports = {
             isBinary = args[3];
 
         if (data instanceof ArrayBuffer) {
-            data = Array.apply(null, new Uint8Array(data));
+            var dataView = new DataView(data);
+            data = new Blob([dataView]);
         }
 
         fileName = fileName.split("/").join("\\");
@@ -529,47 +570,25 @@ module.exports = {
             function(storageFolder) {
                 storageFolder.createFileAsync(file, Windows.Storage.CreationCollisionOption.openIfExists).done(
                     function(storageFile) {
+                        var writePromise;
                         if (data instanceof Blob || data instanceof File) {
-                            storageFile.openAsync(Windows.Storage.FileAccessMode.readWrite).done(
-                                function (output) {
-                                    var input = data.msDetachStream();
-
-                                    // Copy the stream from the blob to the File stream 
-                                    Windows.Storage.Streams.RandomAccessStream.copyAsync(input, output).then(
-                                        function () {
-                                            output.flushAsync().done(
-                                                function () {
-                                                    input.close();
-                                                    output.close();
-
-                                                    win(data.length);
-                                                },
-                                                function () {
-                                                    fail(FileError.INVALID_MODIFICATION_ERR);
-                                                }
-                                            );
-                                        },
-                                        function () {
-                                            fail(FileError.INVALID_MODIFICATION_ERR);
-                                        }
-                                    );
-                                },
-                                function () {
-                                    fail(FileError.INVALID_MODIFICATION_ERR);
-                                }
-                            );
+                            writePromise = writeBlobAsync;
+                        }
+                        else if (isBinary) {
+                            writePromise = writeBytesAsync;
                         }
                         else {
-                            var writePromise = isBinary ? Windows.Storage.FileIO.writeBytesAsync : Windows.Storage.FileIO.writeTextAsync;
-                            writePromise(storageFile, data).done(
-                                function () {
-                                    win(data.length);
-                                },
-                                function () {
-                                    fail(FileError.INVALID_MODIFICATION_ERR);
-                                }
-                            );
+                            writePromise = writeTextAsync;
                         }
+
+                        writePromise(storageFile, data).done(
+                            function () {
+                                win(data.length);
+                            },
+                            function () {
+                                fail(FileError.INVALID_MODIFICATION_ERR);
+                            }
+                        );
                     },
                     function () {
                         fail(FileError.INVALID_MODIFICATION_ERR);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org