(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); }); })();