astrXbian/www/jukebox/radios/code/lastfmartistradio.js

173 lines
4.0 KiB
JavaScript

var lastFMArtistRadio = function() {
var populating = false;
var tuner;
var fartists;
var currpage = 1;
var totalpages = 1;
var started;
var minplays;
var param = null;
function getNextSimilars() {
var art = fartists.shift();
if (art) {
lastfm.artist.getSimilar(
{artist: art},
lastFMArtistRadio.gotASimilar,
lastFMArtistRadio.gotNoSimilar
);
}
}
function getTopArtists(page) {
var period = null;
period = param;
debug.log("LASTFM MIX RADIO","Using parameter for period",period);
switch (period) {
case 'overall':
minplays = 7;
break
case '12month':
minplays = 5;
break;
case '6month':
minplays = 4;
break;
case '3month':
minplays = 3;
break;
case '1month':
minplays = 2;
break;
default:
minplays = 1;
break;
}
lastfm.user.getTopArtists(
{period: period,
page: page},
lastFMArtistRadio.gotTopArtists,
lastFMArtistRadio.lfmerror
);
}
return {
populate: function(p, numtracks) {
if (!populating) {
param = p;
if (typeof(searchRadio) == 'undefined') {
debug.log("LASTFM MIX RADIO","Loading Search Radio Tuner");
$.getScript('radios/code/searchRadio.js?version='+rompr_version,function() {
lastFMArtistRadio.actuallyGo(numtracks);
});
} else {
lastFMArtistRadio.actuallyGo(numtracks);
}
} else {
debug.log("LASTFM MIX RADIO","RePopulating",numtracks);
tuner.sending += (numtracks - tuner.sending);
tuner.startSending();
}
},
actuallyGo: function(numtracks) {
debug.log("LASTFM MIX RADIO","And we're off");
tuner = new searchRadio();
tuner.sending = numtracks;
tuner.running = true;
tuner.artistindex = 0;
fartists = new Array();
populating = true;
started = false;
getTopArtists(1);
},
lfmerror: function(data) {
debug.warn("LASTFM MIX RADIO","Last.FM Error",data);
if (currpage < totalpages) {
getTopArtists(currpage+1);
}
},
modeHtml: function(p) {
return '<i class="icon-lastfm-1 modeimg"/></i><span class="modespan">'+language.gettext('label_lastfm_dip_'+p)+'</span>';
},
stop: function() {
populating = false;
param = null;
if (tuner) {
tuner.sending = 0;
tuner = null;
}
},
gotTopArtists: function(data) {
if (data.topartists.artist) {
if (tuner) {
currpage = parseInt(data.topartists['@attr'].page);
totalpages = parseInt(data.topartists['@attr'].totalPages);
debug.mark("LASTFM MIX RADIO","Got Page",currpage,"Of",totalpages,"Of Top Artists");
for (var i in data.topartists.artist) {
if (data.topartists.artist[i].playcount >= minplays) {
fartists.push(data.topartists.artist[i].name);
tuner.newArtist(data.topartists.artist[i].name);
} else {
debug.mark("LASTFM MIX RADIO","Ignoring Artist",data.topartists.artist[i].name,"because it only has",data.topartists.artist[i].playcount,"plays");
}
}
if (populating) {
if (currpage < totalpages) {
getTopArtists(currpage+1);
}
if (!started) {
started = true;
tuner.startSending();
getNextSimilars();
}
}
}
} else {
if (currpage == 1) {
infobar.error(language.gettext('lastfm_error'));
playlist.radioManager.stop(null);
}
}
},
gotASimilar: function(data) {
if (tuner) {
if (data.similarartists) {
debug.mark("LASTFM MIX RADIO","Got Similar Artists For",data.similarartists['@attr'].artist);
if (data.similarartists.artist) {
for (var i in data.similarartists.artist) {
tuner.newArtist(data.similarartists.artist[i].name);
}
}
}
if (populating) {
getNextSimilars();
}
}
},
gotNoSimilar: function() {
if (populating) {
getNextSimilars();
}
}
}
}();
playlist.radioManager.register("lastFMArtistRadio",lastFMArtistRadio,null);