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
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);
|
|
}
|
|
};
|