1 /* vi: set et sw=4 ts=4 si: */
3 * Copyright (c) 2012, Intel Corporation.
5 * This program is licensed under the terms and conditions of the
6 * Apache License, version 2.0. The full text of the Apache License is at
7 * http://www.apache.org/licenses/LICENSE-2.0
12 var musicbrainz = function() {
14 _baseUrl: 'http://musicbrainz.org/ws/2/',
21 /* Internal methods to perform XHR requests. */
23 _get: function(request) {
24 if (request.url in _priv._url_cache) {
25 request.deferred.resolve(_priv._url_cache[request.url]);
27 $.getJSON(request.url)
28 .done(function(data, statusText, xhr) {
29 _priv._url_cache[request.url] = data;
30 request.deferred.resolve(data);
32 .error(function(xhr) {
33 if (xhr.status === 503) {
34 _priv._enqueue(request); // put it back in the queue
39 return request.deferred.promise();
43 /* Internal methods for the handling of the request queue */
45 _startQueue: function() {
46 if (_priv._interval === undefined) {
47 _priv._interval = setInterval(function() {
53 _stopQueue: function() {
54 clearInterval(_priv._interval);
55 _priv._interval = undefined;
58 _enqueue: function(request) {
59 if ($.inArray(request.url, _priv._queue) < 0) {
60 _priv._queue.push(request);
64 _dequeue: function() {
65 var request = _priv._queue.shift();
66 if (request !== undefined) {
75 name: function() { return "MusicBrainz"; },
77 getArtist: function(q) {
78 var lookup_url = _priv._baseUrl + 'artist/?query="' + q +
80 lookup_deferred = new $.Deferred(),
81 returned_deferred = new $.Deferred();
83 if (q !== undefined) {
84 if (_priv._interval === undefined) {
88 _priv._enqueue({url: lookup_url, deferred: lookup_deferred});
89 lookup_deferred.done(function(data) {
91 var artist_url = _priv._baseUrl + 'artist/' +
92 data.artist[0].id + '?' + _priv._fmtArg,
93 artist_deferred = new $.Deferred();
95 _priv._get({url: artist_url, deferred: artist_deferred});
96 artist_deferred.done(function(data) {
97 returned_deferred.resolve(data);
100 returned_deferred.reject();
104 returned_deferred.reject();
107 return returned_deferred.promise();
112 win.MusicBrainz = new musicbrainz();