diff --git a/server/public/assets/css/style.css b/server/public/assets/css/style.css index b2852aff..0e3f3d78 100755 --- a/server/public/assets/css/style.css +++ b/server/public/assets/css/style.css @@ -123,6 +123,20 @@ a { margin: auto; } +#player_loader_container { + height: 100%; +width: 100%; +background: rgba(0,0,0,.5); +} +#player_loader { + position: absolute; +left: 0; +right: 0; +margin: auto; +} + + + #send-loader { position: absolute; top: 0px; diff --git a/server/public/assets/js/list.js b/server/public/assets/js/list.js index 74ad95c8..30e9413d 100755 --- a/server/public/assets/js/list.js +++ b/server/public/assets/js/list.js @@ -799,7 +799,7 @@ var List = { exportToYoutube: function() { ga('send', 'event', "export", "youtube"); - var request_url = "https://www.googleapis.com/youtube/v3/playlists?part=snippet"; + var request_url = "https://www.googleapis.com/youtube/v3/playlists?part=snippet&key=" + api_key; Helper.removeClass(".exported-list-container", "hide"); Helper.removeClass("#playlist_loader_export", "hide"); Helper.ajax({ @@ -819,10 +819,11 @@ var List = { response = JSON.parse(response); var number_added = 0; var playlist_id = response.id; - var request_url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet"; + var request_url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&key=" + api_key; List.addToYoutubePlaylist(playlist_id, full_playlist, number_added, request_url) }, error: function(response){ + console.log(response); response = response.responseText; Helper.log([ "export to youtube response", @@ -832,60 +833,191 @@ var List = { }); }, - addToYoutubePlaylist: function(playlist_id, full_playlist, num, request_url) { - if(full_playlist[num].source != "soundcloud") { - var _data = JSON.stringify({ - 'snippet': { - 'playlistId': playlist_id, - 'resourceId': { - 'kind': 'youtube#video', - 'videoId': full_playlist[num].id - } + insertInYouTubePlaylist: function(playlist_id, _videoId, num, request_url) { + var _data = JSON.stringify({ + 'snippet': { + 'playlistId': playlist_id, + 'resourceId': { + 'kind': 'youtube#video', + 'videoId': _videoId } - }); + } + }); + Helper.ajax({ + type: "POST", + url: request_url, + headers: { + 'Authorization': 'Bearer ' + access_token_data_youtube.access_token, + 'Content-Type': 'application/json' + }, + data: _data, + success: function(response){ + response = JSON.parse(response); + Helper.log(["Added video: " + full_playlist[num].id + " to playlist id " + playlist_id]); + if(num == full_playlist.length - 1){ + Helper.log(["All videoes added!"]); + Helper.log(["url: https://www.youtube.com/playlist?list=" + playlist_id]); + document.querySelector(".exported-list").insertAdjacentHTML("beforeend", "" + chan + ""); + Helper.addClass("#playlist_loader_export", "hide"); + Helper.addClass(".current_number", "hide"); + //$(".youtube_export_button").removeClass("hide"); + } else { + //setTimeout(function(){ + Helper.removeClass(".current_number", "hide"); + document.querySelector(".current_number").innerText = (num + 1) + " of " + (full_playlist.length); + List.addToYoutubePlaylist(playlist_id, full_playlist, num + 1, request_url); + //}, 50); + } + }, error: function(response) { + console.log(response); + } + + }); + }, + + addToYoutubePlaylist: function(playlist_id, full_playlist, num, request_url) { + console.log(full_playlist[num], num); + if(num == full_playlist.length - 1){ + Helper.log(["All videoes added!"]); + Helper.log(["url: https://www.youtube.com/playlist?list=" + playlist_id]); + document.querySelector(".exported-list").insertAdjacentHTML("beforeend", "" + chan + ""); + Helper.addClass("#playlist_loader_export", "hide"); + Helper.addClass(".current_number", "hide"); + return; + //$(".youtube_export_button").removeClass("hide"); + } + if(full_playlist[num].hasOwnProperty("source") && full_playlist[num].source != "soundcloud") { + List.insertInYouTubePlaylist(playlist_id, full_playlist[num].id, num, request_url) + } else { + 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=10&videoCategoryId=10"; + yt_url+="&q="+full_playlist[num].title; + var title = full_playlist[num].title; + var temptitle = title.split("-"); + temptitle = temptitle.join(" ").split(" "); + var vid_url = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+api_key+"&id="; Helper.ajax({ - type: "POST", - url: request_url, - headers: { - 'Authorization': 'Bearer ' + access_token_data_youtube.access_token, - 'Content-Type': 'application/json' - }, - data: _data, + type: "GET", + url: yt_url, + dataType:"jsonp", success: function(response){ response = JSON.parse(response); - Helper.log(["Added video: " + full_playlist[num].id + " to playlist id " + playlist_id]); - if(num == full_playlist.length - 1){ - Helper.log(["All videoes added!"]); - Helper.log(["url: https://www.youtube.com/playlist?list=" + playlist_id]); - document.querySelector(".exported-list").insertAdjacentHTML("beforeend", "" + chan + ""); - Helper.addClass("#playlist_loader_export", "hide"); - Helper.addClass(".current_number", "hide"); - //$(".youtube_export_button").removeClass("hide"); - } else { - //setTimeout(function(){ - Helper.removeClass(".current_number", "hide"); - document.querySelector(".current_number").innerText = (num + 1) + " of " + (full_playlist.length); - List.addToYoutubePlaylist(playlist_id, full_playlist, num + 1, request_url); - //}, 50); - } - } + //Helper.log(response); + if(response.items.length === 0){ + Helper.log([ + "NO MATCH FOR:", + "Spotify title: " + title, + "Spotify length: " + length + ]); + var not_added_song = document.createElement("div"); + not_added_song.innerHTML = not_export_html; + not_added_song.querySelector(".extra-add-text").innerText = title; + not_added_song.querySelector(".extra-add-text").setAttribute("title", title); + not_added_song.querySelector(".extra-button-search").setAttribute("data-text", title); + document.querySelector(".not-exported-container").insertAdjacentHTML("beforeend", not_added_song.innerHTML); + Helper.removeClass(".not-exported", "hide"); + if(num == full_playlist.length - 1){ + Helper.log(["All videoes added!"]); + Helper.log(["url: https://www.youtube.com/playlist?list=" + playlist_id]); + document.querySelector(".exported-list").insertAdjacentHTML("beforeend", "" + chan + ""); + Helper.addClass("#playlist_loader_export", "hide"); + Helper.addClass(".current_number", "hide"); + //$(".youtube_export_button").removeClass("hide"); + } else { + //setTimeout(function(){ + Helper.removeClass(".current_number", "hide"); + document.querySelector(".current_number").innerText = (num + 1) + " of " + (full_playlist.length); + List.addToYoutubePlaylist(playlist_id, full_playlist, num + 1, request_url); + //}, 50); + } + } else if(response.items.length > 0) { + for(var i = 0; i < response.items.length; i++) { + var data = response.items[i]; + vid_url += data.id.videoId+","; + } + + Helper.ajax({ + type: "GET", + url: vid_url, + dataType:"jsonp", + success: function(response){ + response = JSON.parse(response); + if(response.items.length > 0) { + var matched = false; + for(var y = 0; y < response.items.length; y++) { + var data = response.items[y]; + //Helper.log(data); + //var title = data.snippet.title; + var duration = Search.durationToSeconds(data.contentDetails.duration); + var not_matched = false; + if(similarity(data.snippet.title,title) > 0.75) { + not_matched = false; + } else { + for(var i = 0; i < temptitle.length; i++) { + var data_title = temptitle[i]; + + if(data.snippet.title.toLowerCase().indexOf(data_title.toLowerCase()) == -1 || !( + data.snippet.title.toLowerCase().indexOf("cover") == -1 && + title.toLowerCase().indexOf("cover") == -1 && + ((data.snippet.title.toLowerCase().indexOf("remix") == -1 && + title.toLowerCase().indexOf("remix") == -1) || + (data.snippet.title.toLowerCase().indexOf("remix") != -1 && + title.toLowerCase().indexOf("remix") != -1) || !(data.snippet.title.toLowerCase().indexOf(artist[0].toLowerCase()) == -1 && + data.snippet.channelTitle.toLowerCase().indexOf("vevo") == -1))) + ) + not_matched = true; + else if(duration > 1800) not_matched = true; + } + } + + if((!not_matched)){ + matched = true; + List.insertInYouTubePlaylist(playlist_id, data.id, num, request_url); + break; + } + } + if(!matched){ + if(num == full_playlist.length - 1){ + Helper.log(["All videoes added!"]); + Helper.log(["url: https://www.youtube.com/playlist?list=" + playlist_id]); + document.querySelector(".exported-list").insertAdjacentHTML("beforeend", "" + chan + ""); + Helper.addClass("#playlist_loader_export", "hide"); + Helper.addClass(".current_number", "hide"); + //$(".youtube_export_button").removeClass("hide"); + } else { + //setTimeout(function(){ + Helper.removeClass(".current_number", "hide"); + document.querySelector(".current_number").innerText = (num + 1) + " of " + (full_playlist.length); + //}, 50); + } + Helper.log([ + "NO MATCH FOR:", + "Spotify title: " + title, + "Spotify length: " + length + ]); + var not_added_song = document.createElement("div"); + not_added_song.innerHTML = not_export_html; + not_added_song.querySelector(".extra-add-text").innerText = title; + not_added_song.querySelector(".extra-add-text").setAttribute("title", title); + not_added_song.querySelector(".extra-button-search").setAttribute("data-text", title); + document.querySelector(".not-exported-container").insertAdjacentHTML("beforeend", not_added_song.innerHTML); + Helper.removeClass(".not-exported", "hide"); + List.addToYoutubePlaylist(playlist_id, full_playlist, num + 1, request_url); + + } + } + }, + error: function(e) { + console.log(e); + } + }); + + } + }, error: function(e) { + console.log(e); + } }); - } else { - if(num == full_playlist.length - 1){ - Helper.log(["All videoes added!"]); - Helper.log(["url: https://www.youtube.com/playlist?list=" + playlist_id]); - document.querySelector(".exported-list").insertAdjacentHTML("beforeend", "" + chan + ""); - Helper.addClass("#playlist_loader_export", "hide"); - Helper.addClass(".current_number", "hide"); - //$(".youtube_export_button").removeClass("hide"); - } else { - //setTimeout(function(){ - Helper.removeClass(".current_number", "hide"); - document.querySelector(".current_number").innerText = (num + 1) + " of " + (full_playlist.length); - List.addToYoutubePlaylist(playlist_id, full_playlist, num + 1, request_url); - //}, 50); - } + } }, diff --git a/server/public/assets/js/player.js b/server/public/assets/js/player.js index 523f7232..df7a1453 100755 --- a/server/public/assets/js/player.js +++ b/server/public/assets/js/player.js @@ -10,21 +10,7 @@ var Player = { soundcloud_player: document.querySelector('#soundcloud_player'), youtube_listener: function(obj) { - Helper.log(["object", obj]); - var state; - fix_too_far = false; - if(embed && !autoplay && obj && obj.np.length > 0) { - if(Object.keys(obj).length == 0) { - paused = false; - empty_clear = true; - } else { - empty_clear = false; - } - Player.getTitle(obj.np[0].title, viewers); - //Player.setBGimage(video_id); - if(!Helper.mobilecheck()) { - Player.notifyUser(obj.np[0].id, obj.np[0].title); - } + if(obj.np != undefined) { video_id = obj.np[0].id; Player.np = { id: video_id, @@ -32,233 +18,60 @@ var Player = { end: obj.np[0].end, duration: obj.np[0].duration, }; + if(!obj.np[0].hasOwnProperty("start")) { Player.np.start = 0; } + if(!obj.np[0].hasOwnProperty("end")) { Player.np.end = Player.np.duration; } - - conf = obj.conf[0]; - time = obj.time; - seekTo = (time - conf.startTime) + Player.np.start; - startTime = time - conf.startTime; song_title = obj.np[0].title; duration = obj.np[0].duration; videoSource = obj.np[0].hasOwnProperty("source") ? obj.np[0].source : "youtube"; - if(player_ready) { - Player.cueVideoById(video_id, duration); - Player.stopVideo(); + } else { + Player.np = { + id: "", + start: 0, + end: 0, + duration: 0, + }; + + document.getElementById('song-title').innerText = "Empty channel. Add some songs!"; + document.title = "Zoff - the shared YouTube based radio"; + Helper.css("#channel-load", "display", "none"); + + if(!window.MSStream && !chromecastAvailable) { + Helper.removeClass("#player_overlay", "hide"); } - return; - } - if(embed && obj.np) { - if(window.parentWindow && window.parentOrigin) { - window.parentWindow.postMessage({type: "np", title: obj.np[0].title}, window.parentOrigin); - if(full_playlist.length > 0) { - Player.sendNext({title: full_playlist[0].title, videoId: full_playlist[0].id}); - } - } - } - try { - state = Player.player.getPlayerState(); - } catch(e) { - state = null; - } - if(!paused) { - gotten_np = true; - } - if((((!offline && (state != null || from_frontpage)) || (offline && (!(state != null) || from_frontpage))|| (!offline && (!(state != null) || from_frontpage)) || (offline && state == -1)) && !(offline && prev_chan_player == chan)) || (offline && video_id == undefined)){ - prev_chan_player = chan; - from_frontpage = false; - Player.loaded = false; - Helper.log([ - "youtube_listener", - "Received: ", - obj, - "paused variable: " + paused, - "mobile_beginning variable: " + mobile_beginning]); try{ - Helper.log(["getVideoUrl(): " + Player.player.getVideoUrl().split('v=')[1]]); - } catch(e){} - Helper.log(["video_id variable: " + video_id]); - if(!obj.np){ - document.getElementById('song-title').innerText = "Empty channel. Add some songs!"; - document.title = "Zoff - the shared YouTube based radio"; - Helper.css("#channel-load", "display", "none"); - - if(!window.MSStream && !chromecastAvailable) { - Helper.removeClass("#player_overlay", "hide"); - } - try{ - if(!chromecastAvailable) { - Player.stopVideo(); - } - }catch(e){ - - } - //List.importOldList(channel.toLowerCase()); - } else if(paused || was_stopped){ - - Player.getTitle(obj.np[0].title, viewers); - //Player.setBGimage(video_id); - if(!Helper.mobilecheck()) { - Player.notifyUser(obj.np[0].id, obj.np[0].title); - } if(!chromecastAvailable) { Player.stopVideo(); } - video_id = obj.np[0].id; - videoSource = obj.np[0].hasOwnProperty("source") ? obj.np[0].source : "youtube"; - Player.np = { - id: video_id, - start: obj.np[0].start, - end: obj.np[0].end, - duration: obj.np[0].duration, - }; - if(!obj.np[0].hasOwnProperty("start")) { - Player.np.start = 0; - } - if(!obj.np[0].hasOwnProperty("end")) { - Player.np.end = Player.np.duration; - } + }catch(e){ - conf = obj.conf[0]; - time = obj.time; - seekTo = (time - conf.startTime) + Player.np.start; - startTime = time - conf.startTime; - song_title = obj.np[0].title; - duration = obj.np[0].duration; - Player.setThumbnail(conf, video_id); - Player.cueVideoById(video_id, duration); - //Player.setBGimage(video_id); - } else if(!paused){ - //Helper.log("gotten new song"); - if(previous_video_id === undefined) { - previous_video_id = obj.np[0].id; - } else if(previous_video_id != video_id) { - previous_video_id = video_id; - } - - video_id = obj.np[0].id; - Player.np = { - id: video_id, - start: obj.np[0].start, - end: obj.np[0].end, - duration: obj.np[0].duration, - }; - if(!obj.np[0].hasOwnProperty("start")) { - Player.np.start = 0; - } - if(!obj.np[0].hasOwnProperty("end")) { - Player.np.end = Player.np.duration; - } - conf = obj.conf[0]; - time = obj.time; - seekTo = (time - conf.startTime) + Player.np.start; - startTime = time - conf.startTime; - song_title = obj.np[0].title; - duration = obj.np[0].duration; - videoSource = obj.np[0].hasOwnProperty("source") ? obj.np[0].source : "youtube"; - Player.setThumbnail(conf, video_id); - if(mobile_beginning && Helper.mobilecheck() && seekTo === 0 && !chromecastAvailable) { - seekTo = 1 + Player.np.start; - } - - try{ - if(full_playlist[0].id == video_id && !mobile_beginning){ - List.song_change(full_playlist[0].added); - } - if(!client) Suggestions.fetchYoutubeSuggests(video_id); - }catch(e){} - - Player.getTitle(song_title, viewers); - if(player_ready && !window.MSStream) { - try { - var compared; - var prev_state = state; - try { - compared = Player.player.getVideoUrl().split('v=')[1] != video_id; - } catch(e) { - compared = true; - } - if(prev_state == 2 && !chromecastAvailable) { - Player.stopVideo(); - was_stopped = true; - Player.cueVideoById(video_id, duration); - if(!durationBegun) { - Player.durationSetter(); - } - } else { - if(compared || chromecastAvailable){ - if(paused && !chromecastAvailable){ - Player.cueVideoById(video_id, duration); - } else { - Player.loadVideoById(video_id, duration); - Player.seekTo(seekTo); - } - if(!Helper.mobilecheck()) { - Player.notifyUser(video_id, song_title); - } - } - if(!paused){ - if(((!mobile_beginning || chromecastAvailable) && prev_state != 2) && autoplay && videoSource != "soundcloud") { - Player.playVideo(); - } - if(!durationBegun) { - Player.durationSetter(); - } - } - - if(Player.player.getDuration() > seekTo || Player.player.getDuration() === 0 || chromecastAvailable || Player.player.getCurrentTime() != seekTo) { - Player.seekTo(seekTo); - } - Player.after_load = video_id; - - if(!Player.loaded) { - setTimeout(function(){Player.loaded = true;},500); - } - } - }catch(e) { - if(chromecastAvailable && !paused) { - Player.loadVideoById(video_id, duration); - Player.seekTo(seekTo); - } - if(!durationBegun && !chromecastAvailable) { - Player.durationSetter(); - } - } - } else { - if(!autoplay) { - Player.stopVideo(); - } else if(player_ready){ - Player.seekTo(seekTo); - } - Player.getTitle(song_title, viewers); - } } - } else { - if(!durationBegun) { - Player.durationSetter(); - } - duration = Player.player.getDuration(); } - if(Object.keys(obj).length == 0) { - paused = false; - empty_clear = true; - } else { - empty_clear = false; + if(obj.conf != undefined) { + conf = obj.conf[0]; } - try { - document.getElementById("play").focus(); - console.log("focused"); - if(videoSource == "soundcloud") { - Player.player.stopVideo(); + time = obj.time; + seekTo = (time - conf.startTime) + Player.np.start; + startTime = time - conf.startTime; + + + // Play video/autoplay video + if(obj.np != undefined) { + Player.getTitle(song_title, viewers); + if(((embed && autplay) || !embed ) && !offline && !was_stopped) { + console.log("loadVideoById \nwas_stopped=",was_stopped,"\noffline=",offline) + Player.loadVideoById(Player.np.id, duration, Player.np.start, Player.np.end); } else { - SC.Widget(Player.soundcloud_player).pause(); + console.log("cueVideoById \nwas_stopped=",was_stopped,"\noffline=",offline) + Player.cueVideoById(Player.np.id, duration, Player.np.start, Player.np.end); } - } catch(e) {} + } }, setThumbnail: function(conf, video_id) { @@ -288,13 +101,15 @@ var Player = { Helper.log(["getVideoUrl(): " + Player.player.getVideoUrl().split('v=')[1]]); } catch(e){} Helper.log(["video_id variable: " + video_id]); + switch(newState.data) { case YT.PlayerState.UNSTARTED: break; case YT.PlayerState.ENDED: playing = false; paused = false; - + was_stopped = false; + console.log(362, "was stopped", was_stopped); if(!offline) { /*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true); if(u == undefined) u = "";*/ @@ -305,8 +120,9 @@ var Player = { break; case YT.PlayerState.PLAYING: if(videoSource == "soundcloud") { - console.log("Supposed to play soundcloud not youtube"); Player.player.stopVideo(); + //was_stopped = false; + console.log(362, "was stopped", was_stopped); return; } if(embed) { @@ -351,6 +167,8 @@ var Player = { end_programmatically = false; } else { if(!chromecastAvailable){ + was_stopped = true; + console.log(417, "was stopped", was_stopped); if(beginning && mobile_beginning) { Helper.css("#playpause", "visibility", "visible"); Helper.css("#playpause", "pointer-events", "all"); @@ -388,9 +206,7 @@ var Player = { } //Playercontrols.play_pause(); } else { - console.log(videoSource); if(videoSource == "soundcloud") { - console.log("you need to play now"); SC.Widget(document.querySelector("#soundcloud_player")).play(); } else { Player.player.playVideo(); @@ -399,7 +215,6 @@ var Player = { }, pauseVideo: function(){ - console.log("pause"); if(chromecastAvailable){ castSession.sendMessage("urn:x-cast:zoff.me", {type: "pauseVideo"}); if(document.getElementById("play").classList.contains("hide")){ @@ -408,10 +223,8 @@ var Player = { } //Playercontrols.play_pause(); } else { - console.log(videoSource); paused = true; if(videoSource == "soundcloud") { - console.log("you need to pause now"); SC.Widget(document.querySelector("#soundcloud_player")).pause(); } else { Player.player.pauseVideo(); @@ -429,8 +242,64 @@ var Player = { } }, + loadSoundCloud: function(id, this_duration, start, end, _autoplay) { + try { + if(SC == null) return; + } catch(e) { + return; + } + Player.stopVideo(); + if(_autoplay) was_stopped = false; + Helper.removeClass(document.getElementById("player_overlay"), "hide"); + document.getElementById("player_overlay_text").innerText = "Loading SoundCloud"; + Helper.css(document.getElementById("player_overlay"), "background-color", "#2d2d2d"); + if(Player.soundcloud_player.src.indexOf(id) > -1) { + if(start == undefined) start = 0; + if(seekTo == undefined) seekTo = 0; + SC.Widget(Player.soundcloud_player).seekTo((seekTo) * 1000); + SC.Widget(Player.soundcloud_player).setVolume(embed ? 100 : Crypt.get_volume()); + soundcloud_loading = false; + if(_autoplay) { + SC.Widget(Player.soundcloud_player).isPaused(function(paused) { + if(paused) SC.Widget(Player.soundcloud_player).play(); + }); + } + } else { + var _autoAdd = "false"; + if(_autoplay) { + _autoAdd = "true"; + Helper.removeClass("#player_loader_container", "hide"); + } + SC.Widget(Player.soundcloud_player).unbind(SC.Widget.Events.FINISH, Player.soundcloudFinish); + SC.Widget(Player.soundcloud_player).unbind(SC.Widget.Events.PAUSE, Player.soundcloudPause); + SC.Widget(Player.soundcloud_player).unbind(SC.Widget.Events.PLAY, Player.soundcloudPlay); + document.querySelector("#soundcloud_container").innerHTML = ''; + Player.soundcloud_player = document.querySelector("#soundcloud_player"); + soundcloud_loading = true; + SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.FINISH, Player.soundcloudFinish); + SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.PAUSE, Player.soundcloudPause); + SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.PLAY, Player.soundcloudPlay); + SC.Widget(Player.soundcloud_player).setVolume(embed ? 100 : Crypt.get_volume()); + if(start == undefined) start = 0; + if(seekTo == undefined) seekTo = 0; + + SC.Widget(Player.soundcloud_player).seekTo((seekTo) * 1000); + if(!document.hasFocus()) { + SC.Widget(Player.soundcloud_player).play(); + } + } + if(_autoplay) was_stopped = false; + Helper.css(document.getElementById("player_overlay"), "background", "url('" + full_playlist[full_playlist.length - 1].thumbnail + "')"); + Helper.css(document.getElementById("player_overlay"), "background-size", "auto"); + Helper.css(document.getElementById("player_overlay"), "background-position", "20%"); + Helper.css(document.getElementById("player_overlay"), "background-color", "#2d2d2d"); + Helper.addClass("#player_overlay_text", "hide"); + }, + loadVideoById: function(id, this_duration, start, end){ - console.log("load video now"); + if(id == undefined) return; var s; var e; if(start) s = start; @@ -443,45 +312,33 @@ var Player = { chrome.cast.Image('https://img.youtube.com/vi/'+id+'/mqdefault.jpg'); } else { if(videoSource == "soundcloud") { - console.log(Player.soundcloud_player.src.indexOf(id), seekTo); - Player.stopVideo(); - Helper.removeClass(document.getElementById("player_overlay"), "hide"); - document.getElementById("player_overlay_text").innerText = "Loading SoundCloud"; - Helper.css(document.getElementById("player_overlay"), "background-color", "#2d2d2d"); - if(Player.soundcloud_player.src.indexOf(id) > -1) { - console.log("seekto " + seekTo + " start " + start); - if(start == undefined) start = 0; - if(seekTo == undefined) seekTo = 0; - SC.Widget(Player.soundcloud_player).seekTo((seekTo) * 1000); - } else { - console.log("loaded here"); - document.querySelector("#soundcloud_container").innerHTML = ''; - Player.soundcloud_player = document.querySelector("#soundcloud_player"); - soundcloud_loading = true; - SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.FINISH, Player.soundcloudFinish); - SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.PAUSE, Player.soundcloudPause); - SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.PLAY, Player.soundcloudPlay); - SC.Widget(Player.soundcloud_player).setVolume(embed ? 100 : Crypt.get_volume()); - console.log(start, seekTo); - if(start == undefined) start = 0; - if(seekTo == undefined) seekTo = 0; - - SC.Widget(Player.soundcloud_player).seekTo((seekTo) * 1000); + try { + Player.player.stopVideo(); + } catch(e) { } - Helper.css(document.getElementById("player_overlay"), "background", "url('" + full_playlist[full_playlist.length - 1].thumbnail + "')"); - Helper.css(document.getElementById("player_overlay"), "background-size", "auto"); - Helper.css(document.getElementById("player_overlay"), "background-position", "20%"); - Helper.css(document.getElementById("player_overlay"), "background-color", "#2d2d2d"); - Helper.addClass("#player_overlay_text", "hide"); + + was_stopped = false; + Player.loadSoundCloud(id, this_duration, start, end, true); //SC.Widget(Player.soundcloud_player).play(); } else { //window.player = Player.player; + try { + SC.Widget(Player.soundcloud_player).pause(); + } catch(e) { + } Helper.addClass(document.getElementById("player_overlay"), "hide"); Helper.css(document.getElementById("player_overlay"), "background", "none"); - Helper.removeClass("#player_overlay_text", "hide"); - Player.player.loadVideoById({'videoId': id, 'startSeconds': s, 'endSeconds': e}); + Helper.addClass("#player_overlay_text", "hide"); + Helper.addClass(document.getElementById("player_overlay"), "hide"); + try { + if(Player.player.getVideoUrl().indexOf(id) > -1) { + Player.player.seekTo(seekTo); + } else { + Player.player.loadVideoById({'videoId': id, 'startSeconds': s, 'endSeconds': e}); + } + } catch(e) { + } + was_stopped = false; } } if(offline) { @@ -499,48 +356,26 @@ var Player = { else e = Player.np.end; if(videoSource == "soundcloud") { - if(videoSource == "soundcloud") { - console.log(Player.soundcloud_player.src.indexOf(id), seekTo); - Player.stopVideo(); - Helper.removeClass(document.getElementById("player_overlay"), "hide"); - document.getElementById("player_overlay_text").innerText = "Loading SoundCloud"; - Helper.css(document.getElementById("player_overlay"), "background-color", "#2d2d2d"); - if(Player.soundcloud_player.src.indexOf(id) > -1) { - console.log("seekto " + seekTo + " start " + start); - if(start == undefined) start = 0; - if(seekTo == undefined) seekTo = 0; - SC.Widget(Player.soundcloud_player).seekTo((seekTo) * 1000); - } else { - console.log("loaded here"); - document.querySelector("#soundcloud_container").innerHTML = ''; - Player.soundcloud_player = document.querySelector("#soundcloud_player"); - soundcloud_loading = true; - SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.FINISH, Player.soundcloudFinish); - SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.PAUSE, Player.soundcloudPause); - SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.PLAY, Player.soundcloudPlay); - SC.Widget(Player.soundcloud_player).setVolume(embed ? 100 : Crypt.get_volume()); - console.log(start, seekTo); - if(start == undefined) start = 0; - if(seekTo == undefined) seekTo = 0; - SC.Widget(Player.soundcloud_player).seekTo((seekTo) * 1000); - } - Helper.css(document.getElementById("player_overlay"), "background", "url('" + full_playlist[full_playlist.length - 1].thumbnail + "')"); - Helper.css(document.getElementById("player_overlay"), "background-size", "auto"); - Helper.css(document.getElementById("player_overlay"), "background-position", "20%"); - Helper.css(document.getElementById("player_overlay"), "background-color", "#2d2d2d"); - Helper.addClass("#player_overlay_text", "hide"); - //SC.Widget(Player.soundcloud_player).play(); - } else { - //window.player = Player.player; - Helper.addClass(document.getElementById("player_overlay"), "hide"); - Helper.css(document.getElementById("player_overlay"), "background", "none"); - Helper.removeClass("#player_overlay_text", "hide"); - Player.player.loadVideoById({'videoId': id, 'startSeconds': s, 'endSeconds': e}); + try { + Player.player.stopVideo(); + } catch(e) { } + Player.loadSoundCloud(id, this_duration, start, end, false); + //SC.Widget(Player.soundcloud_player).play(); + } else { - Player.player.cueVideoById({'videoId': id, 'startSeconds': s, 'endSeconds': e}); + try { + SC.Widget(Player.soundcloud_player).pause(); + } catch(e) { + } + Helper.addClass(document.getElementById("player_overlay"), "hide"); + Helper.css(document.getElementById("player_overlay"), "background", "none"); + Helper.addClass("#player_overlay_text", "hide"); + Helper.addClass(document.getElementById("player_overlay"), "hide"); + try { + Player.player.cueVideoById({'videoId': id, 'startSeconds': s, 'endSeconds': e}); + } catch(e) { + } } }, @@ -708,8 +543,10 @@ var Player = { playing = false; end_programmatically = false; } else { + was_stopped = true; + console.log(785, "was stopped", was_stopped); if(!chromecastAvailable){ - if(beginning && mobile_beginning) { + if(Helper.mobilecheck()) { Helper.css("#playpause", "visibility", "visible"); Helper.css("#playpause", "pointer-events", "all"); Helper.css("#channel-load", "display", "none"); @@ -727,13 +564,12 @@ var Player = { }, soundcloudPlay: function() { - console.log("playing"); - console.log(videoSource, soundcloud_loading); + Helper.addClass("#player_loader_container", "hide"); if(videoSource == "youtube") { SC.Widget(Player.soundcloud_player).pause(); } else if(soundcloud_loading){ SC.Widget(Player.soundcloud_player).seekTo((seekTo) * 1000); - console.log("We need to skip !", Player.np.start, seekTo) + SC.Widget(Player.soundcloud_player).setVolume(embed ? 100 : Crypt.get_volume()); soundcloud_loading = false; } if(embed) { @@ -761,27 +597,33 @@ var Player = { Helper.addClass("#play", "hide"); Helper.removeClass("#pause", "hide"); } - if((paused || was_stopped) && !offline) { + if((was_stopped) && !offline) { /*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true); if(u == undefined) u = "";*/ + console.log("Emit for position"); + paused = false; + was_stopped = false; socket.emit('pos', {channel: chan.toLowerCase()}); + } else { paused = false; was_stopped = false; } + }, soundcloudReady: function() { - console.log("loaded"); SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.FINISH, Player.soundcloudFinish); SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.PAUSE, Player.soundcloudPause); SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.PLAY, Player.soundcloudPlay); - SC.Widget(Player.soundcloud_player).load("https://soundcloud.com/kid-astray/kid-astray-back-to-the-ordinary", { + /*SC.Widget(Player.soundcloud_player).load("https://soundcloud.com/kid-astray/kid-astray-back-to-the-ordinary", { auto_play: false, buying:false, sharing:false, download:false, show_user:false, - }); + });*/ + + if(videoSource == "soundcloud" && videoId != undefined) Player.loadVideoById(videoId, Player.np.duration, Player.np.start, Player.np.end); }, onPlayerReady: function(event) { @@ -956,7 +798,7 @@ var Player = { } else { currDurr = Player.player.getCurrentTime() !== undefined ? Math.floor(Player.player.getCurrentTime()) : seekTo; } - console.log(Player.np.start, currDurr, Player.np.end); + if(currDurr - Player.np.start > duration && !offline) { currDurr = duration - Player.np.start; } @@ -986,11 +828,13 @@ var Player = { if(videoSource == "soundcloud") { SC.Widget(Player.soundcloud_player).isPaused(function(paused) { - if(currDurr > Player.np.end && !paused) { + if(Math.ceil(currDurr) > Player.np.end && !paused) { end_programmatically = true; if(!offline) { SC.Widget(Player.soundcloud_player).pause(); + was_stopped = false; + console.log(1071, "was stopped", was_stopped); /*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true); if(u == undefined) u = "";*/ socket.emit("end", {id: video_id, channel: chan.toLowerCase()}); @@ -1005,6 +849,8 @@ var Player = { if(!offline) { Player.player.pauseVideo(); + was_stopped = false; + console.log(1086, "was stopped", was_stopped); /*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true); if(u == undefined) u = "";*/ socket.emit("end", {id: video_id, channel: chan.toLowerCase()}); @@ -1036,7 +882,6 @@ var Player = { firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); tag.onload = function() { - console.log("loaded script") if(document.querySelectorAll("script[src='https://w.soundcloud.com/player/api.js']").length == 1) { SC.Widget(Player.soundcloud_player); SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.READY, Player.soundcloudReady); @@ -1070,7 +915,6 @@ var Player = { SC = _SC1; _SC1 = _SC2; } - console.log("loaded1") window._SC1 = _SC1; _SC1.initialize({ client_id: '***REMOVED***' diff --git a/server/public/assets/js/search.js b/server/public/assets/js/search.js index db641278..6bd3c129 100755 --- a/server/public/assets/js/search.js +++ b/server/public/assets/js/search.js @@ -99,7 +99,7 @@ var Search = { var duration=song.contentDetails.duration; var secs=Search.durationToSeconds(duration); var _temp_duration = Helper.secondsToOther(secs); - if(!longsongs || secs<720){ + if((longsongs != undefined && !longsongs) || secs<720){ var title=song.snippet.title; var enc_title=title;//encodeURIComponent(title).replace(/'/g, "\\\'"); var id=song.id; @@ -208,8 +208,11 @@ var Search = { //var secs=Search.durationToSeconds(duration); var secs = duration; var _temp_duration = Helper.secondsToOther(secs); - if(!longsongs || secs<720){ + if((longsongs != undefined && !longsongs) || secs<720){ var title=song.title; + if(title.indexOf(song.user.username) == -1) { + title = song.user.username + " - " + title; + } var enc_title=title;//encodeURIComponent(title).replace(/'/g, "\\\'"); var id=song.permalink_url; //duration = duration.replace("PT","").replace("H","h ").replace("M","m ").replace("S","s"); @@ -608,7 +611,7 @@ addVideos: function(ids){ for(var i = 0; i < response.items.length; i++) { var song = response.items[i]; var duration=Search.durationToSeconds(song.contentDetails.duration); - if(!longsongs || duration<720){ + if((longsongs != undefined && !longsongs) || duration<720){ enc_title= song.snippet.title;//encodeURIComponent(song.snippet.title); //Search.submit(song.id, enc_title, duration, playlist, i); x += 1; diff --git a/server/public/partials/channel/players.handlebars b/server/public/partials/channel/players.handlebars index 78bf8d8b..ae206d65 100644 --- a/server/public/partials/channel/players.handlebars +++ b/server/public/partials/channel/players.handlebars @@ -19,6 +19,11 @@