98 lines
2.5 KiB
JavaScript
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();
|
||
|
}
|
||
|
}
|
||
|
}
|