I wrote a Cordova plugin for an app that I'm working on, and now I'm trying to write an Angular definition to wrap my plugin. So far, I've followed the model in ng-cordova.js:
angular.module('ngCordova.plugins.audioPlugin', [])
.factory('$audioPlugin', ['$q', function($q) {
return {
init: function(sessionKey) {
var q = $q.defer();
AudioPlugin.init(sessionKey, function(response) {
q.resolve(response);
}, function (error) {
q.reject(error);
});
return q.promise;
},
playAudio: function(contentId) {
var q = $q.defer();
AudioPlugin.playAudio(contentId, function(response) {
q.resolve(response);
}, function (error) {
q.reject(error);
});
return q.promise;
},
seekChapter: function(contentId, partIndex, chapterIndex) {
var q = $q.defer();
AudioPlugin.seekChapter(contentId, partIndex, chapterIndex function(response) {
q.resolve(response);
}, function (error) {
q.reject(error);
});
return q.promise;
},
getCurrentPosition: function() {
var q = $q.defer();
AudioPlugin.getCurrentPosition(function(response) {
q.resolve(response);
}, function (error) {
q.reject(error);
});
return q.promise;
},
getCurrentChapter: function() {
var q = $q.defer();
AudioPlugin.getCurrentChapter(function(response) {
q.resolve(response);
}, function (error) {
q.reject(error);
});
return q.promise;
}
}
}]);
I'm looking for feedback on how to structure this wrapper. I'm a little unhappy with the amount of repetition involved to convert the callback-based architecture in the Cordova plugin to the angular promise-based style.