jille_Jr icon

[Dubtrack] [Raw] Search in playlists

jille_Jr | PRO | 03/01/16 10:11:07 AM UTC | 0 ⭐ | 407 👁️ | Never ⏰ | []
JavaScript |

2.64 KB

|

None

|

0 👍

/

0 👎

(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