refactor(eslint): use cordova-eslint /w fix (#283)
diff --git a/.eslintrc.yml b/.eslintrc.yml
new file mode 100644
index 0000000..6a02457
--- /dev/null
+++ b/.eslintrc.yml
@@ -0,0 +1,23 @@
+# 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.
+
+root: true
+extends: "@cordova/eslint-config/browser"
+
+overrides:
+ - files: [tests/**/*.js]
+ extends: "@cordova/eslint-config/node-tests"
diff --git a/.jshintrc b/.jshintrc
deleted file mode 100644
index df32482..0000000
--- a/.jshintrc
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "browser": true
- , "devel": true
- , "bitwise": true
- , "undef": true
- , "trailing": true
- , "quotmark": false
- , "indent": 4
- , "unused": "vars"
- , "latedef": "nofunc"
- , "globals": {
- "module": false,
- "exports": false,
- "require": false,
- "cordova": true
- }
-}
diff --git a/package.json b/package.json
index 92a566a..4a83f0d 100644
--- a/package.json
+++ b/package.json
@@ -24,8 +24,8 @@
"cordova-windows"
],
"scripts": {
- "test": "npm run jshint",
- "jshint": "jshint www && jshint src && jshint tests"
+ "test": "npm run lint",
+ "lint": "eslint ."
},
"author": "Apache Software Foundation",
"license": "Apache-2.0",
@@ -43,6 +43,6 @@
}
},
"devDependencies": {
- "jshint": "^2.6.0"
+ "@cordova/eslint-config": "^3.0.0"
}
}
diff --git a/src/windows/MediaProxy.js b/src/windows/MediaProxy.js
index d7fe294..f7101ee 100644
--- a/src/windows/MediaProxy.js
+++ b/src/windows/MediaProxy.js
@@ -17,18 +17,18 @@
* specific language governing permissions and limitations
* under the License.
*
-*/
+ */
-/*global Windows:true */
+/* global Windows */
var Media = require('cordova-plugin-media.Media');
var MediaError = require('cordova-plugin-media.MediaError');
var recordedFile;
-var tempFolderAppDataBasePath = 'ms-appdata:///temp/',
- localFolderAppDataBasePath = 'ms-appdata:///local/',
- tempFolderFullPath = Windows.Storage.ApplicationData.current.temporaryFolder.path,
- localFolderFullPath = Windows.Storage.ApplicationData.current.localFolder.path;
+var tempFolderAppDataBasePath = 'ms-appdata:///temp/';
+var localFolderAppDataBasePath = 'ms-appdata:///local/';
+var tempFolderFullPath = Windows.Storage.ApplicationData.current.temporaryFolder.path;
+var localFolderFullPath = Windows.Storage.ApplicationData.current.localFolder.path;
var PARAMETER_IS_INCORRECT = -2147024809;
var SUPPORTED_EXTENSIONS = ['.mp3', '.wma', '.wav', '.cda', '.adx', '.wm', '.m3u', '.wmx', '.m4a'];
@@ -40,10 +40,10 @@
};
module.exports = {
- mediaCaptureMrg:null,
+ mediaCaptureMrg: null,
// Initiates the audio file
- create:function(win, lose, args) {
+ create: function (win, lose, args) {
var id = args[0];
var srcUri = processUri(args[1]);
@@ -66,7 +66,7 @@
// Don't create Audio object in case of record mode
if (createAudioNode === true) {
thisM.node = new Audio();
- thisM.node.msAudioCategory = "BackgroundCapableMedia";
+ thisM.node.msAudioCategory = 'BackgroundCapableMedia';
thisM.node.src = srcUri.absoluteCanonicalUri;
thisM.node.onloadstart = function () {
@@ -87,9 +87,10 @@
thisM.node.onerror = function (e) {
// Due to media.spec.15 It should return MediaError for bad filename
- var err = e.target.error.code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED ?
- { code: MediaError.MEDIA_ERR_ABORTED } :
- e.target.error;
+ var err =
+ e.target.error.code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED
+ ? { code: MediaError.MEDIA_ERR_ABORTED }
+ : e.target.error;
Media.onStatus(id, Media.MEDIA_ERROR, err);
};
@@ -104,10 +105,10 @@
},
// Start playing the audio
- startPlayingAudio:function(win, lose, args) {
+ startPlayingAudio: function (win, lose, args) {
var id = args[0];
- //var src = args[1];
- //var options = args[2];
+ // var src = args[1];
+ // var options = args[2];
var thisM = Media.get(id);
// if Media was released, then node will be null and we need to create it again
@@ -124,13 +125,13 @@
thisM.node.play();
} catch (err) {
if (lose) {
- lose({code:MediaError.MEDIA_ERR_ABORTED});
+ lose({ code: MediaError.MEDIA_ERR_ABORTED });
}
}
},
// Stops the playing audio
- stopPlayingAudio:function(win, lose, args) {
+ stopPlayingAudio: function (win, lose, args) {
var id = args[0];
try {
var thisM = Media.get(id);
@@ -138,12 +139,12 @@
thisM.node.currentTime = 0;
Media.onStatus(id, Media.MEDIA_STATE, Media.MEDIA_STOPPED);
} catch (err) {
- lose("Failed to stop: "+err);
+ lose('Failed to stop: ' + err);
}
},
// Seeks to the position in the audio
- seekToAudio:function(win, lose, args) {
+ seekToAudio: function (win, lose, args) {
var id = args[0];
var milliseconds = args[1];
var thisM = Media.get(id);
@@ -151,27 +152,27 @@
thisM.node.currentTime = milliseconds / 1000;
win(thisM.node.currentTime);
} catch (err) {
- lose("Failed to seek: "+err);
+ lose('Failed to seek: ' + err);
}
},
// Pauses the playing audio
- pausePlayingAudio:function(win, lose, args) {
+ pausePlayingAudio: function (win, lose, args) {
var id = args[0];
var thisM = Media.get(id);
try {
thisM.node.pause();
Media.onStatus(id, Media.MEDIA_STATE, Media.MEDIA_PAUSED);
} catch (err) {
- lose("Failed to pause: "+err);
+ lose('Failed to pause: ' + err);
}
},
// Gets current position in the audio
- getCurrentPositionAudio:function(win, lose, args) {
+ getCurrentPositionAudio: function (win, lose, args) {
var id = args[0];
try {
- var p = (Media.get(id)).node.currentTime;
+ var p = Media.get(id).node.currentTime;
win(p);
} catch (err) {
lose(err);
@@ -179,7 +180,7 @@
},
// Start recording audio
- startRecordingAudio:function(win, lose, args) {
+ startRecordingAudio: function (win, lose, args) {
var id = args[0];
var srcUri = processUri(args[1]);
@@ -196,41 +197,49 @@
// Initialize device
Media.prototype.mediaCaptureMgr = null;
- var thisM = (Media.get(id));
+ var thisM = Media.get(id);
var captureInitSettings = new Windows.Media.Capture.MediaCaptureInitializationSettings();
captureInitSettings.streamingCaptureMode = Windows.Media.Capture.StreamingCaptureMode.audio;
thisM.mediaCaptureMgr = new Windows.Media.Capture.MediaCapture();
- thisM.mediaCaptureMgr.addEventListener("failed", error);
+ thisM.mediaCaptureMgr.addEventListener('failed', error);
thisM.mediaCaptureMgr.initializeAsync(captureInitSettings).done(function (result) {
- thisM.mediaCaptureMgr.addEventListener("recordlimitationexceeded", error);
- thisM.mediaCaptureMgr.addEventListener("failed", error);
+ thisM.mediaCaptureMgr.addEventListener('recordlimitationexceeded', error);
+ thisM.mediaCaptureMgr.addEventListener('failed', error);
// Start recording
- Windows.Storage.ApplicationData.current.temporaryFolder.createFileAsync(destFileName, Windows.Storage.CreationCollisionOption.replaceExisting).done(function (newFile) {
- recordedFile = newFile;
- var encodingProfile = null;
- switch (newFile.fileType) {
+ Windows.Storage.ApplicationData.current.temporaryFolder
+ .createFileAsync(destFileName, Windows.Storage.CreationCollisionOption.replaceExisting)
+ .done(function (newFile) {
+ recordedFile = newFile;
+ var encodingProfile = null;
+ switch (newFile.fileType) {
case '.m4a':
- encodingProfile = Windows.Media.MediaProperties.MediaEncodingProfile.createM4a(Windows.Media.MediaProperties.AudioEncodingQuality.auto);
+ encodingProfile = Windows.Media.MediaProperties.MediaEncodingProfile.createM4a(
+ Windows.Media.MediaProperties.AudioEncodingQuality.auto
+ );
break;
case '.mp3':
- encodingProfile = Windows.Media.MediaProperties.MediaEncodingProfile.createMp3(Windows.Media.MediaProperties.AudioEncodingQuality.auto);
+ encodingProfile = Windows.Media.MediaProperties.MediaEncodingProfile.createMp3(
+ Windows.Media.MediaProperties.AudioEncodingQuality.auto
+ );
break;
case '.wma':
- encodingProfile = Windows.Media.MediaProperties.MediaEncodingProfile.createWma(Windows.Media.MediaProperties.AudioEncodingQuality.auto);
+ encodingProfile = Windows.Media.MediaProperties.MediaEncodingProfile.createWma(
+ Windows.Media.MediaProperties.AudioEncodingQuality.auto
+ );
break;
default:
- error("Invalid file type for record");
+ error('Invalid file type for record');
break;
- }
- thisM.mediaCaptureMgr.startRecordToStorageFileAsync(encodingProfile, newFile).done(success, error);
- }, error);
+ }
+ thisM.mediaCaptureMgr.startRecordToStorageFileAsync(encodingProfile, newFile).done(success, error);
+ }, error);
}, error);
},
// Stop recording audio
- stopRecordingAudio:function(win, lose, args) {
+ stopRecordingAudio: function (win, lose, args) {
var id = args[0];
var thisM = Media.get(id);
var srcUri = processUri(thisM.src);
@@ -255,16 +264,26 @@
success();
} else {
Windows.Storage.ApplicationData.current.temporaryFolder.getFolderAsync(destPath).done(function (destFolder) {
- recordedFile.copyAsync(destFolder, destFileName, Windows.Storage.CreationCollisionOption.replaceExisting).done(success, error);
+ recordedFile
+ .copyAsync(destFolder, destFileName, Windows.Storage.CreationCollisionOption.replaceExisting)
+ .done(success, error);
}, error);
}
} else {
// Copying file to persistent storage
if (!destPath) {
- recordedFile.copyAsync(Windows.Storage.ApplicationData.current.localFolder, destFileName, Windows.Storage.CreationCollisionOption.replaceExisting).done(success, error);
+ recordedFile
+ .copyAsync(
+ Windows.Storage.ApplicationData.current.localFolder,
+ destFileName,
+ Windows.Storage.CreationCollisionOption.replaceExisting
+ )
+ .done(success, error);
} else {
Windows.Storage.ApplicationData.current.localFolder.getFolderAsync(destPath).done(function (destFolder) {
- recordedFile.copyAsync(destFolder, destFileName, Windows.Storage.CreationCollisionOption.replaceExisting).done(success, error);
+ recordedFile
+ .copyAsync(destFolder, destFileName, Windows.Storage.CreationCollisionOption.replaceExisting)
+ .done(success, error);
}, error);
}
}
@@ -272,7 +291,7 @@
},
// Release the media object
- release:function(win, lose, args) {
+ release: function (win, lose, args) {
var id = args[0];
var thisM = Media.get(id);
try {
@@ -285,10 +304,10 @@
delete thisM.node;
}
} catch (err) {
- lose("Failed to release: "+err);
+ lose('Failed to release: ' + err);
}
},
- setVolume:function(win, lose, args) {
+ setVolume: function (win, lose, args) {
var id = args[0];
var volume = args[1];
var thisM = Media.get(id);
@@ -297,12 +316,12 @@
};
/**
- * Converts a path to Windows.Foundation.Uri basing on App data temporary folder
+ * Converts a path to Windows.Foundation.Uri basing on App data temporary folder
* if scheme is not defined, e.g.: path/to/file.m4a -> ms-appdata:///temp/path/to/file.m4a
* @param {String} src Input path
* @return {Object} Windows.Foundation.Uri
*/
-function setTemporaryFsByDefault(src) {
+function setTemporaryFsByDefault (src) {
var uri;
try {
uri = new Windows.Foundation.Uri(src);
@@ -313,9 +332,8 @@
} else {
throw e;
}
- } finally {
- return uri;
}
+ return uri;
}
/**
@@ -323,13 +341,19 @@
* @param {Object} uri Windows.Foundation.Uri
* @return {Object} ms-appdata Windows.Foundation.Uri
*/
-function fullPathToAppData(uri) {
+function fullPathToAppData (uri) {
if (uri.schemeName === 'file') {
if (uri.rawUri.indexOf(Windows.Storage.ApplicationData.current.localFolder.path) !== -1) {
// Also remove path' beginning slash to avoid losing folder name part
- uri = new Windows.Foundation.Uri(localFolderAppDataBasePath, uri.rawUri.replace(localFolderFullPath, '').replace(/^[\\\/]{1,2}/, ''));
+ uri = new Windows.Foundation.Uri(
+ localFolderAppDataBasePath,
+ uri.rawUri.replace(localFolderFullPath, '').replace(/^[\\/]{1,2}/, '')
+ );
} else if (uri.rawUri.indexOf(Windows.Storage.ApplicationData.current.temporaryFolder.path) !== -1) {
- uri = new Windows.Foundation.Uri(tempFolderAppDataBasePath, uri.rawUri.replace(tempFolderFullPath, '').replace(/^[\\\/]{1,2}/, ''));
+ uri = new Windows.Foundation.Uri(
+ tempFolderAppDataBasePath,
+ uri.rawUri.replace(tempFolderFullPath, '').replace(/^[\\/]{1,2}/, '')
+ );
} else {
throw new Error('Not supported file uri: ' + uri.rawUri);
}
@@ -343,7 +367,7 @@
* @param {Object} uri Input cdvfile scheme Windows.Foundation.Uri
* @return {Object} Windows.Foundation.Uri based on App data path
*/
-function cdvfileToAppData(uri) {
+function cdvfileToAppData (uri) {
var cdvFsRoot;
if (uri.schemeName === 'cdvfile') {
@@ -365,12 +389,12 @@
* @param {String} src Input media path
* @return {Object} Windows.Foundation.Uri
*/
-function processUri(src) {
+function processUri (src) {
// Collapse double slashes (File plugin issue): ms-appdata:///temp//recs/memos/media.m4a => ms-appdata:///temp/recs/memos/media.m4a
- src = src.replace(/([^\/:])(\/\/)([^\/])/g, '$1/$3');
+ src = src.replace(/([^/:])(\/\/)([^/])/g, '$1/$3');
// Remove beginning slashes
- src = src.replace(/^[\\\/]{1,2}/, '');
+ src = src.replace(/^[\\/]{1,2}/, '');
var uri = setTemporaryFsByDefault(src);
@@ -385,7 +409,7 @@
* @param {Object} uri Windows.Foundation.Uri
* @return {Object} Object containing path, filename and filesystem type
*/
-function parseUriToPathAndFilename(uri) {
+function parseUriToPathAndFilename (uri) {
// Removing scheme and location, using backslashes: ms-appdata:///local/path/to/file.m4a -> path\\to\\file.m4a
var normalizedSrc = uri.path.split('/').slice(2).join('\\');
@@ -407,4 +431,4 @@
};
}
-require("cordova/exec/proxy").add("Media",module.exports);
+require('cordova/exec/proxy').add('Media', module.exports);
diff --git a/tests/tests.js b/tests/tests.js
index 953b954..e216084 100644
--- a/tests/tests.js
+++ b/tests/tests.js
@@ -19,8 +19,7 @@
*
*/
-/* jshint jasmine: true */
-/* global Windows, Media, MediaError, LocalFileSystem, halfSpeedBtn */
+/* global cordova, Windows, Media, MediaError, LocalFileSystem, halfSpeedBtn */
// increased timeout for actual playback to give device chance to download and play mp3 file
// some emulators can be REALLY slow at this, so two minutes
@@ -34,8 +33,11 @@
// Detect whether audio hardware is available and enabled. For iOS playing audio is
// not supported on emulators w/out sound device connected to host PC but (which is
// the case for Sauce Labs emulators - see CB-11430)
-var isAudioSupported = isWindows ? !!Windows.Media.Devices.MediaDevice.getDefaultAudioRenderId(Windows.Media.Devices.AudioDeviceRole.default) :
- cordova.platformId === 'ios' ? !window.SAUCELABS_ENV : true;
+var isAudioSupported = isWindows
+ ? !!Windows.Media.Devices.MediaDevice.getDefaultAudioRenderId(Windows.Media.Devices.AudioDeviceRole.default)
+ : cordova.platformId === 'ios'
+ ? !window.SAUCELABS_ENV
+ : true;
var isKitKat = cordova.platformId === 'android' && /Android\s4\.4/.test(window.navigator.userAgent);
@@ -43,7 +45,7 @@
var failed = function (done, msg, context) {
if (context && context.done) return;
context.done = true;
- var info = typeof msg == 'undefined' ? 'Unexpected error callback' : msg;
+ var info = typeof msg === 'undefined' ? 'Unexpected error callback' : msg;
expect(true).toFailWithMessage(info);
done();
};
@@ -51,23 +53,22 @@
var succeed = function (done, msg, context) {
if (context && context.done) return;
context.done = true;
- var info = typeof msg == 'undefined' ? 'Unexpected success callback' : msg;
+ var info = typeof msg === 'undefined' ? 'Unexpected success callback' : msg;
expect(true).toFailWithMessage(info);
done();
};
describe('Media', function () {
-
beforeEach(function () {
// Custom Matcher
jasmine.Expectation.addMatchers({
- toFailWithMessage : function () {
+ toFailWithMessage: function () {
return {
- compare : function (error, message) {
+ compare: function (_, message) {
var pass = false;
return {
- pass : pass,
- message : message
+ pass: pass,
+ message: message
};
}
};
@@ -75,13 +76,13 @@
});
});
- it("media.spec.1 should exist", function () {
+ it('media.spec.1 should exist', function () {
expect(Media).toBeDefined();
- expect(typeof Media).toBe("function");
+ expect(typeof Media).toBe('function');
});
- it("media.spec.2 should have the following properties", function () {
- var media1 = new Media("dummy");
+ it('media.spec.2 should have the following properties', function () {
+ var media1 = new Media('dummy');
expect(media1.id).toBeDefined();
expect(media1.src).toBeDefined();
expect(media1._duration).toBeDefined();
@@ -89,7 +90,7 @@
media1.release();
});
- it("media.spec.3 should define constants for Media status", function () {
+ it('media.spec.3 should define constants for Media status', function () {
expect(Media).toBeDefined();
expect(Media.MEDIA_NONE).toBe(0);
expect(Media.MEDIA_STARTING).toBe(1);
@@ -98,7 +99,7 @@
expect(Media.MEDIA_STOPPED).toBe(4);
});
- it("media.spec.4 should define constants for Media errors", function () {
+ it('media.spec.4 should define constants for Media errors', function () {
expect(MediaError).toBeDefined();
expect(MediaError.MEDIA_ERR_NONE_ACTIVE).toBe(0);
expect(MediaError.MEDIA_ERR_ABORTED).toBe(1);
@@ -107,106 +108,113 @@
expect(MediaError.MEDIA_ERR_NONE_SUPPORTED).toBe(4);
});
- it("media.spec.5 should contain a play function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.5 should contain a play function', function () {
+ var media1 = new Media('dummy');
expect(media1.play).toBeDefined();
expect(typeof media1.play).toBe('function');
media1.release();
});
- it("media.spec.6 should contain a stop function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.6 should contain a stop function', function () {
+ var media1 = new Media('dummy');
expect(media1.stop).toBeDefined();
expect(typeof media1.stop).toBe('function');
media1.release();
});
- it("media.spec.7 should contain a seekTo function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.7 should contain a seekTo function', function () {
+ var media1 = new Media('dummy');
expect(media1.seekTo).toBeDefined();
expect(typeof media1.seekTo).toBe('function');
media1.release();
});
- it("media.spec.8 should contain a pause function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.8 should contain a pause function', function () {
+ var media1 = new Media('dummy');
expect(media1.pause).toBeDefined();
expect(typeof media1.pause).toBe('function');
media1.release();
});
- it("media.spec.9 should contain a getDuration function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.9 should contain a getDuration function', function () {
+ var media1 = new Media('dummy');
expect(media1.getDuration).toBeDefined();
expect(typeof media1.getDuration).toBe('function');
media1.release();
});
- it("media.spec.10 should contain a getCurrentPosition function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.10 should contain a getCurrentPosition function', function () {
+ var media1 = new Media('dummy');
expect(media1.getCurrentPosition).toBeDefined();
expect(typeof media1.getCurrentPosition).toBe('function');
media1.release();
});
- it("media.spec.11 should contain a startRecord function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.11 should contain a startRecord function', function () {
+ var media1 = new Media('dummy');
expect(media1.startRecord).toBeDefined();
expect(typeof media1.startRecord).toBe('function');
media1.release();
});
- it("media.spec.12 should contain a stopRecord function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.12 should contain a stopRecord function', function () {
+ var media1 = new Media('dummy');
expect(media1.stopRecord).toBeDefined();
expect(typeof media1.stopRecord).toBe('function');
media1.release();
});
- it("media.spec.13 should contain a release function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.13 should contain a release function', function () {
+ var media1 = new Media('dummy');
expect(media1.release).toBeDefined();
expect(typeof media1.release).toBe('function');
media1.release();
});
- it("media.spec.14 should contain a setVolume function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.14 should contain a setVolume function', function () {
+ var media1 = new Media('dummy');
expect(media1.setVolume).toBeDefined();
expect(typeof media1.setVolume).toBe('function');
media1.release();
});
- it("media.spec.15 should contain a getCurrentAmplitude function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.15 should contain a getCurrentAmplitude function', function () {
+ var media1 = new Media('dummy');
expect(media1.getCurrentAmplitude).toBeDefined();
expect(typeof media1.getCurrentAmplitude).toBe('function');
media1.release();
});
- it("media.spec.16 should contain a pauseRecord function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.16 should contain a pauseRecord function', function () {
+ var media1 = new Media('dummy');
expect(media1.pauseRecord).toBeDefined();
expect(typeof media1.pauseRecord).toBe('function');
media1.release();
});
- it("media.spec.17 should contain a resumeRecord function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.17 should contain a resumeRecord function', function () {
+ var media1 = new Media('dummy');
expect(media1.resumeRecord).toBeDefined();
expect(typeof media1.resumeRecord).toBe('function');
media1.release();
});
- it("media.spec.18 should return MediaError for bad filename", function (done) {
- //bb10 dialog pops up, preventing tests from running
+ it('media.spec.18 should return MediaError for bad filename', function (done) {
+ // bb10 dialog pops up, preventing tests from running
if (cordova.platformId === 'blackberry10') {
pending();
}
- var context = this,
- fileName = 'invalid.file.name',
- badMedia = new Media(fileName, succeed.bind(null, done, ' badMedia = new Media , Unexpected succees callback, it should not create Media object with invalid file name'), function (result) {
+ var context = this;
+ var fileName = 'invalid.file.name';
+ var badMedia = new Media(
+ fileName,
+ succeed.bind(
+ null,
+ done,
+ ' badMedia = new Media , Unexpected succees callback, it should not create Media object with invalid file name'
+ ),
+ function (result) {
if (context.done) return;
context.done = true;
@@ -216,15 +224,15 @@
badMedia.release();
}
done();
- });
+ }
+ );
badMedia.play();
});
- describe('actual playback', function() {
- var checkInterval,
- media;
+ describe('actual playback', function () {
+ var checkInterval, media;
- afterEach(function() {
+ afterEach(function () {
clearInterval(checkInterval);
if (media) {
media.stop();
@@ -233,23 +241,25 @@
}
});
- it("media.spec.19 position should be set properly", function (done) {
- // no audio hardware available
- if (!isAudioSupported || isBrowser || isKitKat) {
- pending();
- }
+ it(
+ 'media.spec.19 position should be set properly',
+ function (done) {
+ // no audio hardware available
+ if (!isAudioSupported || isBrowser || isKitKat) {
+ pending();
+ }
- //context variable used as an extra security statement to ensure that the callback is processed only once,
- //in case the statusChange callback is reached more than one time with the same status code.
- //Some information about this kind of behaviour can be found at JIRA: CB-7099.
- var context = this,
- mediaFile = WEB_MP3_FILE,
- successCallback = function () { },
- statusChange = function (statusCode) {
- if (!context.done && statusCode == Media.MEDIA_RUNNING) {
+ // context variable used as an extra security statement to ensure that the callback is processed only once,
+ // in case the statusChange callback is reached more than one time with the same status code.
+ // Some information about this kind of behaviour can be found at JIRA: CB-7099.
+ var context = this;
+ var mediaFile = WEB_MP3_FILE;
+ var successCallback = function () {};
+ var statusChange = function (statusCode) {
+ if (!context.done && statusCode === Media.MEDIA_RUNNING) {
checkInterval = setInterval(function () {
if (context.done) return;
- media.getCurrentPosition(function successCallback(position) {
+ media.getCurrentPosition(function successCallback (position) {
if (position > 0.0) {
context.done = true;
expect(true).toBe(true);
@@ -259,23 +269,32 @@
}, 1000);
}
};
- media = new Media(mediaFile, successCallback, failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context), statusChange);
- media.play();
- }, ACTUAL_PLAYBACK_TEST_TIMEOUT);
+ media = new Media(
+ mediaFile,
+ successCallback,
+ failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context),
+ statusChange
+ );
+ media.play();
+ },
+ ACTUAL_PLAYBACK_TEST_TIMEOUT
+ );
- it("media.spec.20 duration should be set properly", function (done) {
- if (!isAudioSupported || cordova.platformId === 'blackberry10' || isBrowser || isKitKat) {
- pending();
- }
+ it(
+ 'media.spec.20 duration should be set properly',
+ function (done) {
+ if (!isAudioSupported || cordova.platformId === 'blackberry10' || isBrowser || isKitKat) {
+ pending();
+ }
- //context variable used as an extra security statement to ensure that the callback is processed only once,
- //in case the statusChange callback is reached more than one time with the same status code.
- //Some information about this kind of behaviour can be found at JIRA: CB-7099.
- var context = this,
- mediaFile = WEB_MP3_FILE,
- successCallback = function () { },
- statusChange = function (statusCode) {
- if (!context.done && statusCode == Media.MEDIA_RUNNING) {
+ // context variable used as an extra security statement to ensure that the callback is processed only once,
+ // in case the statusChange callback is reached more than one time with the same status code.
+ // Some information about this kind of behaviour can be found at JIRA: CB-7099.
+ var context = this;
+ var mediaFile = WEB_MP3_FILE;
+ var successCallback = function () {};
+ var statusChange = function (statusCode) {
+ if (!context.done && statusCode === Media.MEDIA_RUNNING) {
checkInterval = setInterval(function () {
if (context.done) return;
media.getCurrentPosition(function (position) {
@@ -288,156 +307,194 @@
}, 1000);
}
};
- media = new Media(mediaFile, successCallback, failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context), statusChange);
- media.play();
- }, ACTUAL_PLAYBACK_TEST_TIMEOUT);
-
- it("media.spec.21 should be able to resume playback after pause", function (done) {
- if (!isAudioSupported || cordova.platformId === 'blackberry10' || isKitKat) {
- pending();
- }
-
- //context variable used as an extra security statement to ensure that the callback is processed only once,
- //in case the statusChange callback is reached more than one time with the same status code.
- //Some information about this kind of behaviour can be found at JIRA: CB-7099.
- var context = this;
- var resumed = false;
- var mediaFile = WEB_MP3_FILE;
- var successCallback = function () { };
- var statusChange = function (statusCode) {
- if (context.done) return;
-
- if (statusCode == Media.MEDIA_RUNNING) {
- if (!resumed) {
- media.seekTo(20000);
- media.pause();
- return;
- }
-
- media.getCurrentPosition(function (position) {
- expect(position).toBeGreaterThan(19);
- expect(position).toBeLessThan(21);
- context.done = true;
- done();
- }, failed.bind(null, done, 'media1.getCurrentPosition - Error getting media current position', context));
- }
-
- if (statusCode == Media.MEDIA_PAUSED) {
- resumed = true;
- media.play();
- }
- };
- media = new Media(mediaFile, successCallback, failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context), statusChange);
-
- // CB-10535: Play after a few secs, to give allow enough buffering of media file before seeking
- setTimeout(function() {
+ media = new Media(
+ mediaFile,
+ successCallback,
+ failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context),
+ statusChange
+ );
media.play();
- }, 4000);
+ },
+ ACTUAL_PLAYBACK_TEST_TIMEOUT
+ );
- }, ACTUAL_PLAYBACK_TEST_TIMEOUT);
+ it(
+ 'media.spec.21 should be able to resume playback after pause',
+ function (done) {
+ if (!isAudioSupported || cordova.platformId === 'blackberry10' || isKitKat) {
+ pending();
+ }
- it("media.spec.22 should be able to seek through file", function (done) {
- if (!isAudioSupported || cordova.platformId === 'blackberry10' || isKitKat) {
- pending();
- }
+ // context variable used as an extra security statement to ensure that the callback is processed only once,
+ // in case the statusChange callback is reached more than one time with the same status code.
+ // Some information about this kind of behaviour can be found at JIRA: CB-7099.
+ var context = this;
+ var resumed = false;
+ var mediaFile = WEB_MP3_FILE;
+ var successCallback = function () {};
+ var statusChange = function (statusCode) {
+ if (context.done) return;
- //context variable used as an extra security statement to ensure that the callback is processed only once,
- //in case the statusChange callback is reached more than one time with the same status code.
- //Some information about this kind of behaviour can be found at JIRA: CB-7099.
- var context = this;
- var mediaFile = WEB_MP3_FILE;
- var successCallback = function () { };
- var statusChange = function (statusCode) {
- if (!context.done && statusCode == Media.MEDIA_RUNNING) {
- checkInterval = setInterval(function () {
- if (context.done) return;
- media.seekTo(5000);
+ if (statusCode === Media.MEDIA_RUNNING) {
+ if (!resumed) {
+ media.seekTo(20000);
+ media.pause();
+ return;
+ }
+
media.getCurrentPosition(function (position) {
- expect(position).toBeCloseTo(5, 0);
+ expect(position).toBeGreaterThan(19);
+ expect(position).toBeLessThan(21);
context.done = true;
done();
}, failed.bind(null, done, 'media1.getCurrentPosition - Error getting media current position', context));
- }, 1000);
+ }
+
+ if (statusCode === Media.MEDIA_PAUSED) {
+ resumed = true;
+ media.play();
+ }
+ };
+ media = new Media(
+ mediaFile,
+ successCallback,
+ failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context),
+ statusChange
+ );
+
+ // CB-10535: Play after a few secs, to give allow enough buffering of media file before seeking
+ setTimeout(function () {
+ media.play();
+ }, 4000);
+ },
+ ACTUAL_PLAYBACK_TEST_TIMEOUT
+ );
+
+ it(
+ 'media.spec.22 should be able to seek through file',
+ function (done) {
+ if (!isAudioSupported || cordova.platformId === 'blackberry10' || isKitKat) {
+ pending();
}
- };
- media = new Media(mediaFile, successCallback, failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context), statusChange);
- // CB-10535: Play after a few secs, to give allow enough buffering of media file before seeking
- setTimeout(function() {
- media.play();
- }, 4000);
+ // context variable used as an extra security statement to ensure that the callback is processed only once,
+ // in case the statusChange callback is reached more than one time with the same status code.
+ // Some information about this kind of behaviour can be found at JIRA: CB-7099.
+ var context = this;
+ var mediaFile = WEB_MP3_FILE;
+ var successCallback = function () {};
+ var statusChange = function (statusCode) {
+ if (!context.done && statusCode === Media.MEDIA_RUNNING) {
+ checkInterval = setInterval(function () {
+ if (context.done) return;
+ media.seekTo(5000);
+ media.getCurrentPosition(function (position) {
+ expect(position).toBeCloseTo(5, 0);
+ context.done = true;
+ done();
+ }, failed.bind(null, done, 'media1.getCurrentPosition - Error getting media current position', context));
+ }, 1000);
+ }
+ };
+ media = new Media(
+ mediaFile,
+ successCallback,
+ failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context),
+ statusChange
+ );
- }, ACTUAL_PLAYBACK_TEST_TIMEOUT);
+ // CB-10535: Play after a few secs, to give allow enough buffering of media file before seeking
+ setTimeout(function () {
+ media.play();
+ }, 4000);
+ },
+ ACTUAL_PLAYBACK_TEST_TIMEOUT
+ );
});
- it("media.spec.23 should contain a setRate function", function () {
- var media1 = new Media("dummy");
+ it('media.spec.23 should contain a setRate function', function () {
+ var media1 = new Media('dummy');
expect(media1.setRate).toBeDefined();
expect(typeof media1.setRate).toBe('function');
media1.release();
});
- it("media.spec.24 playback rate should be set properly using setRate", function (done) {
- if (cordova.platformId !== 'ios') {
- expect(true).toFailWithMessage('Platform does not supported this feature');
- pending();
- }
+ it(
+ 'media.spec.24 playback rate should be set properly using setRate',
+ function (done) {
+ if (cordova.platformId !== 'ios') {
+ expect(true).toFailWithMessage('Platform does not supported this feature');
+ pending();
+ }
- // no audio hardware available
- if (!isAudioSupported) {
- pending();
- }
+ // no audio hardware available
+ if (!isAudioSupported) {
+ pending();
+ }
- var mediaFile = WEB_MP3_FILE,
- successCallback,
- context = this,
- flag = true,
- statusChange = function (statusCode) {
- console.log("status code: " + statusCode);
- if (statusCode == Media.MEDIA_RUNNING && flag) {
- //flag variable used to ensure an extra security statement to ensure that the callback is processed only once,
- //in case for some reason the statusChange callback is reached more than one time with the same status code.
- //Some information about this kind of behavior it can be found at JIRA: CB-7099
+ var mediaFile = WEB_MP3_FILE;
+ var successCallback;
+ var context = this;
+ var flag = true;
+ var statusChange = function (statusCode) {
+ console.log('status code: ' + statusCode);
+ if (statusCode === Media.MEDIA_RUNNING && flag) {
+ // flag variable used to ensure an extra security statement to ensure that the callback is processed only once,
+ // in case for some reason the statusChange callback is reached more than one time with the same status code.
+ // Some information about this kind of behavior it can be found at JIRA: CB-7099
flag = false;
setTimeout(function () {
- media1.getCurrentPosition(function (position) {
- //in four seconds expect position to be between 4 & 10. Here, the values are chosen to give
- //a large enough buffer range for the position to fall in and are not based on any calculation.
- expect(position).not.toBeLessThan(4);
- expect(position).toBeLessThan(10);
- media1.stop();
- media1.release();
- context.done = true;
- done();
- }, failed.bind(null, done, 'media1.getCurrentPosition - Error getting media current position'),context);
+ media1.getCurrentPosition(
+ function (position) {
+ // in four seconds expect position to be between 4 & 10. Here, the values are chosen to give
+ // a large enough buffer range for the position to fall in and are not based on any calculation.
+ expect(position).not.toBeLessThan(4);
+ expect(position).toBeLessThan(10);
+ media1.stop();
+ media1.release();
+ context.done = true;
+ done();
+ },
+ failed.bind(null, done, 'media1.getCurrentPosition - Error getting media current position'),
+ context
+ );
}, 4000);
}
};
- var media1 = new Media(mediaFile, successCallback, failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context), statusChange); // jshint ignore:line
- //make audio playback two times faster
- media1.setRate(2);
- media1.play();
- }, ACTUAL_PLAYBACK_TEST_TIMEOUT);
+ var media1 = new Media(
+ mediaFile,
+ successCallback,
+ failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context),
+ statusChange
+ );
+ // make audio playback two times faster
+ media1.setRate(2);
+ media1.play();
+ },
+ ACTUAL_PLAYBACK_TEST_TIMEOUT
+ );
- it("media.spec.25 should be able to play an audio stream", function (done) {
- // no audio hardware available, OR
- // O_o Safari can't play the stream, so we're skipping this test on all browsers o_O
- if (!isAudioSupported || isBrowser || isKitKat) {
- pending();
- }
+ it(
+ 'media.spec.25 should be able to play an audio stream',
+ function (done) {
+ // no audio hardware available, OR
+ // O_o Safari can't play the stream, so we're skipping this test on all browsers o_O
+ if (!isAudioSupported || isBrowser || isKitKat) {
+ pending();
+ }
- // The link below points to an infinite mp3 stream
- var mediaFile = WEB_MP3_STREAM,
- successCallback,
- context = this,
- flag = true,
- statusChange = function (statusCode) {
- console.log("status code: " + statusCode);
- if (statusCode == Media.MEDIA_RUNNING && flag) {
- //flag variable used to ensure an extra security statement to ensure that the callback is processed only once,
- //in case for some reason the statusChange callback is reached more than one time with the same status code.
- //Some information about this kind of behavior it can be found at JIRA: CB-7099
+ // The link below points to an infinite mp3 stream
+ var mediaFile = WEB_MP3_STREAM;
+ var successCallback;
+ var context = this;
+ var flag = true;
+ var statusChange = function (statusCode) {
+ console.log('status code: ' + statusCode);
+ if (statusCode === Media.MEDIA_RUNNING && flag) {
+ // flag variable used to ensure an extra security statement to ensure that the callback is processed only once,
+ // in case for some reason the statusChange callback is reached more than one time with the same status code.
+ // Some information about this kind of behavior it can be found at JIRA: CB-7099
flag = false;
expect(true).toBe(true);
media1.stop();
@@ -447,12 +504,19 @@
}
};
- var media1 = new Media(mediaFile, successCallback, failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context), statusChange); // jshint ignore:line
- media1.play();
- }, ACTUAL_PLAYBACK_TEST_TIMEOUT);
+ var media1 = new Media(
+ mediaFile,
+ successCallback,
+ failed.bind(null, done, 'media1 = new Media - Error creating Media object. Media file: ' + mediaFile, context),
+ statusChange
+ );
+ media1.play();
+ },
+ ACTUAL_PLAYBACK_TEST_TIMEOUT
+ );
- it("media.spec.26 should not crash or throw when setting the volume right after creating the media", function (done) {
- //bb10 dialog pops up, preventing tests from running
+ it('media.spec.26 should not crash or throw when setting the volume right after creating the media', function (done) {
+ // bb10 dialog pops up, preventing tests from running
if (cordova.platformId === 'blackberry10') {
pending();
}
@@ -474,8 +538,8 @@
}, 3000);
});
- it("media.spec.27 should call success or error when trying to stop a media that is in starting state", function (done) {
- //bb10 dialog pops up, preventing tests from running
+ it('media.spec.27 should call success or error when trying to stop a media that is in starting state', function (done) {
+ // bb10 dialog pops up, preventing tests from running
if (!isAudioSupported || cordova.platformId === 'blackberry10') {
pending();
}
@@ -501,10 +565,10 @@
safeDone();
};
var statusChange = function (s) {
- if ((s == Media.MEDIA_STARTING) && !context.done) {
+ if (s === Media.MEDIA_STARTING && !context.done) {
beenStarting = true;
media.stop();
- } else if (s == Media.MEDIA_RUNNING) {
+ } else if (s === Media.MEDIA_RUNNING) {
// Some plugin implementations may skip "Starting" state
// so we'll also try to call stop in "Running" state,
// but in this case we should check that the "Starting" state wasn't really reached,
@@ -517,27 +581,26 @@
media = new Media(mediaFile, successCallback, errorCallback, statusChange);
media.play();
});
-
});
};
-//******************************************************************************************
-//***************************************Manual Tests***************************************
-//******************************************************************************************
+//* *****************************************************************************************
+//* **************************************Manual Tests***************************************
+//* *****************************************************************************************
exports.defineManualTests = function (contentEl, createActionButton) {
- //-------------------------------------------------------------------------
+ // -------------------------------------------------------------------------
// Audio player
- //-------------------------------------------------------------------------
+ // -------------------------------------------------------------------------
var media1 = null;
var media1Timer = null;
var audioSrc = null;
var defaultaudio = WEB_MP3_FILE;
- //Play audio function
- function playAudio(url) {
- console.log("playAudio()");
- console.log(" -- media=" + media1);
+ // Play audio function
+ function playAudio (url) {
+ console.log('playAudio()');
+ console.log(' -- media=' + media1);
var src = defaultaudio;
@@ -554,84 +617,83 @@
}
if (media1 === null) {
-
// TEST STREAMING AUDIO PLAYBACK
- //var src = "http://nunzioweb.com/misc/Bon_Jovi-Crush_Mystery_Train.mp3"; // works
- //var src = "http://nunzioweb.com/misc/Bon_Jovi-Crush_Mystery_Train.m3u"; // doesn't work
- //var src = "http://www.wav-sounds.com/cartoon/bugsbunny1.wav"; // works
- //var src = "http://www.angelfire.com/fl5/html-tutorial/a/couldyou.mid"; // doesn't work
- //var src = "MusicSearch/mp3/train.mp3"; // works
- //var src = "bryce.mp3"; // works
- //var src = "/android_asset/www/bryce.mp3"; // works
+ // var src = "http://nunzioweb.com/misc/Bon_Jovi-Crush_Mystery_Train.mp3"; // works
+ // var src = "http://nunzioweb.com/misc/Bon_Jovi-Crush_Mystery_Train.m3u"; // doesn't work
+ // var src = "http://www.wav-sounds.com/cartoon/bugsbunny1.wav"; // works
+ // var src = "http://www.angelfire.com/fl5/html-tutorial/a/couldyou.mid"; // doesn't work
+ // var src = "MusicSearch/mp3/train.mp3"; // works
+ // var src = "bryce.mp3"; // works
+ // var src = "/android_asset/www/bryce.mp3"; // works
- media1 = new Media(src,
- function () {
- console.log("playAudio():Audio Success");
+ media1 = new Media(
+ src,
+ function () {
+ console.log('playAudio():Audio Success');
},
- function (err) {
- console.log("playAudio():Audio Error: " + err.code);
- setAudioStatus("Error: " + err.code);
+ function (err) {
+ console.log('playAudio():Audio Error: ' + err.code);
+ setAudioStatus('Error: ' + err.code);
},
- function (status) {
- console.log("playAudio():Audio Status: " + status);
+ function (status) {
+ console.log('playAudio():Audio Status: ' + status);
setAudioStatus(Media.MEDIA_MSG[status]);
// If stopped, then stop getting current position
- if (Media.MEDIA_STOPPED == status) {
+ if (Media.MEDIA_STOPPED === status) {
clearInterval(media1Timer);
media1Timer = null;
- setAudioPosition("0 sec");
+ setAudioPosition('0 sec');
}
- });
+ }
+ );
}
audioSrc = src;
- document.getElementById('durationValue').innerHTML = "";
+ document.getElementById('durationValue').innerHTML = '';
// Play audio
media1.play();
if (media1Timer === null && media1.getCurrentPosition) {
- media1Timer = setInterval(
- function () {
- media1.getCurrentPosition(
- function (position) {
+ media1Timer = setInterval(function () {
+ media1.getCurrentPosition(
+ function (position) {
if (position >= 0.0) {
- setAudioPosition(position + " sec");
+ setAudioPosition(position + ' sec');
}
},
- function (e) {
- console.log("Error getting pos=" + e);
- setAudioPosition("Error: " + e);
- });
- },
- 1000);
+ function (e) {
+ console.log('Error getting pos=' + e);
+ setAudioPosition('Error: ' + e);
+ }
+ );
+ }, 1000);
}
// Get duration
var counter = 0;
- var timerDur = setInterval(
- function () {
- counter = counter + 100;
- if (counter > 2000) {
- clearInterval(timerDur);
- }
- var dur = media1.getDuration();
- if (dur > 0) {
- clearInterval(timerDur);
- document.getElementById('durationValue').innerHTML = dur + " sec";
- }
- }, 100);
+ var timerDur = setInterval(function () {
+ counter = counter + 100;
+ if (counter > 2000) {
+ clearInterval(timerDur);
+ }
+ var dur = media1.getDuration();
+ if (dur > 0) {
+ clearInterval(timerDur);
+ document.getElementById('durationValue').innerHTML = dur + ' sec';
+ }
+ }, 100);
}
- //Pause audio playback
- function pauseAudio() {
- console.log("pauseAudio()");
+ // Pause audio playback
+ function pauseAudio () {
+ console.log('pauseAudio()');
if (media1) {
media1.pause();
}
}
- //Stop audio
- function stopAudio() {
- console.log("stopAudio()");
+ // Stop audio
+ function stopAudio () {
+ console.log('stopAudio()');
if (media1) {
media1.stop();
}
@@ -639,132 +701,140 @@
media1Timer = null;
}
- //Release audio
- function releaseAudio() {
- console.log("releaseAudio()");
+ // Release audio
+ function releaseAudio () {
+ console.log('releaseAudio()');
if (media1) {
- media1.stop(); //imlied stop of playback, resets timer
+ media1.stop(); // imlied stop of playback, resets timer
media1.release();
}
}
- //Set audio status
- function setAudioStatus(status) {
+ // Set audio status
+ function setAudioStatus (status) {
document.getElementById('statusValue').innerHTML = status;
}
- //Set audio position
- function setAudioPosition(position) {
+ // Set audio position
+ function setAudioPosition (position) {
document.getElementById('positionValue').innerHTML = position;
}
- //Seek audio
- function seekAudio(mode) {
- var time = document.getElementById("seekInput").value;
- if (time === "") {
+ // Seek audio
+ function seekAudio (mode) {
+ var time = document.getElementById('seekInput').value;
+ if (time === '') {
time = 5000;
} else {
- time = time * 1000; //we expect the input to be in seconds
+ time = time * 1000; // we expect the input to be in seconds
}
if (media1 === null) {
- console.log("seekTo requested while media1 is null");
+ console.log('seekTo requested while media1 is null');
if (audioSrc === null) {
audioSrc = defaultaudio;
}
- media1 = new Media(audioSrc,
- function () {
- console.log("seekToAudio():Audio Success");
+ media1 = new Media(
+ audioSrc,
+ function () {
+ console.log('seekToAudio():Audio Success');
},
- function (err) {
- console.log("seekAudio():Audio Error: " + err.code);
- setAudioStatus("Error: " + err.code);
+ function (err) {
+ console.log('seekAudio():Audio Error: ' + err.code);
+ setAudioStatus('Error: ' + err.code);
},
- function (status) {
- console.log("seekAudio():Audio Status: " + status);
+ function (status) {
+ console.log('seekAudio():Audio Status: ' + status);
setAudioStatus(Media.MEDIA_MSG[status]);
// If stopped, then stop getting current position
- if (Media.MEDIA_STOPPED == status) {
+ if (Media.MEDIA_STOPPED === status) {
clearInterval(media1Timer);
media1Timer = null;
- setAudioPosition("0 sec");
+ setAudioPosition('0 sec');
}
- });
+ }
+ );
}
media1.getCurrentPosition(
function (position) {
- var deltat = time;
- if (mode === "by") {
- deltat = time + position * 1000;
- }
- media1.seekTo(deltat,
- function () {
- console.log("seekAudioTo():Audio Success");
- //force an update on the position display
- updatePosition();
+ var deltat = time;
+ if (mode === 'by') {
+ deltat = time + position * 1000;
+ }
+ media1.seekTo(
+ deltat,
+ function () {
+ console.log('seekAudioTo():Audio Success');
+ // force an update on the position display
+ updatePosition();
+ },
+ function (err) {
+ console.log('seekAudioTo():Audio Error: ' + err.code);
+ }
+ );
},
- function (err) {
- console.log("seekAudioTo():Audio Error: " + err.code);
- });
- },
function (e) {
- console.log("Error getting pos=" + e);
- setAudioPosition("Error: " + e);
- });
+ console.log('Error getting pos=' + e);
+ setAudioPosition('Error: ' + e);
+ }
+ );
}
- //set audio volume
- function setVolume() {
- console.log("setVolume()");
- var volume = document.getElementById("volumeInput").value;
+ // set audio volume
+ function setVolume () {
+ console.log('setVolume()');
+ var volume = document.getElementById('volumeInput').value;
if (media1 !== null) {
media1.setVolume(volume);
}
}
- //for forced updates of position after a successful seek
+ // for forced updates of position after a successful seek
- function updatePosition() {
+ function updatePosition () {
media1.getCurrentPosition(
function (position) {
- if (position >= 0.0) {
- setAudioPosition(position + " sec");
- }
- },
+ if (position >= 0.0) {
+ setAudioPosition(position + ' sec');
+ }
+ },
function (e) {
- console.log("Error getting pos=" + e);
- setAudioPosition("Error: " + e);
- });
+ console.log('Error getting pos=' + e);
+ setAudioPosition('Error: ' + e);
+ }
+ );
}
- //-------------------------------------------------------------------------
+ // -------------------------------------------------------------------------
// Audio recorder
- //-------------------------------------------------------------------------
+ // -------------------------------------------------------------------------
var mediaRec = null;
var recTime = 0;
- var recordSrc = "myRecording.mp3";
+ var recordSrc = 'myRecording.mp3';
- //Record audio
- function recordAudio() {
- console.log("recordAudio(), recording to " + recordSrc);
- console.log(" -- media=" + mediaRec);
+ // Record audio
+ function recordAudio () {
+ console.log('recordAudio(), recording to ' + recordSrc);
+ console.log(' -- media=' + mediaRec);
releaseAudio();
if (!mediaRec) {
- mediaRec = new Media(recordSrc,
+ mediaRec = new Media(
+ recordSrc,
function () {
- console.log("recordAudio():Audio Success");
+ console.log('recordAudio():Audio Success');
},
- function (err) {
- console.log("recordAudio():Audio Error: " + err.code);
- setAudioStatus("Error: " + err.code);
+ function (err) {
+ console.log('recordAudio():Audio Error: ' + err.code);
+ setAudioStatus('Error: ' + err.code);
},
- function (status) {
- console.log("recordAudio():Audio Status: " + status);
+ function (status) {
+ console.log('recordAudio():Audio Status: ' + status);
setAudioStatus(Media.MEDIA_MSG[status]);
- });
+ }
+ );
}
// Record audio
@@ -773,334 +843,394 @@
// Stop recording after 10 sec
recTime = 0;
var recInterval = setInterval(function () {
- recTime = recTime + 1;
- setAudioPosition(recTime + " sec");
- if (recTime >= 10) {
- clearInterval(recInterval);
- if (mediaRec.stopAudioRecord) {
- mediaRec.stopAudioRecord();
- } else {
- mediaRec.stopRecord();
- }
- console.log("recordAudio(): stop");
+ recTime = recTime + 1;
+ setAudioPosition(recTime + ' sec');
+ if (recTime >= 10) {
+ clearInterval(recInterval);
+ if (mediaRec.stopAudioRecord) {
+ mediaRec.stopAudioRecord();
+ } else {
+ mediaRec.stopRecord();
}
- }, 1000);
+ console.log('recordAudio(): stop');
+ }
+ }, 1000);
}
- //Play back recorded audio
- function playRecording() {
+ // Play back recorded audio
+ function playRecording () {
playAudio(recordSrc);
}
- //Function to get a filename for iOS recording
- //Ensures that file doesn't exist to test CB-11380
- function getRecordSrc() {
+ // Function to get a filename for iOS recording
+ // Ensures that file doesn't exist to test CB-11380
+ function getRecordSrc () {
var noop = function () {};
- recordSrc = "cdvfile://localhost/temporary/iOSRecording.wav";
- window.resolveLocalFileSystemURL(recordSrc, function (file) {
- file.remove(function() {
- console.log("Successfully removed " + recordSrc);
- }, noop);
- }, noop);
+ recordSrc = 'cdvfile://localhost/temporary/iOSRecording.wav';
+ window.resolveLocalFileSystemURL(
+ recordSrc,
+ function (file) {
+ file.remove(function () {
+ console.log('Successfully removed ' + recordSrc);
+ }, noop);
+ },
+ noop
+ );
}
- //Function to create a file for BB recording
- function getRecordSrcBB() {
+ // Function to create a file for BB recording
+ function getRecordSrcBB () {
var fsFail = function (error) {
- console.log("error creating file for BB recording");
+ console.log('error creating file for BB recording', error);
};
var gotFile = function (file) {
recordSrc = file.fullPath;
};
var gotFS = function (fileSystem) {
- fileSystem.root.getFile("BBRecording.amr", {
- create : true
- }, gotFile, fsFail);
+ fileSystem.root.getFile(
+ 'BBRecording.amr',
+ {
+ create: true
+ },
+ gotFile,
+ fsFail
+ );
};
window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, gotFS, fsFail);
}
- //Function to create a file for Windows recording
- function getRecordSrcWin() {
+ // Function to create a file for Windows recording
+ function getRecordSrcWin () {
var fsFail = function (error) {
- console.log("error creating file for Win recording");
+ console.log('error creating file for Win recording', error);
};
var gotFile = function (file) {
recordSrc = file.name;
};
var gotFS = function (fileSystem) {
- fileSystem.root.getFile("WinRecording.m4a", {
- create: true
- }, gotFile, fsFail);
+ fileSystem.root.getFile(
+ 'WinRecording.m4a',
+ {
+ create: true
+ },
+ gotFile,
+ fsFail
+ );
};
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fsFail);
}
-//Generate Dynamic Table
- function generateTable(tableId, rows, cells, elements) {
+ // Generate Dynamic Table
+ function generateTable (tableId, rows, cells, elements) {
var table = document.createElement('table');
for (var r = 0; r < rows; r++) {
var row = table.insertRow(r);
for (var c = 0; c < cells; c++) {
var cell = row.insertCell(c);
- cell.setAttribute("align", "center");
+ cell.setAttribute('align', 'center');
for (var e in elements) {
- if (elements[e].position.row == r && elements[e].position.cell == c) {
+ if (elements[e].position.row === r && elements[e].position.cell === c) {
var htmlElement = document.createElement(elements[e].tag);
var content;
- if (elements[e].content !== "") {
+ if (elements[e].content !== '') {
content = document.createTextNode(elements[e].content);
htmlElement.appendChild(content);
}
if (elements[e].type) {
htmlElement.type = elements[e].type;
}
- htmlElement.setAttribute("id", elements[e].id);
+ htmlElement.setAttribute('id', elements[e].id);
cell.appendChild(htmlElement);
}
}
}
}
- table.setAttribute("align", "center");
- table.setAttribute("id", tableId);
+ table.setAttribute('align', 'center');
+ table.setAttribute('id', tableId);
return table;
}
-//Audio && Record Elements
- var elementsResultsAudio=
- [{
- id : "statusTag",
- content : "Status:",
- tag : "div",
- position : {
- row : 0,
- cell : 0
- }
- }, {
- id : "statusValue",
- content : "",
- tag : "div",
- position : {
- row : 0,
- cell : 2
- }
- }, {
- id : "durationTag",
- content : "Duration:",
- tag : "div",
- position : {
- row : 1,
- cell : 0
- }
- }, {
- id : "durationValue",
- content : "",
- tag : "div",
- position : {
- row : 1,
- cell : 2
- }
- }, {
- id : "positionTag",
- content : "Position:",
- tag : "div",
- position : {
- row : 2,
- cell : 0
- }
- }, {
- id : "positionValue",
- content : "",
- tag : "div",
- position : {
- row : 2,
- cell : 2
- }
- }],
- elementsAudio =
- [{
- id : "playBtn",
- content : "",
- tag : "div",
- position : {
- row : 0,
- cell : 0
- }
- }, {
- id : "pauseBtn",
- content : "",
- tag : "div",
- position : {
- row : 0,
- cell : 1
- }
- }, {
- id : "stopBtn",
- content : "",
- tag : "div",
- position : {
- row : 1,
- cell : 0
- }
- }, {
- id : "releaseBtn",
- content : "",
- tag : "div",
- position : {
- row : 1,
- cell : 1
- }
- }, {
- id : "seekByBtn",
- content : "",
- tag : "div",
- position : {
- row : 2,
- cell : 0
- }
- }, {
- id : "seekToBtn",
- content : "",
- tag : "div",
- position : {
- row : 2,
- cell : 1
- }
- }, {
- id : "seekInput",
- content : "",
- tag : "input",
- type : "number",
- position : {
- row : 2,
- cell : 2
- }
- }, {
- id: "halfSpeedBtn",
- content:"",
- tag:"div",
- position:{
- row:0,
- cell:2
+ // Audio && Record Elements
+ var elementsResultsAudio = [
+ {
+ id: 'statusTag',
+ content: 'Status:',
+ tag: 'div',
+ position: {
+ row: 0,
+ cell: 0
}
},
- {
- id: "setVolumeBtn",
- content: "",
- tag: "div",
+ {
+ id: 'statusValue',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 0,
+ cell: 2
+ }
+ },
+ {
+ id: 'durationTag',
+ content: 'Duration:',
+ tag: 'div',
+ position: {
+ row: 1,
+ cell: 0
+ }
+ },
+ {
+ id: 'durationValue',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 1,
+ cell: 2
+ }
+ },
+ {
+ id: 'positionTag',
+ content: 'Position:',
+ tag: 'div',
+ position: {
+ row: 2,
+ cell: 0
+ }
+ },
+ {
+ id: 'positionValue',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 2,
+ cell: 2
+ }
+ }
+ ];
+ var elementsAudio = [
+ {
+ id: 'playBtn',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 0,
+ cell: 0
+ }
+ },
+ {
+ id: 'pauseBtn',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 0,
+ cell: 1
+ }
+ },
+ {
+ id: 'stopBtn',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 1,
+ cell: 0
+ }
+ },
+ {
+ id: 'releaseBtn',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 1,
+ cell: 1
+ }
+ },
+ {
+ id: 'seekByBtn',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 2,
+ cell: 0
+ }
+ },
+ {
+ id: 'seekToBtn',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 2,
+ cell: 1
+ }
+ },
+ {
+ id: 'seekInput',
+ content: '',
+ tag: 'input',
+ type: 'number',
+ position: {
+ row: 2,
+ cell: 2
+ }
+ },
+ {
+ id: 'halfSpeedBtn',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 0,
+ cell: 2
+ }
+ },
+ {
+ id: 'setVolumeBtn',
+ content: '',
+ tag: 'div',
position: {
row: 3,
cell: 0
}
},
{
- id: "volumeInput",
- tag: "input",
- type: "text",
+ id: 'volumeInput',
+ tag: 'input',
+ type: 'text',
position: {
row: 3,
cell: 1
}
}
- ],
- elementsRecord =
- [{
- id : "recordbtn",
- content : "",
- tag : "div",
- position : {
- row : 1,
- cell : 0
+ ];
+ var elementsRecord = [
+ {
+ id: 'recordbtn',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 1,
+ cell: 0
}
- }, {
- id : "recordplayBtn",
- content : "",
- tag : "div",
- position : {
- row : 1,
- cell : 1
+ },
+ {
+ id: 'recordplayBtn',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 1,
+ cell: 1
}
- }, {
- id : "recordpauseBtn",
- content : "",
- tag : "div",
- position : {
- row : 2,
- cell : 0
+ },
+ {
+ id: 'recordpauseBtn',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 2,
+ cell: 0
}
- }, {
- id : "recordstopBtn",
- content : "",
- tag : "div",
- position : {
- row : 2,
- cell : 1
+ },
+ {
+ id: 'recordstopBtn',
+ content: '',
+ tag: 'div',
+ position: {
+ row: 2,
+ cell: 1
}
}
];
- //Title audio results
+ // Title audio results
var div = document.createElement('h2');
div.appendChild(document.createTextNode('Audio'));
- div.setAttribute("align", "center");
+ div.setAttribute('align', 'center');
contentEl.appendChild(div);
- //Generate and add results table
+ // Generate and add results table
contentEl.appendChild(generateTable('info', 3, 3, elementsResultsAudio));
- //Title audio actions
+ // Title audio actions
div = document.createElement('h2');
div.appendChild(document.createTextNode('Actions'));
- div.setAttribute("align", "center");
+ div.setAttribute('align', 'center');
contentEl.appendChild(div);
- //Generate and add buttons table
+ // Generate and add buttons table
contentEl.appendChild(generateTable('audioActions', 4, 3, elementsAudio));
- createActionButton('Play', function () {
- playAudio();
- }, 'playBtn');
- createActionButton('Pause', function () {
- pauseAudio();
- }, 'pauseBtn');
- createActionButton('HalfSpeed', function() {
- if(halfSpeedBtn.firstChild.firstChild.innerText == 'HalfSpeed') {
- halfSpeedBtn.firstChild.firstChild.innerText = 'FullSpeed';
- media1.setRate(0.5);
- }
- else if(halfSpeedBtn.firstChild.firstChild.innerText == 'FullSpeed') {
- halfSpeedBtn.firstChild.firstChild.innerText = 'DoubleSpeed';
- media1.setRate(1.0);
- }
- else {
- halfSpeedBtn.firstChild.firstChild.innerText = 'HalfSpeed';
- media1.setRate(2.0);
- }
- }, 'halfSpeedBtn');
- createActionButton('Stop', function () {
- stopAudio();
- }, 'stopBtn');
- createActionButton('Release', function () {
- releaseAudio();
- }, 'releaseBtn');
- createActionButton('Seek By', function () {
- seekAudio('by');
- }, 'seekByBtn');
- createActionButton('Seek To', function () {
- seekAudio('to');
- }, 'seekToBtn');
- createActionButton('Set volume', function() {
- setVolume();
- }, 'setVolumeBtn');
- //get Special path to record if iOS || Blackberry
- if (cordova.platformId === 'ios')
+ createActionButton(
+ 'Play',
+ function () {
+ playAudio();
+ },
+ 'playBtn'
+ );
+ createActionButton(
+ 'Pause',
+ function () {
+ pauseAudio();
+ },
+ 'pauseBtn'
+ );
+ createActionButton(
+ 'HalfSpeed',
+ function () {
+ if (halfSpeedBtn.firstChild.firstChild.innerText === 'HalfSpeed') {
+ halfSpeedBtn.firstChild.firstChild.innerText = 'FullSpeed';
+ media1.setRate(0.5);
+ } else if (halfSpeedBtn.firstChild.firstChild.innerText === 'FullSpeed') {
+ halfSpeedBtn.firstChild.firstChild.innerText = 'DoubleSpeed';
+ media1.setRate(1.0);
+ } else {
+ halfSpeedBtn.firstChild.firstChild.innerText = 'HalfSpeed';
+ media1.setRate(2.0);
+ }
+ },
+ 'halfSpeedBtn'
+ );
+ createActionButton(
+ 'Stop',
+ function () {
+ stopAudio();
+ },
+ 'stopBtn'
+ );
+ createActionButton(
+ 'Release',
+ function () {
+ releaseAudio();
+ },
+ 'releaseBtn'
+ );
+ createActionButton(
+ 'Seek By',
+ function () {
+ seekAudio('by');
+ },
+ 'seekByBtn'
+ );
+ createActionButton(
+ 'Seek To',
+ function () {
+ seekAudio('to');
+ },
+ 'seekToBtn'
+ );
+ createActionButton(
+ 'Set volume',
+ function () {
+ setVolume();
+ },
+ 'setVolumeBtn'
+ );
+ // get Special path to record if iOS || Blackberry
+ if (cordova.platformId === 'ios') {
getRecordSrc();
- else if (cordova.platformId === 'blackberry')
+ } else if (cordova.platformId === 'blackberry') {
getRecordSrcBB();
- else if (cordova.platformId === 'windows' || cordova.platformId === 'windows8')
+ } else if (cordova.platformId === 'windows' || cordova.platformId === 'windows8') {
getRecordSrcWin();
+ }
- //testing process and details
- function addItemToList(_list, _text)
- {
+ // testing process and details
+ function addItemToList (_list, _text) {
var item = document.createElement('li');
item.appendChild(document.createTextNode(_text));
_list.appendChild(item);
@@ -1111,8 +1241,14 @@
contentEl.appendChild(div);
var list = document.createElement('ol');
- addItemToList(list, 'Press play - Will start playing audio. Status: Running, Duration: 61.333 sec, Position: Current position of audio track');
- addItemToList(list, 'Press pause - Will pause the audio. Status: Paused, Duration: 61.333 sec, Position: Position where track was paused');
+ addItemToList(
+ list,
+ 'Press play - Will start playing audio. Status: Running, Duration: 61.333 sec, Position: Current position of audio track'
+ );
+ addItemToList(
+ list,
+ 'Press pause - Will pause the audio. Status: Paused, Duration: 61.333 sec, Position: Position where track was paused'
+ );
addItemToList(list, 'Press play - Will begin playing where track left off from the pause');
addItemToList(list, 'Press stop - Will stop the audio. Status: Stopped, Duration: 61.333 sec, Position: 0 sec');
addItemToList(list, 'Press play - Will begin playing the audio track from the beginning');
@@ -1128,46 +1264,80 @@
addItemToList(list, 'Press play, let play past 10 seconds then press seek to - should jump back to position 5 sec');
div = document.createElement('div');
- div.setAttribute("style", "background:#B0C4DE;border:1px solid #FFA07A;margin:15px 6px 0px;min-width:295px;max-width:97%;padding:4px 0px 2px 10px;min-height:160px;max-height:200px;overflow:auto");
+ div.setAttribute(
+ 'style',
+ 'background:#B0C4DE;border:1px solid #FFA07A;margin:15px 6px 0px;min-width:295px;max-width:97%;padding:4px 0px 2px 10px;min-height:160px;max-height:200px;overflow:auto'
+ );
div.appendChild(list);
contentEl.appendChild(div);
- //Title Record Audio
+ // Title Record Audio
div = document.createElement('h2');
div.appendChild(document.createTextNode('Record Audio'));
- div.setAttribute("align", "center");
+ div.setAttribute('align', 'center');
contentEl.appendChild(div);
- //Generate and add Record buttons table
+ // Generate and add Record buttons table
contentEl.appendChild(generateTable('recordContent', 3, 3, elementsRecord));
- createActionButton('Record Audio \n 10 sec', function () {
- recordAudio();
- }, 'recordbtn');
- createActionButton('Play', function () {
- playRecording();
- }, 'recordplayBtn');
- createActionButton('Pause', function () {
- pauseAudio();
- }, 'recordpauseBtn');
- createActionButton('Stop', function () {
- stopAudio();
- }, 'recordstopBtn');
+ createActionButton(
+ 'Record Audio \n 10 sec',
+ function () {
+ recordAudio();
+ },
+ 'recordbtn'
+ );
+ createActionButton(
+ 'Play',
+ function () {
+ playRecording();
+ },
+ 'recordplayBtn'
+ );
+ createActionButton(
+ 'Pause',
+ function () {
+ pauseAudio();
+ },
+ 'recordpauseBtn'
+ );
+ createActionButton(
+ 'Stop',
+ function () {
+ stopAudio();
+ },
+ 'recordstopBtn'
+ );
- //testing process and details
+ // testing process and details
div = document.createElement('h4');
div.appendChild(document.createTextNode('Recommended Test Procedure'));
contentEl.appendChild(div);
list = document.createElement('ol');
- addItemToList(list, 'Press Record Audio 10 sec - Will start recording audio for 10 seconds. Status: Running, Position: number of seconds recorded (will stop at 10)');
+ addItemToList(
+ list,
+ 'Press Record Audio 10 sec - Will start recording audio for 10 seconds. Status: Running, Position: number of seconds recorded (will stop at 10)'
+ );
addItemToList(list, 'Status will change to Stopped when finished recording');
- addItemToList(list, 'Press play - Will begin playing the recording. Status: Running, Duration: # of seconds of recording, Position: Current position of recording');
- addItemToList(list, 'Press stop - Will stop playing the recording. Status: Stopped, Duration: # of seconds of recording, Position: 0 sec');
+ addItemToList(
+ list,
+ 'Press play - Will begin playing the recording. Status: Running, Duration: # of seconds of recording, Position: Current position of recording'
+ );
+ addItemToList(
+ list,
+ 'Press stop - Will stop playing the recording. Status: Stopped, Duration: # of seconds of recording, Position: 0 sec'
+ );
addItemToList(list, 'Press play - Will begin playing the recording from the beginning');
- addItemToList(list, 'Press pause - Will pause the playback of the recording. Status: Paused, Duration: # of seconds of recording, Position: Position where recording was paused');
+ addItemToList(
+ list,
+ 'Press pause - Will pause the playback of the recording. Status: Paused, Duration: # of seconds of recording, Position: Position where recording was paused'
+ );
addItemToList(list, 'Press play - Will begin playing the recording from where it was paused');
div = document.createElement('div');
- div.setAttribute("style", "background:#B0C4DE;border:1px solid #FFA07A;margin:15px 6px 0px;min-width:295px;max-width:97%;padding:4px 0px 2px 10px;min-height:160px;max-height:200px;overflow:auto");
+ div.setAttribute(
+ 'style',
+ 'background:#B0C4DE;border:1px solid #FFA07A;margin:15px 6px 0px;min-width:295px;max-width:97%;padding:4px 0px 2px 10px;min-height:160px;max-height:200px;overflow:auto'
+ );
div.appendChild(list);
contentEl.appendChild(div);
};
diff --git a/www/Media.js b/www/Media.js
index 8a3d4ae..80fbf47 100644
--- a/www/Media.js
+++ b/www/Media.js
@@ -17,11 +17,13 @@
* specific language governing permissions and limitations
* under the License.
*
-*/
+ */
-var argscheck = require('cordova/argscheck'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec');
+/* global cordova */
+
+var argscheck = require('cordova/argscheck');
+var utils = require('cordova/utils');
+var exec = require('cordova/exec');
var mediaObjects = {};
@@ -37,7 +39,7 @@
* @param statusCallback The callback to be called when media status has changed.
* statusCallback(int statusCode) - OPTIONAL
*/
-var Media = function(src, successCallback, errorCallback, statusCallback) {
+var Media = function (src, successCallback, errorCallback, statusCallback) {
argscheck.checkArgs('sFFF', 'Media', arguments);
this.id = utils.createUUID();
mediaObjects[this.id] = this;
@@ -47,7 +49,7 @@
this.statusCallback = statusCallback;
this._duration = -1;
this._position = -1;
- exec(null, this.errorCallback, "Media", "create", [this.id, this.src]);
+ exec(null, this.errorCallback, 'Media', 'create', [this.id, this.src]);
};
// Media messages
@@ -62,45 +64,57 @@
Media.MEDIA_RUNNING = 2;
Media.MEDIA_PAUSED = 3;
Media.MEDIA_STOPPED = 4;
-Media.MEDIA_MSG = ["None", "Starting", "Running", "Paused", "Stopped"];
+Media.MEDIA_MSG = ['None', 'Starting', 'Running', 'Paused', 'Stopped'];
// "static" function to return existing objs.
-Media.get = function(id) {
+Media.get = function (id) {
return mediaObjects[id];
};
/**
* Start or resume playing audio file.
*/
-Media.prototype.play = function(options) {
- exec(null, null, "Media", "startPlayingAudio", [this.id, this.src, options]);
+Media.prototype.play = function (options) {
+ exec(null, null, 'Media', 'startPlayingAudio', [this.id, this.src, options]);
};
/**
* Stop playing audio file.
*/
-Media.prototype.stop = function() {
+Media.prototype.stop = function () {
var me = this;
- exec(function() {
- me._position = 0;
- }, this.errorCallback, "Media", "stopPlayingAudio", [this.id]);
+ exec(
+ function () {
+ me._position = 0;
+ },
+ this.errorCallback,
+ 'Media',
+ 'stopPlayingAudio',
+ [this.id]
+ );
};
/**
* Seek or jump to a new time in the track..
*/
-Media.prototype.seekTo = function(milliseconds) {
+Media.prototype.seekTo = function (milliseconds) {
var me = this;
- exec(function(p) {
- me._position = p;
- }, this.errorCallback, "Media", "seekToAudio", [this.id, milliseconds]);
+ exec(
+ function (p) {
+ me._position = p;
+ },
+ this.errorCallback,
+ 'Media',
+ 'seekToAudio',
+ [this.id, milliseconds]
+ );
};
/**
* Pause playing audio file.
*/
-Media.prototype.pause = function() {
- exec(null, this.errorCallback, "Media", "pausePlayingAudio", [this.id]);
+Media.prototype.pause = function () {
+ exec(null, this.errorCallback, 'Media', 'pausePlayingAudio', [this.id]);
};
/**
@@ -109,72 +123,84 @@
*
* @return duration or -1 if not known.
*/
-Media.prototype.getDuration = function() {
+Media.prototype.getDuration = function () {
return this._duration;
};
/**
* Get position of audio.
*/
-Media.prototype.getCurrentPosition = function(success, fail) {
+Media.prototype.getCurrentPosition = function (success, fail) {
var me = this;
- exec(function(p) {
- me._position = p;
- success(p);
- }, fail, "Media", "getCurrentPositionAudio", [this.id]);
+ exec(
+ function (p) {
+ me._position = p;
+ success(p);
+ },
+ fail,
+ 'Media',
+ 'getCurrentPositionAudio',
+ [this.id]
+ );
};
/**
* Start recording audio file.
*/
-Media.prototype.startRecord = function() {
- exec(null, this.errorCallback, "Media", "startRecordingAudio", [this.id, this.src]);
+Media.prototype.startRecord = function () {
+ exec(null, this.errorCallback, 'Media', 'startRecordingAudio', [this.id, this.src]);
};
/**
* Stop recording audio file.
*/
-Media.prototype.stopRecord = function() {
- exec(null, this.errorCallback, "Media", "stopRecordingAudio", [this.id]);
+Media.prototype.stopRecord = function () {
+ exec(null, this.errorCallback, 'Media', 'stopRecordingAudio', [this.id]);
};
/**
* Pause recording audio file.
*/
-Media.prototype.pauseRecord = function() {
- exec(null, this.errorCallback, "Media", "pauseRecordingAudio", [this.id]);
+Media.prototype.pauseRecord = function () {
+ exec(null, this.errorCallback, 'Media', 'pauseRecordingAudio', [this.id]);
};
/**
-* Resume recording audio file.
-*/
-Media.prototype.resumeRecord = function() {
- exec(null, this.errorCallback, "Media", "resumeRecordingAudio", [this.id]);
+ * Resume recording audio file.
+ */
+Media.prototype.resumeRecord = function () {
+ exec(null, this.errorCallback, 'Media', 'resumeRecordingAudio', [this.id]);
};
/**
* Release the resources.
*/
-Media.prototype.release = function() {
+Media.prototype.release = function () {
var me = this;
- exec(function() {
- delete mediaObjects[me.id];
- }, this.errorCallback, "Media", "release", [this.id]);
+ exec(
+ function () {
+ delete mediaObjects[me.id];
+ },
+ this.errorCallback,
+ 'Media',
+ 'release',
+ [this.id]
+ );
};
/**
* Adjust the volume.
*/
-Media.prototype.setVolume = function(volume) {
- exec(null, null, "Media", "setVolume", [this.id, volume]);
+Media.prototype.setVolume = function (volume) {
+ exec(null, null, 'Media', 'setVolume', [this.id, volume]);
};
/**
* Adjust the playback rate.
*/
-Media.prototype.setRate = function(rate) {
- if (cordova.platformId === 'ios'){
- exec(null, null, "Media", "setRate", [this.id, rate]);
+Media.prototype.setRate = function (rate) {
+ if (cordova.platformId === 'ios') {
+ exec(null, null, 'Media', 'setRate', [this.id, rate]);
} else {
console.warn('media.setRate method is currently not supported for', cordova.platformId, 'platform.');
}
@@ -183,10 +209,16 @@
/**
* Get amplitude of audio.
*/
-Media.prototype.getCurrentAmplitude = function(success, fail) {
- exec(function(p) {
- success(p);
- }, fail, "Media", "getCurrentAmplitudeAudio", [this.id]);
+Media.prototype.getCurrentAmplitude = function (success, fail) {
+ exec(
+ function (p) {
+ success(p);
+ },
+ fail,
+ 'Media',
+ 'getCurrentAmplitudeAudio',
+ [this.id]
+ );
};
/**
@@ -197,49 +229,47 @@
* @param msgType The 'type' of update this is
* @param value Use of value is determined by the msgType
*/
-Media.onStatus = function(id, msgType, value) {
-
+Media.onStatus = function (id, msgType, value) {
var media = mediaObjects[id];
if (media) {
- switch(msgType) {
- case Media.MEDIA_STATE :
- if (media.statusCallback) {
- media.statusCallback(value);
+ switch (msgType) {
+ case Media.MEDIA_STATE:
+ if (media.statusCallback) {
+ media.statusCallback(value);
+ }
+ if (value === Media.MEDIA_STOPPED) {
+ if (media.successCallback) {
+ media.successCallback();
}
- if (value == Media.MEDIA_STOPPED) {
- if (media.successCallback) {
- media.successCallback();
- }
- }
- break;
- case Media.MEDIA_DURATION :
- media._duration = value;
- break;
- case Media.MEDIA_ERROR :
- if (media.errorCallback) {
- media.errorCallback(value);
- }
- break;
- case Media.MEDIA_POSITION :
- media._position = Number(value);
- break;
- default :
- if (console.error) {
- console.error("Unhandled Media.onStatus :: " + msgType);
- }
- break;
+ }
+ break;
+ case Media.MEDIA_DURATION:
+ media._duration = value;
+ break;
+ case Media.MEDIA_ERROR:
+ if (media.errorCallback) {
+ media.errorCallback(value);
+ }
+ break;
+ case Media.MEDIA_POSITION:
+ media._position = Number(value);
+ break;
+ default:
+ if (console.error) {
+ console.error('Unhandled Media.onStatus :: ' + msgType);
+ }
+ break;
}
} else if (console.error) {
- console.error("Received Media.onStatus callback for unknown media :: " + id);
+ console.error('Received Media.onStatus callback for unknown media :: ' + id);
}
-
};
module.exports = Media;
-function onMessageFromNative(msg) {
- if (msg.action == 'status') {
+function onMessageFromNative (msg) {
+ if (msg.action === 'status') {
Media.onStatus(msg.status.id, msg.status.msgType, msg.status.value);
} else {
throw new Error('Unknown media action' + msg.action);
@@ -247,13 +277,12 @@
}
if (cordova.platformId === 'android' || cordova.platformId === 'amazon-fireos' || cordova.platformId === 'windowsphone') {
-
var channel = require('cordova/channel');
channel.createSticky('onMediaPluginReady');
channel.waitForInitialization('onMediaPluginReady');
- channel.onCordovaReady.subscribe(function() {
+ channel.onCordovaReady.subscribe(function () {
exec(onMessageFromNative, undefined, 'Media', 'messageChannel', []);
channel.initializationComplete('onMediaPluginReady');
});
diff --git a/www/MediaError.js b/www/MediaError.js
index 38002ac..1117e9e 100644
--- a/www/MediaError.js
+++ b/www/MediaError.js
@@ -17,11 +17,11 @@
* specific language governing permissions and limitations
* under the License.
*
-*/
+ */
/**
* This class contains information about any Media errors.
-*/
+ */
/*
According to :: http://dev.w3.org/html5/spec-author-view/video.html#mediaerror
We should never be creating these objects, we should just implement the interface
@@ -33,20 +33,19 @@
errorCallbackFunction( {'code':3} );
*/
- var _MediaError = window.MediaError;
+var _MediaError = window.MediaError;
-
-if(!_MediaError) {
- window.MediaError = _MediaError = function(code, msg) {
- this.code = (typeof code != 'undefined') ? code : null;
- this.message = msg || ""; // message is NON-standard! do not use!
+if (!_MediaError) {
+ window.MediaError = _MediaError = function (code, msg) {
+ this.code = typeof code !== 'undefined' ? code : null;
+ this.message = msg || ''; // message is NON-standard! do not use!
};
}
-_MediaError.MEDIA_ERR_NONE_ACTIVE = _MediaError.MEDIA_ERR_NONE_ACTIVE || 0;
-_MediaError.MEDIA_ERR_ABORTED = _MediaError.MEDIA_ERR_ABORTED || 1;
-_MediaError.MEDIA_ERR_NETWORK = _MediaError.MEDIA_ERR_NETWORK || 2;
-_MediaError.MEDIA_ERR_DECODE = _MediaError.MEDIA_ERR_DECODE || 3;
+_MediaError.MEDIA_ERR_NONE_ACTIVE = _MediaError.MEDIA_ERR_NONE_ACTIVE || 0;
+_MediaError.MEDIA_ERR_ABORTED = _MediaError.MEDIA_ERR_ABORTED || 1;
+_MediaError.MEDIA_ERR_NETWORK = _MediaError.MEDIA_ERR_NETWORK || 2;
+_MediaError.MEDIA_ERR_DECODE = _MediaError.MEDIA_ERR_DECODE || 3;
_MediaError.MEDIA_ERR_NONE_SUPPORTED = _MediaError.MEDIA_ERR_NONE_SUPPORTED || 4;
// TODO: MediaError.MEDIA_ERR_NONE_SUPPORTED is legacy, the W3 spec now defines it as below.
// as defined by http://dev.w3.org/html5/spec-author-view/video.html#error-codes
diff --git a/www/browser/Media.js b/www/browser/Media.js
index 633e425..6923ef9 100644
--- a/www/browser/Media.js
+++ b/www/browser/Media.js
@@ -17,12 +17,12 @@
* specific language governing permissions and limitations
* under the License.
*
-*/
+ */
/* global MediaError */
-var argscheck = require('cordova/argscheck'),
- utils = require('cordova/utils');
+var argscheck = require('cordova/argscheck');
+var utils = require('cordova/utils');
var mediaObjects = {};
@@ -38,7 +38,7 @@
* @param statusCallback The callback to be called when media status has changed.
* statusCallback(int statusCode) - OPTIONAL
*/
-var Media = function(src, successCallback, errorCallback, statusCallback) {
+var Media = function (src, successCallback, errorCallback, statusCallback) {
argscheck.checkArgs('SFFF', 'Media', arguments);
this.id = utils.createUUID();
mediaObjects[this.id] = this;
@@ -52,14 +52,16 @@
try {
this.node = createNode(this);
} catch (err) {
- Media.onStatus(this.id, Media.MEDIA_ERROR, { code: MediaError.MEDIA_ERR_ABORTED });
+ Media.onStatus(this.id, Media.MEDIA_ERROR, {
+ code: MediaError.MEDIA_ERR_ABORTED
+ });
}
};
/**
* Creates new Audio node and with necessary event listeners attached
* @param {Media} media Media object
- * @return {Audio} Audio element
+ * @return {Audio} Audio element
*/
function createNode (media) {
var node = new Audio();
@@ -78,9 +80,7 @@
node.onerror = function (e) {
// Due to media.spec.15 It should return MediaError for bad filename
- var err = e.target.error.code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED ?
- { code: MediaError.MEDIA_ERR_ABORTED } :
- e.target.error;
+ var err = e.target.error.code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED ? { code: MediaError.MEDIA_ERR_ABORTED } : e.target.error;
Media.onStatus(media.id, Media.MEDIA_ERROR, err);
};
@@ -108,19 +108,20 @@
Media.MEDIA_RUNNING = 2;
Media.MEDIA_PAUSED = 3;
Media.MEDIA_STOPPED = 4;
-Media.MEDIA_MSG = ["None", "Starting", "Running", "Paused", "Stopped"];
+Media.MEDIA_MSG = ['None', 'Starting', 'Running', 'Paused', 'Stopped'];
/**
* Start or resume playing audio file.
*/
-Media.prototype.play = function() {
-
+Media.prototype.play = function () {
// if Media was released, then node will be null and we need to create it again
if (!this.node) {
try {
this.node = createNode(this);
} catch (err) {
- Media.onStatus(this.id, Media.MEDIA_ERROR, { code: MediaError.MEDIA_ERR_ABORTED });
+ Media.onStatus(this.id, Media.MEDIA_ERROR, {
+ code: MediaError.MEDIA_ERR_ABORTED
+ });
}
}
@@ -130,7 +131,7 @@
/**
* Stop playing audio file.
*/
-Media.prototype.stop = function() {
+Media.prototype.stop = function () {
try {
this.pause();
this.seekTo(0);
@@ -143,7 +144,7 @@
/**
* Seek or jump to a new time in the track..
*/
-Media.prototype.seekTo = function(milliseconds) {
+Media.prototype.seekTo = function (milliseconds) {
try {
this.node.currentTime = milliseconds / 1000;
} catch (err) {
@@ -154,13 +155,14 @@
/**
* Pause playing audio file.
*/
-Media.prototype.pause = function() {
+Media.prototype.pause = function () {
try {
this.node.pause();
Media.onStatus(this.id, Media.MEDIA_STATE, Media.MEDIA_PAUSED);
} catch (err) {
Media.onStatus(this.id, Media.MEDIA_ERROR, err);
- }};
+ }
+};
/**
* Get duration of an audio file.
@@ -168,14 +170,14 @@
*
* @return duration or -1 if not known.
*/
-Media.prototype.getDuration = function() {
+Media.prototype.getDuration = function () {
return this._duration;
};
/**
* Get position of audio.
*/
-Media.prototype.getCurrentPosition = function(success, fail) {
+Media.prototype.getCurrentPosition = function (success, fail) {
try {
var p = this.node.currentTime;
Media.onStatus(this.id, Media.MEDIA_POSITION, p);
@@ -188,59 +190,60 @@
/**
* Start recording audio file.
*/
-Media.prototype.startRecord = function() {
- Media.onStatus(this.id, Media.MEDIA_ERROR, "Not supported");
+Media.prototype.startRecord = function () {
+ Media.onStatus(this.id, Media.MEDIA_ERROR, 'Not supported');
};
/**
* Stop recording audio file.
*/
-Media.prototype.stopRecord = function() {
- Media.onStatus(this.id, Media.MEDIA_ERROR, "Not supported");
+Media.prototype.stopRecord = function () {
+ Media.onStatus(this.id, Media.MEDIA_ERROR, 'Not supported');
};
/**
* Pause recording audio file.
*/
-Media.prototype.pauseRecord = function() {
- Media.onStatus(this.id, Media.MEDIA_ERROR, "Not supported");
+Media.prototype.pauseRecord = function () {
+ Media.onStatus(this.id, Media.MEDIA_ERROR, 'Not supported');
};
/**
* Returns the current amplitude of the current recording.
*/
-Media.prototype.getCurrentAmplitude = function() {
- Media.onStatus(this.id, Media.MEDIA_ERROR, "Not supported");
+Media.prototype.getCurrentAmplitude = function () {
+ Media.onStatus(this.id, Media.MEDIA_ERROR, 'Not supported');
};
/**
* Resume recording an audio file.
*/
-Media.prototype.resumeRecord = function() {
- Media.onStatus(this.id, Media.MEDIA_ERROR, "Not supported");
+Media.prototype.resumeRecord = function () {
+ Media.onStatus(this.id, Media.MEDIA_ERROR, 'Not supported');
};
/**
* Set rate of an autio file.
*/
-Media.prototype.setRate = function() {
- Media.onStatus(this.id, Media.MEDIA_ERROR, "Not supported");
+Media.prototype.setRate = function () {
+ Media.onStatus(this.id, Media.MEDIA_ERROR, 'Not supported');
};
/**
* Release the resources.
*/
-Media.prototype.release = function() {
+Media.prototype.release = function () {
try {
delete this.node;
} catch (err) {
Media.onStatus(this.id, Media.MEDIA_ERROR, err);
- }};
+ }
+};
/**
* Adjust the volume.
*/
-Media.prototype.setVolume = function(volume) {
+Media.prototype.setVolume = function (volume) {
this.node.volume = volume;
};
@@ -252,41 +255,40 @@
* @param msgType The 'type' of update this is
* @param value Use of value is determined by the msgType
*/
-Media.onStatus = function(id, msgType, value) {
-
+Media.onStatus = function (id, msgType, value) {
var media = mediaObjects[id];
if (media) {
- switch(msgType) {
- case Media.MEDIA_STATE :
- if (media.statusCallback) {
- media.statusCallback(value);
+ switch (msgType) {
+ case Media.MEDIA_STATE:
+ if (media.statusCallback) {
+ media.statusCallback(value);
+ }
+ if (value === Media.MEDIA_STOPPED) {
+ if (media.successCallback) {
+ media.successCallback();
}
- if (value === Media.MEDIA_STOPPED) {
- if (media.successCallback) {
- media.successCallback();
- }
- }
- break;
- case Media.MEDIA_DURATION :
- media._duration = value;
- break;
- case Media.MEDIA_ERROR :
- if (media.errorCallback) {
- media.errorCallback(value);
- }
- break;
- case Media.MEDIA_POSITION :
- media._position = Number(value);
- break;
- default :
- if (console.error) {
- console.error("Unhandled Media.onStatus :: " + msgType);
- }
- break;
+ }
+ break;
+ case Media.MEDIA_DURATION:
+ media._duration = value;
+ break;
+ case Media.MEDIA_ERROR:
+ if (media.errorCallback) {
+ media.errorCallback(value);
+ }
+ break;
+ case Media.MEDIA_POSITION:
+ media._position = Number(value);
+ break;
+ default:
+ if (console.error) {
+ console.error('Unhandled Media.onStatus :: ' + msgType);
+ }
+ break;
}
} else if (console.error) {
- console.error("Received Media.onStatus callback for unknown media :: " + id);
+ console.error('Received Media.onStatus callback for unknown media :: ' + id);
}
};