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

98 lines
2.5 KiB
JavaScript

function searchRadio() {
var self = this;
this.artists = new Array();
this.running = false;
this.sending = 0;
this.artistindex = 0;
var populatetimer = null;
var trackfinder = new faveFinder(true);
trackfinder.setCheckDb(false);
function searchArtist(name) {
debug.trace("SEARCHRADIO ARTIST","Creating",name);
var tracks = null;
var myself = this;
this.populated = false;
this.populate = function() {
if (!myself.populated) {
debug.log("SEARCHRADIO ARTIST","Getting tracks for",name);
if (prefs.player_backend == "mopidy") {
trackfinder.setPriorities($("#radiodomains").makeDomainChooser("getSelection"));
}
trackfinder.findThisOne(
{
title: null,
artist: name,
duration: 0,
albumartist: name,
date: 0
},
myself.gotTracks
);
myself.populated = true;
}
}
this.gotTracks = function(data) {
debug.trace("SEARCHRADIO ARTIST","Got Tracks",data);
tracks = new Array();
for (var j in data) {
if (data[j].uri) {
tracks.push({type: 'uri', name: data[j].uri});
}
}
tracks = tracks.sort(randomsort);
debug.log("SEARCHRADIO ARTIST","Got",tracks.length,"tracks for",name);
if (self.sending > 0) {
myself.sendATrack();
}
}
this.sendATrack = function() {
if (myself.populated) {
var sent = false;
while (self.running && tracks && tracks.length > 0) {
var t = tracks.shift();
debug.log("SEARCHRADIO ARTIST",name,"is sending a track");
sent = true;
self.sending--;
player.controller.addTracks([t], playlist.radioManager.playbackStartPos(), null);
break;
}
if (!sent) {
debug.shout("SEARCHRADIO ARTIST",name,"doesn't have any tracks");
// For playlist to repopulate to make someone else have a go
playlist.repopulate();
}
} else {
myself.populate();
}
}
this.getName = function() {
return name;
}
}
this.newArtist = function(name) {
ac: {
for (var j in self.artists) {
if (self.artists[j].getName == name) {
debug.mark("SEARCHRADIO","Ignoring artist",name,"because it already exists");
break ac;
}
}
self.artists.push(new searchArtist(name));
}
}
this.startSending = function() {
if (self.sending > 0) {
self.artistindex = Math.floor(Math.random() * self.artists.length);
self.artists[self.artistindex].sendATrack();
}
}
}