You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
4.3 KiB
JavaScript

/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
/* global PluginResult */
//cordova-js/lib/common/plugin/CaptureError.js
var INTERNAL_ERROR_CODE = 0,
APPLICATION_BUSY_ERROR_CODE = 1,
INVALID_ARGUMENT_ERROR_CODE = 2,
NO_MEDIA_FILES_ERROR_CODE = 3;
function capture(action, options, result, webview) {
var limit = options.limit || 1,
fail = function (error) {
result.callbackError({code: INTERNAL_ERROR_CODE});
},
onCaptured = function (path) {
var sb = webview.setFileSystemSandbox;
webview.setFileSystemSandbox = false;
window.webkitRequestFileSystem(window.PERSISTENT, 1024, function (fs) {
fs.root.getFile(path, {}, function (fe) {
fe.file(function (file) {
file.fullPath = fe.fullPath;
webview.setFileSystemSandbox = sb;
result.callbackOk([file]);
}, fail);
}, fail);
}, fail);
},
onAudioCaptured = function (response) {
window.qnx.webplatform.getApplication().invocation.removeEventListener("childCardClosed", onAudioCaptured);
if (response.data && response.data !== "") {
onCaptured(response.data);
} else {
result.callbackError({code: NO_MEDIA_FILES_ERROR_CODE });
}
},
onCancelled = function () {
result.callbackError({code: NO_MEDIA_FILES_ERROR_CODE });
},
onInvoked = function (error) {
if (error) {
result.callbackError({code: APPLICATION_BUSY_ERROR_CODE});
}
};
if (limit < 0) {
result.error({code: INVALID_ARGUMENT_ERROR_CODE});
} else if (action === "audio") {
window.qnx.webplatform.getApplication().invocation.invoke(
{
target: "sys.apps.audiorecorder",
action: "bb.action.CAPTURE"
},
function (error) {
if (error) {
console.log(error);
} else {
window.qnx.webplatform.getApplication().invocation.addEventListener("childCardClosed", onAudioCaptured);
}
});
result.noResult(true);
} else {
window.qnx.webplatform.getApplication().cards.camera.open(action, onCaptured, onCancelled, onInvoked);
result.noResult(true);
}
}
module.exports = {
getSupportedAudioModes: function (success, fail, args, env) {
var result = new PluginResult(args, env);
result.ok([]);
},
getSupportedImageModes: function (win, fail, args, env) {
var result = new PluginResult(args, env);
result.ok([]);
},
getSupportedVideoModes: function (win, fail, args, env) {
var result = new PluginResult(args, env);
result.ok([]);
},
captureImage: function (win, fail, args, env) {
var result = new PluginResult(args, env),
options = args[0] === "undefined" ? {} : JSON.parse(decodeURIComponent(args[0]));
capture("photo", options, result, env.webview);
},
captureVideo: function (win, fail, args, env) {
var result = new PluginResult(args, env),
options = args[0] === "undefined" ? {} : JSON.parse(decodeURIComponent(args[0]));
capture("video", options, result, env.webview);
},
captureAudio: function (win, fail, args, env) {
var result = new PluginResult(args, env);
capture("audio", {}, result, env.webview);
}
};