From e76b54b8e3f3d7299e5a921dcecc9dc442b278e1 Mon Sep 17 00:00:00 2001 From: Arjun Roychowdhury Date: Wed, 28 Oct 2015 13:31:08 -0400 Subject: media plugin --- .../src/blackberry10/index.js | 237 +++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 plugins/org.apache.cordova.media/src/blackberry10/index.js (limited to 'plugins/org.apache.cordova.media/src/blackberry10/index.js') diff --git a/plugins/org.apache.cordova.media/src/blackberry10/index.js b/plugins/org.apache.cordova.media/src/blackberry10/index.js new file mode 100644 index 00000000..1b9b7860 --- /dev/null +++ b/plugins/org.apache.cordova.media/src/blackberry10/index.js @@ -0,0 +1,237 @@ +/* + * + * 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. + * +*/ + +var audioObjects = {}, + mediaErrorsHandled = false; + +// There is a bug in the webplatform handling of media error +// dialogs prior to 10.2. This function needs to be run once +// on the webview which plays audio to prevent freezing. +function handleMediaErrors() { + var webview = qnx.webplatform.getWebViews()[0], + handler = webview.onDialogRequested; + if (!mediaErrorsHandled) { + webview.allowWebEvent("DialogRequested"); + webview.onDialogRequested = undefined; + webview.onDialogRequested = function (eventArgs) { + var parsedArgs = JSON.parse(eventArgs); + if (parsedArgs.dialogType === 'MediaError') { + return '{"setPreventDefault": true}'; + } + handler(eventArgs); + }; + mediaErrorsHandled = true; + } +} + +module.exports = { + + create: function (success, fail, args, env) { + var result = new PluginResult(args, env), + id; + + if (!args[0]) { + result.error("Media Object id was not sent in arguments"); + return; + } + + id = JSON.parse(decodeURIComponent(args[0])); + + if (!args[1]){ + audioObjects[id] = new Audio(); + } else { + audioObjects[id] = new Audio(JSON.parse(decodeURIComponent(args[1]))); + } + + handleMediaErrors(); + + result.ok(); + }, + + startPlayingAudio: function (success, fail, args, env) { + + var audio, + id, + result = new PluginResult(args, env); + + if (!args[0]) { + result.error("Media Object id was not sent in arguments"); + return; + } + + id = JSON.parse(decodeURIComponent(args[0])); + + audio = audioObjects[id]; + + if (!audio) { + result.error("Audio object has not been initialized"); + } else { + audio.play(); + result.ok(); + } + }, + + stopPlayingAudio: function (success, fail, args, env) { + + var audio, + id, + result = new PluginResult(args, env); + + if (!args[0]) { + result.error("Media Object id was not sent in arguments"); + return; + } + + id = JSON.parse(decodeURIComponent(args[0])); + + audio = audioObjects[id]; + + if (!audio) { + result.error("Audio Object has not been initialized"); + return; + } + + audio.pause(); + audio.currentTime = 0; + + result.ok(); + }, + + seekToAudio: function (success, fail, args, env) { + + var audio, + result = new PluginResult(args, env); + + if (!args[0]) { + result.error("Media Object id was not sent in arguments"); + return; + } + + audio = audioObjects[JSON.parse(decodeURIComponent(args[0]))]; + + if (!audio) { + result.error("Audio Object has not been initialized"); + } else if (!args[1]) { + result.error("Media seek time argument not found"); + } else { + try { + audio.currentTime = JSON.parse(decodeURIComponent(args[1])) / 1000; + result.ok(); + } catch (e) { + result.error("Error seeking audio: " + e); + } + } + }, + + pausePlayingAudio: function (success, fail, args, env) { + + var audio, + result = new PluginResult(args, env); + + if (!args[0]) { + result.error("Media Object id was not sent in arguments"); + return; + } + + audio = audioObjects[JSON.parse(decodeURIComponent(args[0]))]; + + if (!audio) { + result.error("Audio Object has not been initialized"); + return; + } + + audio.pause(); + }, + + getCurrentPositionAudio: function (success, fail, args, env) { + + var audio, + result = new PluginResult(args, env); + + if (!args[0]) { + result.error("Media Object id was not sent in arguments"); + return; + } + + audio = audioObjects[JSON.parse(decodeURIComponent(args[0]))]; + + if (!audio) { + result.error("Audio Object has not been initialized"); + return; + } + + result.ok(audio.currentTime); + }, + + getDuration: function (success, fail, args, env) { + + var audio, + result = new PluginResult(args, env); + + if (!args[0]) { + result.error("Media Object id was not sent in arguments"); + return; + } + + audio = audioObjects[JSON.parse(decodeURIComponent(args[0]))]; + + if (!audio) { + result.error("Audio Object has not been initialized"); + return; + } + + result.ok(audio.duration); + }, + + startRecordingAudio: function (success, fail, args, env) { + var result = new PluginResult(args, env); + result.error("Not supported"); + }, + + stopRecordingAudio: function (success, fail, args, env) { + var result = new PluginResult(args, env); + result.error("Not supported"); + }, + + release: function (success, fail, args, env) { + var audio, + id, + result = new PluginResult(args, env); + + if (!args[0]) { + result.error("Media Object id was not sent in arguments"); + return; + } + + id = JSON.parse(decodeURIComponent(args[0])); + + audio = audioObjects[id]; + + if (audio) { + if(audio.src !== ""){ + audio.src = undefined; + } + audioObjects[id] = undefined; + } + + result.ok(); + } +}; -- cgit v1.2.3