(function() {
if (Dubtrack.user.playlist == void 4) {
alert("Please open the playlists at least once!");
return;
}
var input = window.prompt("Enter your search terms", "needle");
if (input == void 4 || input.length == 0) {
alert("Invalid search terms.");
return;
}
var keywords = input.toLowerCase().split(/[^a-zA-Z0-9]/);
var matches = [];
var fetches = 0;
fetch = function(name, pl, callback){
var url = "https://api.dubtrack.fm/playlist/" + pl._id + "/songs";
fetches++;
if (typeof console.time == 'function') {
console.time("[fetch] " + name);
}
$.getJSON(url, function(data, status){
fetches--;
var ref$, code, message;
if (typeof console.timeEnd == 'function') {
console.timeEnd("[fetch] " + name);
}
if (status !== 'success' || data.code !== 200) {
ref$ = data, code = ref$.code, message = ref$.message, data = ref$.data;
errorHandler("Error #" + code + " fetching " + name + ": " + message + ". " + data.message + ".");
} else {
callback(pl, data.data);
}
});
};
search = function(haystack) {
if (haystack == void 4) return false;
for (var i = 0; i < keywords.length; i++) {
if (haystack.toLowerCase().indexOf(keywords[i]) == -1)
return false;
}
return true;
}
writeout = function() {
var str = "";
if (matches.length == 0) {
str = "Found no matches on searching \"" + input + "\"! :(";
} else {
str = "Found " + matches.length + " matches!\n\n";
for (var i = 0; i < matches.length; i++) {
var song = matches[i];
str += "[" + song.playlist + "] " + song.name + "\n";
}
}
alert(str);
}
callback = function(pl, data) {
try {
// Loop all songs
for (var i = 0; i < data.length; i++) {
var song = data[i]._song;
// Check for matches
if (search(song.name) // song name
|| search(song.description) // song desc
|| search(song.genre) // song genre
|| search(song.songArtist)) // song artist/uploader
{
song.playlist = pl.name;
matches.push(song);
}
}
} catch (err) {
console.log("couldn't parse song data (" + err + ")");
}
if (fetches == 0) writeout();
}
// Loop all playlists
Dubtrack.user.playlist.forEach(function(value, index) {
// Fetch the song list
var pl = value.attributes;
fetch("songs (" + pl.name + ")", pl, callback);
});
})();
Comments