You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by pu...@apache.org on 2012/08/17 20:37:56 UTC

[7/10] js commit: Added MediaFileProxy.js

Added MediaFileProxy.js


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/commit/3fa5d138
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/tree/3fa5d138
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/diff/3fa5d138

Branch: refs/heads/master
Commit: 3fa5d1389ba31a2cb04f2126f27ee047391b1117
Parents: a6e4d9e
Author: mingfeng <mi...@gmail.com>
Authored: Wed Aug 15 15:10:48 2012 +0800
Committer: mingfeng <mi...@gmail.com>
Committed: Wed Aug 15 15:10:48 2012 +0800

----------------------------------------------------------------------
 lib/win8metro/exec.js                            |    1 +
 lib/win8metro/plugin/win8metro/MediaFileProxy.js |   82 +++++++++++++++++
 2 files changed, 83 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/3fa5d138/lib/win8metro/exec.js
----------------------------------------------------------------------
diff --git a/lib/win8metro/exec.js b/lib/win8metro/exec.js
index 54604c5..9545aa4 100644
--- a/lib/win8metro/exec.js
+++ b/lib/win8metro/exec.js
@@ -33,6 +33,7 @@ var CommandProxy  = {
     "Device":require('cordova/plugin/win8metro/DeviceProxy'),
     "File":require('cordova/plugin/win8metro/FileProxy'),
     "Media":require('cordova/plugin/win8metro/MediaProxy'),
+	"MediaFile":require('cordova/plugin/win8metro/MediaFileProxy'),
     "NetworkStatus":require('cordova/plugin/win8metro/NetworkStatusProxy')
 };
 

http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/3fa5d138/lib/win8metro/plugin/win8metro/MediaFileProxy.js
----------------------------------------------------------------------
diff --git a/lib/win8metro/plugin/win8metro/MediaFileProxy.js b/lib/win8metro/plugin/win8metro/MediaFileProxy.js
new file mode 100755
index 0000000..45c486b
--- /dev/null
+++ b/lib/win8metro/plugin/win8metro/MediaFileProxy.js
@@ -0,0 +1,82 @@
+var utils = require('cordova/utils'),
+    File = require('cordova/plugin/File'),
+    CaptureError = require('cordova/plugin/CaptureError');
+/**
+ * Represents a single file.
+ *
+ * name {DOMString} name of the file, without path information
+ * fullPath {DOMString} the full path of the file, including the name
+ * type {DOMString} mime type
+ * lastModifiedDate {Date} last modified date
+ * size {Number} size of the file in bytes
+ */
+var MediaFile = function (name, fullPath, type, lastModifiedDate, size) {
+    MediaFile.__super__.constructor.apply(this, arguments);
+};
+
+utils.extend(MediaFile, File);
+
+/**
+ * Request capture format data for a specific file and type
+ *
+ * @param {Function} successCB
+ * @param {Function} errorCB
+ */
+MediaFile.prototype.getFormatData = function (successCallback, errorCallback) {
+    var contentType = this.type;
+    if (typeof this.fullPath === "undefined" || this.fullPath === null) {
+        errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT));
+    } else {
+        Windows.Storage.StorageFile.getFileFromPathAsync(this.fullPath).then(function (storageFile) {
+            var mediaTypeFlag = String(contentType).split("/")[0].toLowerCase();
+            if (mediaTypeFlag === "audio") {
+                storageFile.properties.getMusicPropertiesAsync().then(function (audioProperties) {
+                    successCallback(new MediaFileData(null, audioProperties.bitrate, 0, 0, audioProperties.duration / 1000));
+                }, function () {
+                    errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT));
+                })
+            }
+            else if (mediaTypeFlag === "video") {
+                storageFile.properties.getVideoPropertiesAsync().then(function (videoProperties) {
+                    successCallback(new MediaFileData(null, videoProperties.bitrate, videoProperties.height, videoProperties.width, videoProperties.duration / 1000));
+                }, function () {
+                    errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT));
+                })
+            }
+            else if (mediaTypeFlag === "image") {
+                storageFile.properties.getImagePropertiesAsync().then(function (imageProperties) {
+                    successCallback(new MediaFileData(null, 0, imageProperties.height, imageProperties.width, 0));
+                }, function () {
+                    errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT));
+                })
+            }
+            else { errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)) }
+        }, function () {
+            errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT));
+        })
+    }
+};
+
+// TODO: can we axe this?
+/**
+ * Casts a PluginResult message property  (array of objects) to an array of MediaFile objects
+ * (used in Objective-C and Android)
+ *
+ * @param {PluginResult} pluginResult
+ */
+MediaFile.cast = function (pluginResult) {
+    var mediaFiles = [];
+    for (var i = 0; i < pluginResult.message.length; i++) {
+        var mediaFile = new MediaFile();
+        mediaFile.name = pluginResult.message[i].name;
+        mediaFile.fullPath = pluginResult.message[i].fullPath;
+        mediaFile.type = pluginResult.message[i].type;
+        mediaFile.lastModifiedDate = pluginResult.message[i].lastModifiedDate;
+        mediaFile.size = pluginResult.message[i].size;
+        mediaFiles.push(mediaFile);
+    }
+    pluginResult.message = mediaFiles;
+    return pluginResult;
+};
+
+module.exports = MediaFile;
\ No newline at end of file