1 /* vi: set et sw=4 ts=4 si: */
3 var library = function() {
13 resolveBackend: MusicBrainz,
15 errorCB: function(error) {
16 console.log("HoofbeatsLibrary.errorCB: " + error.name);
17 this.deferred.reject();
18 throw new Error(error.name);
21 findCB: function(items) {
22 items.forEach(function(item, index, items) {
23 _priv.mediaItems.push(item);
24 if (_priv.resolveBackend !== undefined) {
25 _priv.resolveBackend.getArtist(item.artists[0]).done(
28 "HoofbeatsLibrary.findCB: " +
29 "item resolved on " + _priv.resolveBackend.name() +
36 if (items.length == _priv.fetchCount && !_priv.oneTime) {
37 // There *might* be more items.
38 _priv.fetchOffset += _priv.fetchCount;
40 _priv.findCB.bind(this),
41 _priv.errorCB.bind(this),
48 _priv.deferred.resolve();
56 initialize: function() {
57 if (_priv.initialized)
60 if (win.tizen === undefined) {
61 throw Error("You need the Tizen web API to run Hoofbeats.");
64 _priv.audioTypeFilter = new tizen.AttributeFilter(
65 "type", "EXACTLY", "AUDIO");
66 _priv.videoTypeFilter = new tizen.AttributeFilter(
67 "type", "EXACTLY", "VIDEO");
68 _priv.typeFilter = new tizen.CompositeFilter(
69 "UNION", [_priv.audioTypeFilter, _priv.videoTypeFilter]);
72 scan: function(options) {
73 var opts = options || {};
74 if (opts.resolveBackend !== MusicBrainz) {
75 _priv.resolveBackend = opts.resolveBackend;
78 _priv.deferred = new $.Deferred();
81 _priv.mediaItems = [];
82 _priv.fetchOffset = 0;
84 if (opts.count !== undefined) {
85 _priv.fetchCount = opts.count;
90 _priv.findCB.bind(this),
91 _priv.errorCB.bind(this),
98 return _priv.deferred.promise();
104 _priv.mediaItems.forEach(function(item, index, items) {
112 // Some simple getters
113 getInitialized: function() { return _priv.initialized; },
114 getItems: function() { return _priv.mediaItems; },
115 getSize: function() { return _priv.mediaItems.length; },
116 getResolve: function() {return _priv.resolveBackend !== undefined; }
120 win.HoofbeatsLibrary = library;