Advertisement
jille_Jr

[Dubtrack] [Raw] Search in playlists

Mar 1st, 2016
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function() {
  2. if (Dubtrack.user.playlist == void 4) {
  3.     alert("Please open the playlists at least once!");
  4.     return;
  5. }
  6.  
  7. var input = window.prompt("Enter your search terms", "needle");
  8.  
  9. if (input == void 4 || input.length == 0) {
  10.     alert("Invalid search terms.");
  11.     return;
  12. }
  13.  
  14. var keywords = input.toLowerCase().split(/[^a-zA-Z0-9]/);
  15. var matches = [];
  16. var fetches = 0;
  17.  
  18. fetch = function(name, pl, callback){
  19.     var url = "https://api.dubtrack.fm/playlist/" + pl._id + "/songs";
  20.     fetches++;
  21.     if (typeof console.time == 'function') {
  22.         console.time("[fetch] " + name);
  23.     }
  24.     $.getJSON(url, function(data, status){
  25.         fetches--;
  26.         var ref$, code, message;
  27.         if (typeof console.timeEnd == 'function') {
  28.             console.timeEnd("[fetch] " + name);
  29.         }
  30.         if (status !== 'success' || data.code !== 200) {
  31.             ref$ = data, code = ref$.code, message = ref$.message, data = ref$.data;
  32.             errorHandler("Error #" + code + " fetching " + name + ": " + message + ". " + data.message + ".");
  33.         } else {
  34.             callback(pl, data.data);
  35.         }
  36.     });
  37. };
  38.  
  39. search = function(haystack) {
  40.     if (haystack == void 4) return false;
  41.     for (var i = 0; i < keywords.length; i++) {
  42.         if (haystack.toLowerCase().indexOf(keywords[i]) == -1)
  43.             return false;
  44.     }
  45.     return true;
  46. }
  47.  
  48. writeout = function() {
  49.     var str = "";
  50.     if (matches.length == 0) {
  51.         str = "Found no matches on searching \"" + input + "\"! :(";
  52.     } else {
  53.         str = "Found " + matches.length + " matches!\n\n";
  54.         for (var i = 0; i < matches.length; i++) {
  55.             var song = matches[i];
  56.             str += "[" + song.playlist + "] " + song.name + "\n";
  57.         }
  58.     }
  59.  
  60.     alert(str);
  61. }
  62.  
  63. callback = function(pl, data) {
  64.     try {
  65.         // Loop all songs
  66.         for (var i = 0; i < data.length; i++) {
  67.             var song = data[i]._song;
  68.             // Check for matches
  69.             if (search(song.name) // song name
  70.             || search(song.description) // song desc
  71.             || search(song.genre) // song genre
  72.             || search(song.songArtist)) // song artist/uploader
  73.             {
  74.                 song.playlist = pl.name;
  75.                 matches.push(song);
  76.             }
  77.         }
  78.     } catch (err) {
  79.         console.log("couldn't parse song data (" + err + ")");
  80.     }
  81.    
  82.     if (fetches == 0) writeout();
  83. }
  84.  
  85. // Loop all playlists
  86. Dubtrack.user.playlist.forEach(function(value, index) {
  87.     // Fetch the song list
  88.     var pl = value.attributes;
  89.     fetch("songs (" + pl.name + ")", pl, callback);
  90. });
  91.  
  92. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement