158 lines
4.5 KiB
JavaScript
158 lines
4.5 KiB
JavaScript
var discogs = function() {
|
|
|
|
var baseURL = 'https://api.discogs.com/';
|
|
var queue = new Array();
|
|
var throttle = null;
|
|
|
|
return {
|
|
|
|
request: function(reqid, data, success, fail) {
|
|
|
|
queue.push( {flag: false, reqid: reqid, data: data, success: success, fail: fail } );
|
|
debug.debug("DISCOGS","New request",data.url,"throttle is",throttle,"length is",queue.length);
|
|
if (throttle == null && queue.length == 1) {
|
|
discogs.getrequest();
|
|
}
|
|
|
|
},
|
|
|
|
getrequest: function() {
|
|
|
|
var req = queue[0];
|
|
clearTimeout(throttle);
|
|
|
|
if (req !== undefined) {
|
|
if (req.flag) {
|
|
debug.error("DISCOGS","Request just pulled from queue is already being handled",req.data.url);
|
|
return;
|
|
}
|
|
queue[0].flag = true;
|
|
debug.debug("DISCOGS","Taking next request from queue",req.data);
|
|
var getit = $.ajax({
|
|
method: 'POST',
|
|
url: "browser/backends/getdidata.php",
|
|
data: req.data,
|
|
dataType: "json"
|
|
})
|
|
.done(function(data) {
|
|
var c = getit.getResponseHeader('Pragma');
|
|
debug.debug("DISCOGS", "Request Success",c,data);
|
|
if (c == "From Cache") {
|
|
throttle = setTimeout(discogs.getrequest, 100);
|
|
} else {
|
|
throttle = setTimeout(discogs.getrequest, 1500);
|
|
}
|
|
req = queue.shift();
|
|
if (data === null) {
|
|
data = {error: language.gettext("discogs_error")}
|
|
} else if (!data.error) {
|
|
// info_discogs.js was written to accept jsonp data passed back from $.jsonp
|
|
// However as Discogs now seem to be refusing to respond to those requests
|
|
// we're using a php script to get it instead. So here we bodge the response
|
|
// into the form that info_discogs.js is expecting.
|
|
data = {data: data};
|
|
}
|
|
if (req.reqid != '') {
|
|
data.id = req.reqid;
|
|
}
|
|
if (data.error) {
|
|
req.fail(data);
|
|
} else {
|
|
req.success(data);
|
|
}
|
|
})
|
|
.fail(function(xhr,status,err) {
|
|
throttle = setTimeout(discogs.getrequest, 1500);
|
|
req = queue.shift();
|
|
debug.warn("DISCOGS","Request failed",req,xhr);
|
|
data = {error: language.gettext("discogs_error") + ' ('+xhr.status+' '+err+')'};
|
|
if (req.reqid != '') {
|
|
data.id = req.reqid;
|
|
}
|
|
req.fail(data);
|
|
});
|
|
} else {
|
|
throttle = null;
|
|
}
|
|
},
|
|
|
|
artist: {
|
|
|
|
search: function(name, success, fail) {
|
|
var data = {
|
|
url: baseURL+'database/search',
|
|
type: 'artist',
|
|
q: name
|
|
}
|
|
discogs.request('', data, success, fail);
|
|
},
|
|
|
|
getInfo: function(reqid, id, success, fail) {
|
|
var data = {url: baseURL+'artists/'+id};
|
|
discogs.request(reqid, data, success, fail);
|
|
},
|
|
|
|
getReleases: function(name, page, reqid, success, fail) {
|
|
debug.log("DISCOGS","Get Artist Releases",name,page);
|
|
var data = {
|
|
url: baseURL+'artists/'+name+'/releases',
|
|
per_page: 25,
|
|
page: page
|
|
};
|
|
discogs.request(reqid, data, success, fail);
|
|
}
|
|
},
|
|
|
|
album: {
|
|
|
|
getInfo: function(reqid, id, success, fail) {
|
|
// NOTE id must be either releases/id or masters/id
|
|
var data = {url: baseURL+id};
|
|
discogs.request(reqid, data, success, fail);
|
|
},
|
|
|
|
search: function(artist, album, success, fail) {
|
|
var data = {
|
|
url: baseURL+'database/search',
|
|
type: 'release',
|
|
artist: artist,
|
|
release_title: album
|
|
};
|
|
discogs.request('', data, success, fail);
|
|
}
|
|
|
|
},
|
|
|
|
track: {
|
|
|
|
getInfo: function(reqid, id, success, fail) {
|
|
// NOTE id must be either releases/id or masters/id
|
|
var data = {url: baseURL+id};
|
|
discogs.request(reqid, data, success, fail);
|
|
},
|
|
|
|
search: function(artist, track, success, fail) {
|
|
var data = {
|
|
url: baseURL+'database/search',
|
|
type: 'release',
|
|
artist: artist,
|
|
track: track
|
|
};
|
|
discogs.request('', data, success, fail);
|
|
}
|
|
|
|
},
|
|
|
|
label: {
|
|
|
|
getInfo: function(reqid, id, success, fail) {
|
|
// NOTE id must be either releases/id or masters/id
|
|
var data = {url: baseURL+'labels/'+id};
|
|
discogs.request(reqid, data, success, fail);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}();
|