").parent().html()),$("#main-row").append("
"),$("#player").removeClass("player_bottom"),$("#main-row").removeClass("frontpage_modified_heights"),$("#main_section_frontpage").remove(),$("#closePlayer").remove(),$("#player_bottom_overlay").remove()}$("#search").attr("placeholder","Find song on YouTube..."),$(".page-footer").addClass("padding-bottom-novideo"),1==$("#alreadychannel").length?e():(Te=!0,e()),0===$("#alreadyfp").length&&$("head").append("
")}})}};String.prototype.capitalizeFirstLetter=function(){return this.charAt(0).toUpperCase()+this.slice(1)};var Ne={loaded:!0,before_load:"",after_load:"",ytplayer:"",stopInterval:!1,youtube_listener:function(e){if(Ne.loaded=!1,"true"===localStorage.debug){console.log("--------youtube_listener--------"),console.log("Received: "),console.log(e),console.log("paused variable: "+G),console.log("mobile_beginning variable: "+ue);try{console.log("getVideoUrl(): "+Ne.ytplayer.getVideoUrl().split("v=")[1])}catch(e){}console.log("video_id variable: "+be),console.log("---------------------------------")}if(0===e.length){document.getElementById("song-title").innerHTML="Empty channel. Add some songs!",$("#player_overlay").height($("#player").height()),window.MSStream||$("#player_overlay").toggleClass("hide");try{Ne.ytplayer.stopVideo()}catch(e){}}else{void 0===Ce?Ce=e[0][0].id:Ce!=be&&(Ce=be),be=e[0][0].id,R=e[1][0],time=e[2],_e=time-R.startTime,ke=e[0][0].title,duration=e[0][0].duration,ue&&T.mobilecheck()&&0===_e&&(_e=1);try{he[0].id==be&&B.song_change(he[0].added),De.fetchYoutubeSuggests(be)}catch(e){}if(Ne.getTitle(ke,J),Ne.setBGimage(be),F&&!window.MSStream)try{Ne.ytplayer.getVideoUrl().split("v=")[1]!=be&&(Ne.ytplayer.loadVideoById(be),Ne.notifyUser(be,ke),Ne.ytplayer.seekTo(_e),G&&Ne.ytplayer.pauseVideo()),G||(ue||Ne.ytplayer.playVideo(),ne||Ne.durationSetter()),(Ne.ytplayer.getDuration()>_e||0===Ne.ytplayer.getDuration())&&Ne.ytplayer.seekTo(_e),Ne.after_load=be,Ne.loaded||setTimeout(function(){Ne.loaded=!0},500)}catch(e){ne||Ne.durationSetter()}else Ne.getTitle(ke,J)}},onPlayerStateChange:function(e){if("true"===localStorage.debug){console.log("-------onPlayerStateChange------"),console.log("New state\nState: "),console.log(e);try{console.log("Duration: "+Ne.ytplayer.getDuration(),"Current time: "+Ne.ytplayer.getCurrentTime()),console.log("getVideoUrl(): "+Ne.ytplayer.getVideoUrl().split("v=")[1])}catch(e){}console.log("video_id variable: "+be),console.log("---------------------------------")}switch(e.data){case-1:break;case 0:W=!1,G=!1,Se.emit("end",{id:be,channel:L.toLowerCase()});break;case 1:W=!0,beginning&&T.mobilecheck()&&(Ne.ytplayer.pauseVideo(),beginning=!1,ue=!1),te||"/"==window.location.pathname||T.addClass("#player_overlay","hide"),"/"!=window.location.pathname&&(1==document.getElementById("play").className.split(" ").length&&$("#play").toggleClass("hide"),2==document.getElementById("pause").className.split(" ").length&&$("#pause").toggleClass("hide")),G&&(Se.emit("pos",{channel:L.toLowerCase()}),G=!1);break;case 2:G=!0,"/"!=window.location.pathname&&ze.play_pause_show(),ue=!0;break;case 3:}},getTitle:function(e,t){var o=t>1?"viewers":"viewer",n=decodeURIComponent(e);if("/"!=window.location.pathname){var a=document.getElementById("song-title"),i=document.getElementById("viewers");a.innerHTML=n,i.innerHTML=t+" "+o,a.title=n+" • "+t+" "+o}document.title=n+" • Zöff / "+L},errorHandler:function(e){5==e.data||100==e.data||101==e.data||150==e.data?(curr_playing=Ne.ytplayer.getVideoUrl().replace("https://www.youtube.com/watch?v=",""),Se.emit("skip",{error:e.data,id:be,pass:H,channel:L.toLowerCase})):void 0!==be&&Ne.ytplayer.loadVideoById(be)},onPlayerReady:function(e){$("#channel-load").css("display","none");try{beginning=!0,F=!0,window.MSStream||($("#player").css("opacity","1"),$("#controls").css("opacity","1"),$(".playlist").css("opacity","1"),Ne.ytplayer.loadVideoById(be),oe&&!T.mobilecheck()&&Ne.ytplayer.playVideo(),ne||Ne.durationSetter(),te?setTimeout(function(){Ne.ytplayer.seekTo(_e),oe||(Ne.ytplayer.pauseVideo(),ze.play_pause_show())},1e3):Ne.ytplayer.seekTo(_e)),Ne.readyLooks(),ze.initYoutubeControls(Ne.ytplayer),ze.initSlider(),Ne.ytplayer.setVolume(I.get_volume()),$(".video-container").removeClass("no-opacity")}catch(e){}},readyLooks:function(){Ne.setBGimage(be)},setBGimage:function(e){if(void 0!==e&&!te){var t=new Image;t.onload=function(){var e=new ColorThief,o=e.getColor(t);"/"!=window.location.pathname&&(document.getElementsByTagName("body")[0].style.backgroundColor=T.rgbToHsl(o,!0),$("meta[name=theme-color]").attr("content",T.rgbToHex(o[0],o[1],o[2])))},t.crossOrigin="Anonymous",t.src="https://zoff.no:8080/https://img.youtube.com/vi/"+e+"/mqdefault.jpg"}},set_width:function(e){$(".video-container").width(e)},notifyUser:function(e,t){if(t=t.replace(/\\\'/g,"'").replace(/"/g,"'").replace(/&/g,"&"),"granted"===Notification.permission&&document.hidden){var o=new Notification("Now Playing",{body:t,icon:"http://i.ytimg.com/vi/"+e+"/mqdefault.jpg",iconUrl:"http://i.ytimg.com/vi/"+e+"/mqdefault.jpg"});o.onclick=function(e){window.focus(),this.cancel()},setTimeout(function(){o.close()},5e3)}},setup_all_listeners:function(){n(),o(),s(),l(),c()},onYouTubeIframeAPIReady:function(){Ne.ytplayer=new YT.Player("player",{videoId:be,playerVars:{rel:"0",wmode:"transparent",controls:"0",iv_load_policy:"3",theme:"light",color:"white",showinfo:0},events:{onReady:Ne.onPlayerReady,onStateChange:Ne.onPlayerStateChange,onError:Ne.errorHandler}})},durationSetter:function(){if(void 0!==duration)try{Ne.stopInterval||(ne=!0),dMinutes=Math.floor(duration/60),dSeconds=duration-60*dMinutes,currDurr=void 0!==Ne.ytplayer.getCurrentTime()?Math.floor(Ne.ytplayer.getCurrentTime()):_e,currDurr>duration&&(currDurr=duration),minutes=Math.floor(currDurr/60),seconds=currDurr-60*minutes,document.getElementById("duration").innerHTML=T.pad(minutes)+":"+T.pad(seconds)+"
/ "+T.pad(dMinutes)+":"+T.pad(dSeconds),per=100/duration*currDurr,per>=100?per=100:0===duration&&(per=0),$("#bar").width(per+"%")}catch(e){}Ne.stopInterval||setTimeout(Ne.durationSetter,1e3)},loadPlayer:function(){1==$("script[src='https://www.youtube.com/iframe_api']").length?Ne.onYouTubeIframeAPIReady():(fe=document.createElement("script"),fe.src="https://www.youtube.com/iframe_api",ve=document.getElementsByTagName("script")[0],ve.parentNode.insertBefore(fe,ve))}},ze={stopInterval:!1,initYoutubeControls:function(){!T.mobilecheck()||/iPad|iPhone|iPod/.test(navigator.userAgent)||window.MSStream||$("#controls").appendTo("#playbar"),ze.initControls()},initControls:function(){document.getElementById("volume-button").addEventListener("click",ze.mute_video),document.getElementById("playpause").addEventListener("click",ze.play_pause),document.getElementById("fullscreen").addEventListener("click",ze.fullscreen)},initSlider:function(){try{vol=I.get_volume()}catch(e){}$("#volume").slider({min:0,max:100,value:vol,range:"min",animate:!0,slide:function(e,t){ze.setVolume(t.value);try{I.set_volume(t.value)}catch(e){}}}),ze.choose_button(vol,!1)},fullscreen:function(){var e=document.getElementById("player"),t=e.requestFullScreen||e.mozRequestFullScreen||e.webkitRequestFullScreen;t&&t.bind(e)()},play_pause:function(){1==Ne.ytplayer.getPlayerState()?(Ne.ytplayer.pauseVideo(),!T.mobilecheck()||/iPad|iPhone|iPod/.test(navigator.userAgent)||window.MSStream||(document.getElementById("player").style.display="none",$(".video-container").toggleClass("click-through"),$(".page-footer").toggleClass("padding-bottom-extra"))):2!=Ne.ytplayer.getPlayerState()&&0!==Ne.ytplayer.getPlayerState()||(Ne.ytplayer.playVideo(),!T.mobilecheck()||/iPad|iPhone|iPod/.test(navigator.userAgent)||window.MSStream||(document.getElementById("player").style.display="block",$(".video-container").toggleClass("click-through"),$(".page-footer").toggleClass("padding-bottom-extra")))},play_pause_show:function(){1==document.getElementById("pause").className.split(" ").length&&$("#pause").toggleClass("hide"),2==document.getElementById("play").className.split(" ").length&&$("#play").toggleClass("hide")},settings:function(){$("#qS").toggleClass("hide")},changeQuality:function(e){Ne.ytplayer.getPlaybackQuality!=e&&(Ne.ytplayer.setPlaybackQuality(e),Ne.ytplayer.getPlaybackQuality()),$("#qS").toggleClass("hide")},mute_video:function(){Ne.ytplayer.isMuted()?(Ne.ytplayer.unMute(),ze.choose_button(Ne.ytplayer.getVolume(),!1)):(ze.choose_button(0,!0),Ne.ytplayer.mute())},setVolume:function(e){Ne.ytplayer.setVolume(e),ze.choose_button(e,!1),Ne.ytplayer.isMuted()&&Ne.ytplayer.unMute()},choose_button:function(e,t){t?(1==document.getElementById("v-full").className.split(" ").length&&$("#v-full").toggleClass("hide"),1==document.getElementById("v-medium").className.split(" ").length&&$("#v-medium").toggleClass("hide"),1==document.getElementById("v-low").className.split(" ").length&&$("#v-low").toggleClass("hide"),2==document.getElementById("v-mute").className.split(" ").length&&$("#v-mute").toggleClass("hide")):e>=0&&e<=33?(1==document.getElementById("v-full").className.split(" ").length&&$("#v-full").toggleClass("hide"),1==document.getElementById("v-medium").className.split(" ").length&&$("#v-medium").toggleClass("hide"),2==document.getElementById("v-low").className.split(" ").length&&$("#v-low").toggleClass("hide"),1==document.getElementById("v-mute").className.split(" ").length&&$("#v-mute").toggleClass("hide")):e>=34&&e<=66?(1==document.getElementById("v-full").className.split(" ").length&&$("#v-full").toggleClass("hide"),2==document.getElementById("v-medium").className.split(" ").length&&$("#v-medium").toggleClass("hide"),1==document.getElementById("v-low").className.split(" ").length&&$("#v-low").toggleClass("hide"),1==document.getElementById("v-mute").className.split(" ").length&&$("#v-mute").toggleClass("hide")):e>=67&&e<=100&&(2==document.getElementById("v-full").className.split(" ").length&&$("#v-full").toggleClass("hide"),1==document.getElementById("v-medium").className.split(" ").length&&$("#v-medium").toggleClass("hide"),1==document.getElementById("v-low").className.split(" ").length&&$("#v-low").toggleClass("hide"),1==document.getElementById("v-mute").className.split(" ").length&&$("#v-mute").toggleClass("hide"))},playPause:function(){state=Ne.ytplayer.getPlayerState(),button=document.getElementById("playpause"),1==state?Ne.ytplayer.pauseVideo():2==state&&Ne.ytplayer.playVideo()},volumeOptions:function(){Ne.ytplayer.isMuted()?(Ne.ytplayer.unMute(),vol=Ne.ytplayer.getVolume(),$("#volume").slider("value",Ne.ytplayer.getVolume())):(Ne.ytplayer.mute(),$("#volume").slider("value",0))},hoverMute:function(e){vol=Ne.ytplayer.getVolume()}},Ae={showSearch:function(){$("#search-wrapper").toggleClass("hide"),T.mobilecheck()&&$(".search_input").focus(),$("#song-title").toggleClass("hide"),$("#results").toggleClass("hide"),$("#results").empty(),$("#search-btn i").toggleClass("mdi-navigation-close"),$("#search-btn i").toggleClass("mdi-action-search"),$("#search").focus()},search:function(e){if(void 0!==de&&void 0!==pe||(de=$("#temp-results-container"),pe=$("#empty-results-container").html()),$(".search_results").html(""),""!==window.search_input){j=!0;var t=encodeURIComponent(window.search_input),o="https://www.googleapis.com/youtube/v3/search?key="+V+"&videoEmbeddable=true&part=id&fields=items(id)&type=video&order=viewCount&safeSearch=none&maxResults=25";o+="&q="+t,q&&(o+="&videoCategoryId=10");var n="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+V+"&id=";T.contains($("#search_loader").attr("class").split(" "),"hide")&&$("#search_loader").removeClass("hide"),T.contains($("#results").attr("class").split(" "),"hide")&&$("#results").removeClass("hide"),$.ajax({type:"GET",url:o,dataType:"jsonp",success:function(e){0===e.items.length?($("
"+pe+"
").appendTo($("#results")).show("blind",83.33),T.contains($("#search_loader").attr("class").split(" "),"hide")||$("#search_loader").addClass("hide")):e.items&&($.each(e.items,function(e,t){n+=t.id.videoId+","}),$.ajax({type:"GET",url:n,dataType:"jsonp",success:function(e){var t="",o=$(de);$.each(e.items,function(e,n){var a=n.contentDetails.duration;if(secs=Ae.durationToSeconds(a),!longsongs||secs<720){we=n.snippet.title,enc_title=we,ge=n.id,a=a.replace("PT","").replace("H","h ").replace("M","m ").replace("S","s"),thumb=n.snippet.thumbnails.medium.url;var i=o;i.find(".search-title").text(we),i.find(".result_info").text(a),i.find(".thumb").attr("data-original",thumb),i.find("#add-many").attr("data-video-id",ge),i.find("#add-many").attr("data-video-title",enc_title),i.find("#add-many").attr("data-video-length",secs),i.find("#temp-results").attr("data-video-id",ge),i.find("#temp-results").attr("data-video-title",enc_title),i.find("#temp-results").attr("data-video-length",secs),t+=i.html()}}),$("
"+t+"
").appendTo($("#results")).show("blind",83.33*(e.items.length-1)),setTimeout(function(){$(".thumb").lazyload({container:$("#results")})},250),T.contains($("#search_loader").attr("class").split(" "),"hide")||$("#search_loader").addClass("hide"),$(".add-many").click(function(e){return e.preventDefault(),e.stopPropagation(),!1})}}))}})}else $(".main").removeClass("blurT"),$("#controls").removeClass("blurT"),$(".main").removeClass("clickthrough")},backgroundSearch:function(e,t,o,n,a){var i=encodeURIComponent(e+" "+t),s="https://www.googleapis.com/youtube/v3/search?key="+V+"&videoEmbeddable=true&part=id,snippet&fields=items(id,snippet)&type=video&order=relevance&safeSearch=none&maxResults=5";s+="&q="+i;var l="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+V+"&id=";t=t.split(" ");var r=e.toLowerCase().replace(" the ","").replace(" a ","").replace("the ","");r=r.split(" "),$.ajax({type:"GET",url:s,dataType:"jsonp",success:function(i){i.items.length>0&&($.each(i.items,function(e,o){var n=!0;$.each(t,function(e,t){if(o.snippet.title.toLowerCase().indexOf(t.toLowerCase())==-1)return n=!1,!1}),o.snippet.title.toLowerCase().indexOf("cover")==-1&&n&&(l+=o.id.videoId+",")}),$.ajax({type:"GET",url:l,dataType:"jsonp",success:function(i){if(i.items.length>0){var s=!1;$.each(i.items,function(i,l){var c=Ae.durationToSeconds(l.contentDetails.duration),d=0;if($.each(r,function(e,t){l.snippet.title.toLowerCase().indexOf(t.toLowerCase())==-1&&(d+=1)}),l.snippet.title.toLowerCase()==t.join(" ").toLowerCase()+" - "+e.toLowerCase()||l.snippet.title.toLowerCase()==t.join(" ").toLowerCase()+"-"+e.toLowerCase()||l.snippet.title.toLowerCase()==e.toLowerCase()+" - "+t.join(" ").toLowerCase()||l.snippet.title.toLowerCase()==e.toLowerCase()+"-"+t.join(" ").toLowerCase()||c==o||(l.snippet.title.toLowerCase().indexOf("lyric")>-1||l.snippet.title.toLowerCase().indexOf("music video")>-1||l.snippet.title.toLowerCase().indexOf("official video"))&&d!=r.length-1)return s=!0,Ae.submit(l.id,l.snippet.title,c,!0,a,n),!1}),s||"true"===localStorage.debug&&(console.log("------------------------------"),console.log("NO MATCH FOR:"),console.log("Spotify title: "+e+" "+t.join(" ")),console.log("Spotify length: "+o),console.log("------------------------------"))}}}))}}),a==n-1&&(document.getElementById("import_spotify").disabled=!1,$("#import_spotify").removeClass("hide"),$("#playlist_loader_spotify").addClass("hide"))},submitAndClose:function(e,t,o){Ae.submit(e,t,o,!1,0,1),$("#results").html(""),Ae.showSearch(),document.getElementById("search").value="",$("#results").html="",$(".main").removeClass("blurT"),$("#controls").removeClass("blurT"),$(".main").removeClass("clickthrough")},importPlaylist:function(e,t){token="",void 0!==t&&(token="&pageToken="+t),playlist_url="https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&maxResults=49&key="+V+"&playlistId="+e+token,$.ajax({type:"GET",url:playlist_url,dataType:"jsonp",success:function(t){var o="";$.each(t.items,function(e,t){o+=t.contentDetails.videoId+",";
+}),Ae.addVideos(o,!0),t.nextPageToken&&Ae.importPlaylist(e,t.nextPageToken),document.getElementById("import").value=""}})},importSpotifyPlaylist:function(e){$.ajax({url:e,headers:{Authorization:"Bearer "+le.access_token},success:function(e){console.log(e),$.each(e.items,function(t,o){Ae.backgroundSearch(o.track.name,o.track.artists.map(function(e){return e.name}).join(" "),Math.floor(o.track.duration_ms/1e3),e.total,t+e.offset)}),e.next&&Ae.importSpotifyPlaylist(e.next)}})},addVideos:function(e,t){var o="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key=***REMOVED***&id=";o+=e,$.ajax({type:"POST",url:o,dataType:"jsonp",success:function(e){var o=0,n=[];$.each(e.items,function(e,a){var i=Ae.durationToSeconds(a.contentDetails.duration);(!longsongs||i<720)&&(enc_title=a.snippet.title,o+=1,n.push({id:a.id,enc_title:enc_title,duration:i,playlist:t}))}),$.each(n,function(e,t){Ae.submit(t.id,t.enc_title,t.duration,t.playlist,e,o)})}})},submit:function(e,t,o,n,a,i){Se.emit("add",{id:e,title:decodeURIComponent(t),adminpass:H,list:L.toLowerCase(),duration:o,playlist:n,num:a,total:i})},durationToSeconds:function(e){var t=e.match(O);return hours=parseInt(t[12])||0,minutes=parseInt(t[14])||0,seconds=parseInt(t[16])||0,60*hours*60+60*minutes+seconds}},De={catchUserSuggests:function(e,t){if(t)De.createSuggested(e);else for(var o in e)De.createSuggested(e[o]);De.checkUserEmpty()},createSuggested:function(e){var t=e.duration,o=e.id,n=e.title,a=Math.floor(t/60),i=t-60*a;duration=a+"m "+i+"s";var s=B.generateSong({id:o,title:n,length:t,duration:duration},!1,!1,!1,!0);$("#user-suggest-html").append(s)},fetchYoutubeSuggests:function(e){var t="https://www.googleapis.com/youtube/v3/search?part=snippet&relatedToVideoId="+e+"&type=video&key="+V,o="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+V+"&id=";$.ajax({type:"GET",url:t,dataType:"jsonp",success:function(e){$.each(e.items.slice(0,5),function(e,t){o+=t.id.videoId+","}),$.ajax({type:"GET",url:o,dataType:"jsonp",success:function(e){$("#suggest-song-html").empty(),$.each(e.items,function(e,t){var o=t.contentDetails.duration,n=Ae.durationToSeconds(o),a=t.id,i=t.snippet.title;o=o.replace("PT","").replace("H","h ").replace("M","m ").replace("S","s"),$("#suggest-song-html").append(B.generateSong({id:a,title:i,length:n,duration:o},!1,!1,!1))})}})}})},checkUserEmpty:function(){var e=$("#user-suggest-html").children().length;0===e?T.contains($("#user_suggests").attr("class").split(" "),"hide")||$("#user_suggests").addClass("hide"):$("#user_suggests").removeClass("hide")}}}();
\ No newline at end of file
diff --git a/static/dist/spotify.min.js b/static/dist/spotify.min.js
new file mode 100644
index 00000000..7554a808
--- /dev/null
+++ b/static/dist/spotify.min.js
@@ -0,0 +1 @@
+!function(){function e(e){var t,o=e.substring(1).split("&"),n={};for(var a in o)t=o[a].split("="),2==t.length&&(n[t[0]]=t[1]);return n}window.addEventListener("load",function(){console.log("hello");var t="b934ecdd173648f5bcd38738af529d58",o="http://localhost/spotify_callback",n="token",a="playlist-read-private playlist-read-collaborative user-read-private";if(window.location.hash.length<=0)window.location.href="https://accounts.spotify.com/authorize?client_id="+t+"&scope="+a+"&show_dialog=false&response_type="+n+"&redirect_uri="+o;else{var i=e(window.location.hash);window.opener.callback(i)}})}();
\ No newline at end of file
diff --git a/static/js/list.js b/static/js/list.js
index 8d7e6fb1..2a1f16e3 100755
--- a/static/js/list.js
+++ b/static/js/list.js
@@ -58,7 +58,7 @@ var List = {
List.sortList();
$("#wrapper").empty();
- if(localStorage.debug) {
+ if(localStorage.debug === "true") {
console.log("---------------------------");
console.log("---------FULL PLAYLIST-----");
console.log(full_playlist);
@@ -153,7 +153,7 @@ var List = {
full_playlist[0].guids = [];
full_playlist[0].added = time;
full_playlist[length].now_playing = false;
- if(localStorage.debug) {
+ if(localStorage.debug === "true") {
console.log("---------------------------");
console.log("---SONG ON FIRST INDEX-----");
console.log(full_playlist[0]);
diff --git a/static/js/listeners.js b/static/js/listeners.js
index cfdb50b3..3df38d99 100755
--- a/static/js/listeners.js
+++ b/static/js/listeners.js
@@ -28,6 +28,8 @@ var durationBegun = false;
var chat_active = false;
var chat_unseen = false;
var blinking = false;
+var access_token_data = {};
+var spotify_authenticated = false;
if(localStorage.debug === undefined){
var debug = false;
@@ -125,6 +127,9 @@ function init(){
$('.collapsible').collapsible({
accordion : true // A setting that changes the collapsible behavior to expandable instead of the default accordion style
});
+
+ spotify_is_authenticated(spotify_authenticated);
+
result_html = $("#temp-results-container");
empty_results_html = $("#empty-results-container").html();
@@ -275,6 +280,29 @@ function disable_debug(){
localStorage.debug = false;
}
+function spotify_is_authenticated(bool){
+ if(bool){
+ if(localStorage.debug === "true"){
+ console.log("------------------------");
+ console.log("Spotify is authenticated");
+ console.log("access_token: " + access_token_data.access_token);
+ console.log("token_type:" + access_token_data.token_type);
+ console.log("expires_in: " + access_token_data.expires_in);
+ console.log("------------------------");
+ }
+ $(".spotify_authenticated").css("display", "block");
+ $(".spotify_unauthenticated").css("display", "none");
+ } else {
+ if(localStorage.debug === "true"){
+ console.log("----------------------------");
+ console.log("Spotify is not authenticated");
+ console.log("----------------------------");
+ $(".spotify_authenticated").css("display", "none");
+ $(".spotify_unauthenticated").css("display", "block");
+ }
+ }
+}
+
window.enable_debug = enable_debug;
window.disable_debug = disable_debug;
@@ -366,12 +394,34 @@ $("#clickme").click(function(){
Player.ytplayer.playVideo();
});
-$(document).on("submit", "#listImport", function(){
- Search.importPlaylist(document.getElementById("import").value);
- document.getElementById("import").value = "";
- document.getElementById("import").disabled = true;
- $("#import").addClass("hide");
- $("#playlist_loader").removeClass("hide");
+$(document).on("submit", "#listImport", function(e){
+ e.preventDefault();
+ if($("#import").val() !== ""){
+ Search.importPlaylist(document.getElementById("import").value);
+ document.getElementById("import").value = "";
+ document.getElementById("import").disabled = true;
+ $("#import").addClass("hide");
+ $("#playlist_loader").removeClass("hide");
+ }
+});
+
+$(document).on("submit", "#listImportSpotify", function(e){
+ e.preventDefault();
+ if(spotify_authenticated && $("#import_spotify").val() !== ""){
+ //console.log("Import this playlist: " + document.getElementById("import_spotify").value);
+ var url = $("#import_spotify").val().split("https://open.spotify.com/user/");
+ if(url.length == 2) {
+ url = url[1].split("/");
+ var user = url[0];
+ var playlist_id = url[2];
+
+ Search.importSpotifyPlaylist('https://api.spotify.com/v1/users/' + user + '/playlists/' + playlist_id + '/tracks');
+ }
+ }
+ document.getElementById("import_spotify").value = "";
+ document.getElementById("import_spotify").disabled = true;
+ $("#import_spotify").addClass("hide");
+ $("#playlist_loader_spotify").removeClass("hide");
});
$(window).focus(function(){
@@ -494,6 +544,30 @@ $(document).on("click", ".suggested-link", function(e){
$("#suggestions").css("display", "block");
});
+$(document).on("click", ".import-spotify-auth", function(e){
+ e.preventDefault();
+ window.callback = function(data) {
+ access_token_data = data;
+ spotify_authenticated = true;
+ spotify_is_authenticated(true);
+ setTimeout(function(){
+ spotify_authenticated = false;
+ spotify_is_authenticated(false);
+ $(".spotify_authenticated").css("display", "none");
+ $(".spotify_unauthenticated").css("display", "block");
+ }, access_token_data.expires_in * 1000);
+ spotify_window.close();
+ window.callback = "";
+ };
+ spotify_window = window.open("/spotify_callback", "", "width=600, height=600");
+});
+
+$(document).on("click", ".import-youtube", function(e){
+ e.preventDefault();
+ $(".youtube_unclicked").css("display", "none");
+ $(".youtube_clicked").css("display", "block");
+});
+
$(document).on("submit", "#chatForm", function(e){
e.preventDefault();
Chat.chat(document.getElementById("chatForm").input);
diff --git a/static/js/player.js b/static/js/player.js
index cbb67771..cb7d818d 100755
--- a/static/js/player.js
+++ b/static/js/player.js
@@ -9,7 +9,7 @@ var Player = {
youtube_listener: function(obj)
{
Player.loaded = false;
- if(localStorage.debug){
+ if(localStorage.debug === "true"){
console.log("--------youtube_listener--------");
console.log("Received: ");
@@ -95,7 +95,7 @@ var Player = {
},
onPlayerStateChange: function(newState) {
- if(localStorage.debug){
+ if(localStorage.debug === "true"){
console.log("-------onPlayerStateChange------");
console.log("New state\nState: ");
console.log(newState);
diff --git a/static/js/search.js b/static/js/search.js
index 00c15861..3a750106 100755
--- a/static/js/search.js
+++ b/static/js/search.js
@@ -123,6 +123,89 @@ var Search = {
}
},
+ backgroundSearch: function(title, artist, length, totalNumber, current){
+ var keyword= encodeURIComponent(title + " " + artist);
+ var yt_url = "https://www.googleapis.com/youtube/v3/search?key="+api_key+"&videoEmbeddable=true&part=id,snippet&fields=items(id,snippet)&type=video&order=relevance&safeSearch=none&maxResults=5";
+ yt_url+="&q="+keyword;
+ var vid_url = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+api_key+"&id=";
+ artist = artist.split(" ");
+ var temptitle = title.toLowerCase().replace(" the ", "").replace(" a ", "").replace("the ", "");
+ temptitle = temptitle.split(" ");
+ $.ajax({
+ type: "GET",
+ url: yt_url,
+ dataType:"jsonp",
+ success: function(response){
+ //console.log(response);
+ if(response.items.length > 0) {
+ $.each(response.items, function(i,data)
+ {
+ var acceptable_track = true;
+ //console.log(data.snippet.title.toLowerCase().indexOf("cover"));
+ $.each(artist, function(i, data_artist){
+ if(data.snippet.title.toLowerCase().indexOf(data_artist.toLowerCase()) == -1){
+ acceptable_track = false;
+ return false;
+ }
+ });
+ if(data.snippet.title.toLowerCase().indexOf("cover") == -1 && acceptable_track) {
+ vid_url += data.id.videoId+",";
+ }
+ });
+
+ $.ajax({
+ type: "GET",
+ url: vid_url,
+ dataType:"jsonp",
+ success: function(response){
+ if(response.items.length > 0) {
+ var matched = false;
+ $.each(response.items, function(i, data){
+ //console.log(data);
+ //var title = data.snippet.title;
+ var duration = Search.durationToSeconds(data.contentDetails.duration);
+ var not_matched = 0;
+ $.each(temptitle, function(i, data_title){
+ if(data.snippet.title.toLowerCase().indexOf(data_title.toLowerCase()) == -1)
+ not_matched += 1;
+ });
+ if(((data.snippet.title.toLowerCase() == artist.join(" ").toLowerCase() + " - " + title.toLowerCase()) ||
+ (data.snippet.title.toLowerCase() == artist.join(" ").toLowerCase() + "-" + title.toLowerCase()) ||
+ (data.snippet.title.toLowerCase() == title.toLowerCase() + " - " + artist.join(" ").toLowerCase()) ||
+ (data.snippet.title.toLowerCase() == title.toLowerCase() + "-" + artist.join(" ").toLowerCase())) ||
+ (duration == length) ||
+ ((data.snippet.title.toLowerCase().indexOf("lyric") > -1) ||
+ (data.snippet.title.toLowerCase().indexOf("music video") > -1) ||
+ (data.snippet.title.toLowerCase().indexOf("official video"))) && not_matched != temptitle.length - 1) {
+ matched = true;
+
+ Search.submit(data.id,data.snippet.title, duration, true, current, totalNumber);
+ return false;
+ }
+ });
+ if(!matched){
+ if(localStorage.debug === "true") {
+ console.log("------------------------------");
+ console.log("NO MATCH FOR:");
+ console.log("Spotify title: " + title + " " + artist.join(" "));
+ console.log("Spotify length: " + length);
+ console.log("------------------------------");
+ }
+ }
+ }
+ }
+ });
+
+ }
+ }
+ });
+ if(current == totalNumber - 1){
+ document.getElementById("import_spotify").disabled = false;
+ $("#import_spotify").removeClass("hide");
+ $("#playlist_loader_spotify").addClass("hide");
+ }
+ },
+
submitAndClose: function(id,title,duration){
Search.submit(id,title, duration, false, 0, 1);
$("#results").html('');
@@ -159,6 +242,27 @@ var Search = {
});
},
+ importSpotifyPlaylist: function(url){
+ $.ajax({
+ url: url,
+ headers: {
+ 'Authorization': 'Bearer ' + access_token_data.access_token
+ },
+ success: function(response) {
+ console.log(response);
+ $.each(response.items, function(i,data)
+ {
+ //ids+=data.contentDetails.videoId+",";
+ Search.backgroundSearch(data.track.name, data.track.artists.map(function(elem){return elem.name;}).join(" "), Math.floor(data.track.duration_ms/1000), response.total, i + response.offset);
+
+ });
+ if(response.next){
+ Search.importSpotifyPlaylist(response.next);
+ }
+ }
+ });
+ },
+
addVideos: function(ids, playlist){
var request_url="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key=***REMOVED***&id=";
request_url += ids;
diff --git a/static/js/spotify.js b/static/js/spotify.js
new file mode 100644
index 00000000..84cc0faf
--- /dev/null
+++ b/static/js/spotify.js
@@ -0,0 +1,26 @@
+window.addEventListener("load", function(){
+ console.log("hello");
+ var client_id = "b934ecdd173648f5bcd38738af529d58";
+ var redirect = "http://localhost/spotify_callback";
+ var response = "token";
+ var scope = "playlist-read-private playlist-read-collaborative user-read-private";
+ if(window.location.hash.length <= 0){
+ window.location.href = "https://accounts.spotify.com/authorize?client_id=" + client_id + "&scope=" + scope + "&show_dialog=false&response_type=" + response + "&redirect_uri=" + redirect;
+ } else {
+ var query_parameters = getQueryHash(window.location.hash);
+ window.opener.callback(query_parameters);
+ }
+});
+
+function getQueryHash(url){
+ var temp_arr = url.substring(1).split("&");
+ var done_obj = {};
+ var splitted;
+ for(var i in temp_arr) {
+ splitted = temp_arr[i].split("=");
+ if(splitted.length == 2) {
+ done_obj[splitted[0]] = splitted[1];
+ }
+ }
+ return done_obj;
+}