Soundcloud-player + soundcloud-search added

This commit is contained in:
Kasper Rynning-Tønnesen
2018-05-03 14:27:54 +02:00
parent 93fc30dada
commit 9b1e91783e
19 changed files with 863 additions and 356 deletions

View File

@@ -19,6 +19,24 @@ function remove_name_from_db(guid, name) {
}); });
} }
function isUrl(str) {
var pattern = new RegExp("\\b(((ht|f)tp(s?)\\:\\/\\/|~\\/|\\/)|www.)" +
"(\\w+:\\w+@)?(([-\\w]+\\.)+(com|org|net|gov" +
"|mil|biz|info|mobi|name|aero|jobs|museum" +
"|travel|[a-z]{2}))(:[\\d]{1,5})?" +
"(((\\/([-\\w~!$+|.,=]|%[a-f\\d]{2})+)+|\\/)+|\\?|#)?" +
"((\\?([-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" +
"([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)" +
"(&(?:[-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" +
"([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)*)*" +
"(#([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)?\\b");
if(!pattern.test(str)) {
return false;
} else {
return true;
}
}
function getSession(socket) { function getSession(socket) {
try { try {
/*var cookieParser = require("cookie-parser"); /*var cookieParser = require("cookie-parser");
@@ -273,6 +291,7 @@ function removeSessionAdminPass(id, channel, callback) {
}); });
} }
module.exports.isUrl = isUrl;
module.exports.removeEmojis = removeEmojis; module.exports.removeEmojis = removeEmojis;
module.exports.getSessionChatPass = getSessionChatPass; module.exports.getSessionChatPass = getSessionChatPass;
module.exports.setSessionChatPass = setSessionChatPass; module.exports.setSessionChatPass = setSessionChatPass;

View File

@@ -84,7 +84,9 @@ function list(msg, guid, coll, offline, socket) {
db.collection(coll + "_settings").insert(configs, function(err, docs){ db.collection(coll + "_settings").insert(configs, function(err, docs){
socket.join(coll); socket.join(coll);
List.send_list(coll, socket, true, false, true); List.send_list(coll, socket, true, false, true);
db.collection("frontpage_lists").insert({"_id": coll, "count" : 0, "frontpage": true, "accessed": Functions.get_time(), "viewers": 1}); db.collection("frontpage_lists").insert({"_id": coll, "count" : 0, "frontpage": true, "accessed": Functions.get_time(), "viewers": 1}, function(e,d){
console.log("added new channel", coll);
});
Functions.check_inlist(coll, guid, socket, offline); Functions.check_inlist(coll, guid, socket, offline);
}); });
}); });

View File

@@ -298,7 +298,9 @@ function add_function(arr, coll, guid, offline, socket) {
if(typeof(arr.id) != "string" || typeof(arr.start) != "number" || if(typeof(arr.id) != "string" || typeof(arr.start) != "number" ||
typeof(arr.end) != "number" || typeof(arr.title) != "string" || typeof(arr.end) != "number" || typeof(arr.title) != "string" ||
typeof(arr.list) != "string" || typeof(arr.duration) != "number") { typeof(arr.list) != "string" || typeof(arr.duration) != "number" ||
typeof(arr.source) != "string" ||
(arr.source == "soundcloud" && (!arr.hasOwnProperty("thumbnail") || !Functions.isUrl(arr.thumbnail)))) {
var result = { var result = {
start: { start: {
expected: "number or string that can be cast to int", expected: "number or string that can be cast to int",
@@ -327,6 +329,14 @@ function add_function(arr, coll, guid, offline, socket) {
adminpass: { adminpass: {
expected: "string", expected: "string",
got: arr.hasOwnProperty("adminpass") ? typeof(arr.adminpass) : undefined got: arr.hasOwnProperty("adminpass") ? typeof(arr.adminpass) : undefined
},
source: {
expected: "string (youtube or soundcloud)",
got: arr.hasOwnProperty("source") ? typeof(arr.source) : undefined
},
thumbnail: {
expected: "url if source == soundcloud",
got: arr.hasOwnProperty("thumbnail") ? typeof(arr.thumbnail) : undefined
} }
}; };
socket.emit('update_required', result); socket.emit('update_required', result);
@@ -350,6 +360,7 @@ function add_function(arr, coll, guid, offline, socket) {
var title = arr.title; var title = arr.title;
var hash = Functions.hash_pass(Functions.hash_pass(Functions.decrypt_string(arr.adminpass), true)); var hash = Functions.hash_pass(Functions.hash_pass(Functions.decrypt_string(arr.adminpass), true));
var duration = parseInt(arr.duration); var duration = parseInt(arr.duration);
var source = arr.source;
/*db.collection(coll + "_settings").find(function(err, docs) /*db.collection(coll + "_settings").find(function(err, docs)
{*/ {*/
conf = docs; conf = docs;
@@ -366,7 +377,10 @@ function add_function(arr, coll, guid, offline, socket) {
} else { } else {
np = false; np = false;
} }
var new_song = {"added": added,"guids":guids,"id":id,"now_playing":np,"title":title,"votes":votes, "duration":duration, "start": parseInt(start), "end": parseInt(end), "type": "video"}; var new_song = {"added": added,"guids":guids,"id":id,"now_playing":np,"title":title,"votes":votes, "duration":duration, "start": parseInt(start), "end": parseInt(end), "type": "video", "source": source};
if(source == "soundcloud") new_song.thumbnail = arr.thumbnail;
console.log(new_song);
//return;
db.collection(coll).update({id: id}, new_song, {upsert: true}, function(err, docs){ db.collection(coll).update({id: id}, new_song, {upsert: true}, function(err, docs){
new_song._id = "asd"; new_song._id = "asd";
if(np) { if(np) {
@@ -374,10 +388,10 @@ function add_function(arr, coll, guid, offline, socket) {
db.collection(coll + "_settings").update({ id: "config" }, {$set:{startTime: Functions.get_time()}}); db.collection(coll + "_settings").update({ id: "config" }, {$set:{startTime: Functions.get_time()}});
List.send_play(coll, undefined); List.send_play(coll, undefined);
Frontpage.update_frontpage(coll, id, title); Frontpage.update_frontpage(coll, id, title);
Search.get_correct_info(new_song, coll, false); if(source != "soundcloud") Search.get_correct_info(new_song, coll, false);
} else { } else {
io.to(coll).emit("channel", {type: "added", value: new_song}); io.to(coll).emit("channel", {type: "added", value: new_song});
Search.get_correct_info(new_song, coll, true); if(source != "soundcloud") Search.get_correct_info(new_song, coll, true);
} }
db.collection("frontpage_lists").update({_id:coll}, {$inc:{count:1}, $set:{accessed: Functions.get_time()}}, {upsert:true}, function(err, docs){}); db.collection("frontpage_lists").update({_id:coll}, {$inc:{count:1}, $set:{accessed: Functions.get_time()}}, {upsert:true}, function(err, docs){});
List.getNextSong(coll); List.getNextSong(coll);

View File

@@ -82,6 +82,7 @@ function check_error_video(msg, channel) {
}; };
return; return;
} }
if(msg.source == "soundcloud") return;
channel = channel.replace(/ /g,''); channel = channel.replace(/ /g,'');
request({ request({
type: "GET", type: "GET",

View File

@@ -1,23 +1,7 @@
function isUrl(str) {
var pattern = new RegExp("\\b(((ht|f)tp(s?)\\:\\/\\/|~\\/|\\/)|www.)" +
"(\\w+:\\w+@)?(([-\\w]+\\.)+(com|org|net|gov" +
"|mil|biz|info|mobi|name|aero|jobs|museum" +
"|travel|[a-z]{2}))(:[\\d]{1,5})?" +
"(((\\/([-\\w~!$+|.,=]|%[a-f\\d]{2})+)+|\\/)+|\\?|#)?" +
"((\\?([-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" +
"([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)" +
"(&(?:[-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" +
"([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)*)*" +
"(#([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)?\\b");
if(!pattern.test(str)) {
return false;
} else {
return true;
}
}
function thumbnail(msg, coll, guid, offline, socket) { function thumbnail(msg, coll, guid, offline, socket) {
if(msg.thumbnail != undefined && msg.channel && msg.channel != undefined && isUrl(msg.thumbnail)){ if(msg.thumbnail != undefined && msg.channel && msg.channel != undefined && Functions.isUrl(msg.thumbnail)){
if(typeof(msg.channel) != "string" || typeof(msg.thumbnail) != "string") if(typeof(msg.channel) != "string" || typeof(msg.thumbnail) != "string")
{ {
var result = { var result = {

View File

@@ -1480,7 +1480,7 @@ margin:-1px;
} }
#inner-results { #inner-results {
height: calc(100vh - 64px - 76px); height: calc(100vh - 64px - 76px - 64px);
overflow-y: scroll; overflow-y: scroll;
overflow-x: hidden; overflow-x: hidden;
} }
@@ -1602,6 +1602,38 @@ ul #chat-log{
align-items: center; align-items: center;
} }
.search_results {
background: black;
position: absolute;
width: 100vw;
top: 64px;
/* height: 100vh; */
}
.results-tabs li {
width: 50%;
text-align: center;
}
.results-tabs .indicator {
height: 2px;
z-index: 9;
position: absolute;
margin-left: -16px;
margin-top: 64px;
width: 50%;
}
#results_soundcloud {
padding: 0;
}
#results_soundcloud #inner-results {
height: calc(100vh - 64px - 76px);
}
#search_loader_inner{ #search_loader_inner{
display: flex; display: flex;
} }
@@ -2011,11 +2043,15 @@ nav ul li:hover, nav ul li.active {
position: absolute; position: absolute;
width: 100%; width: 100%;
top: 64px; top: 64px;
max-height: calc(100vh - 64px); max-height: calc(100vh - 128px);
overflow: overlay; overflow: overlay;
overflow-x: hidden; overflow-x: hidden;
/* z-index: 99999999; */ /* z-index: 99999999; */
} }
#results_soundcloud {
max-height: calc(100vh - 64px - 64px);
}
.result:hover, .hoverResults { .result:hover, .hoverResults {
background-color: rgba(0,0,0,0.4); background-color: rgba(0,0,0,0.4);
} }

View File

@@ -77,6 +77,7 @@ var Channel = {
} }
Helper.tabs('.chatTabs'); Helper.tabs('.chatTabs');
Helper.tabs('.results-tabs');
} }
var sidenavElem = document.getElementsByClassName("sidenav")[0]; var sidenavElem = document.getElementsByClassName("sidenav")[0];
M.Sidenav.init(sidenavElem, { M.Sidenav.init(sidenavElem, {
@@ -165,6 +166,7 @@ var Channel = {
Playercontrols.initSlider(); Playercontrols.initSlider();
if(player_ready) { if(player_ready) {
Player.player.setVolume(Crypt.get_volume()); Player.player.setVolume(Crypt.get_volume());
SC.Widget(Player.soundcloud_player).setVolume(Crypt.get_volume());
} }
Helper.removeClass(".video-container", "no-opacity"); Helper.removeClass(".video-container", "no-opacity");
var codeURL = "https://remote."+window.location.hostname+"/"+id; var codeURL = "https://remote."+window.location.hostname+"/"+id;

View File

@@ -26,6 +26,7 @@ var Frontpage = {
document.getElementById("channel-list-container").insertAdjacentHTML("beforeend", "<p>No channels yet</p>"); document.getElementById("channel-list-container").insertAdjacentHTML("beforeend", "<p>No channels yet</p>");
} else { } else {
Frontpage.populate_channels(msg.channels, true); Frontpage.populate_channels(msg.channels, true);
console.log(msg.channels);
} }
Frontpage.set_viewers(msg.viewers); Frontpage.set_viewers(msg.viewers);
}, },
@@ -77,10 +78,15 @@ var Frontpage = {
var id = lists[x].id; var id = lists[x].id;
var viewers = lists[x].viewers; var viewers = lists[x].viewers;
var description = lists[x].description; var description = lists[x].description;
var img = "background-image:url('https://img.youtube.com/vi/"+id+"/hqdefault.jpg');"; var img;
if(id.indexOf("soundcloud.com") > -1) {
img = "background-image:url('http://icons.iconarchive.com/icons/uiconstock/socialmedia/128/Soundcloud-icon.png');";
} else {
img = "background-image:url('https://img.youtube.com/vi/"+id+"/hqdefault.jpg');";
if(lists[x].thumbnail) { if(lists[x].thumbnail) {
img = "background-image:url('" + lists[x].thumbnail + "');"; img = "background-image:url('" + lists[x].thumbnail + "');";
} }
}
var song_count = lists[x].count; var song_count = lists[x].count;
var card = document.createElement("div"); var card = document.createElement("div");

View File

@@ -84,6 +84,7 @@ function hide_native(way) {
Helper.setHtml("#chromecast_text", "Playing on<br>" + castSession.La.friendlyName); Helper.setHtml("#chromecast_text", "Playing on<br>" + castSession.La.friendlyName);
} }
Player.player.setVolume(100); Player.player.setVolume(100);
SC.Widget(Player.soundcloud_player).setVolume(100);
Helper.toggleClass("#player_overlay_text", "hide"); Helper.toggleClass("#player_overlay_text", "hide");
} else if(way == 0){ } else if(way == 0){
@@ -108,6 +109,7 @@ function hide_native(way) {
if(!Helper.mobilecheck()){ if(!Helper.mobilecheck()){
Player.player.setVolume(Crypt.get_volume()); Player.player.setVolume(Crypt.get_volume());
Playercontrols.visualVolume(Crypt.get_volume()); Playercontrols.visualVolume(Crypt.get_volume());
SC.Widget(Player.soundcloud_player).setVolume(Crypt.get_volume());
} }
Helper.addClass("#player_overlay", "hide"); Helper.addClass("#player_overlay", "hide");
Helper.toggleClass("#player_overlay_text", "hide"); Helper.toggleClass("#player_overlay_text", "hide");
@@ -235,6 +237,11 @@ function contextListener(that, event) {
} else if(top < 0) { } else if(top < 0) {
top = 15; top = 15;
} }
if(parent.getAttribute("data-video-source") == "soundcloud") {
Helper.addClass(".find-context-menu", "context-menu-disabled");
} else {
Helper.removeClass(".find-context-menu", "context-menu-disabled");
}
Helper.css(".context-menu-root", "left", left + "px"); Helper.css(".context-menu-root", "left", left + "px");
Helper.css(".context-menu-root", "top", top + "px"); Helper.css(".context-menu-root", "top", top + "px");
Helper.removeClass(".context-menu-root","hide"); Helper.removeClass(".context-menu-root","hide");
@@ -318,7 +325,7 @@ function del_ajax(id) {
}) })
} }
function add_ajax(id, title, duration, playlist, num, full_num, start, end) { function add_ajax(id, title, duration, playlist, num, full_num, start, end, source, thumbnail) {
/*var a = Crypt.get_pass(chan.toLowerCase()); /*var a = Crypt.get_pass(chan.toLowerCase());
var u = Crypt.get_userpass(chan.toLowerCase()); var u = Crypt.get_userpass(chan.toLowerCase());
if(a == undefined) a = ""; if(a == undefined) a = "";
@@ -332,6 +339,8 @@ function add_ajax(id, title, duration, playlist, num, full_num, start, end) {
duration: duration, duration: duration,
end_time: end, end_time: end,
start_time: start, start_time: start,
thumbnail: thumbnail,
source: source,
token: zoff_api_token token: zoff_api_token
}, },
headers: {"Content-Type": "application/json;charset=UTF-8"}, headers: {"Content-Type": "application/json;charset=UTF-8"},
@@ -901,9 +910,11 @@ function searchTimeout(event) {
} }
if(code == 13){ if(code == 13){
Search.search(search_input); Search.search(search_input);
Search.soundcloudSearch(search_input);
}else{ }else{
timeout_search = setTimeout(function(){ timeout_search = setTimeout(function(){
Search.search(search_input); Search.search(search_input);
Search.soundcloudSearch(search_input);
}, 1000); }, 1000);
} }
} }

View File

@@ -38,6 +38,7 @@ var Hostcontroller = {
if(arr.type == "volume") { if(arr.type == "volume") {
Playercontrols.visualVolume(arr.value); Playercontrols.visualVolume(arr.value);
Player.setVolume(arr.value); Player.setVolume(arr.value);
SC.Widget(Player.soundcloud_player).setVolume(arr.value);
localStorage.setItem("volume", arr.value); localStorage.setItem("volume", arr.value);
Playercontrols.choose_button(arr.value, false); Playercontrols.choose_button(arr.value, false);
} else if(arr.type == "channel") { } else if(arr.type == "channel") {

View File

@@ -245,7 +245,7 @@ var List = {
check_error_videos: function(i) { check_error_videos: function(i) {
//Helper.log("Empty-checker at " + i); //Helper.log("Empty-checker at " + i);
if(full_playlist.length == 0) return; if(full_playlist.length == 0 || full_playlist[i].source == "soundcloud") return;
Helper.ajax({ Helper.ajax({
method: "get", method: "get",
url: 'https://www.googleapis.com/youtube/v3/videos?id=' + full_playlist[i].id url: 'https://www.googleapis.com/youtube/v3/videos?id=' + full_playlist[i].id
@@ -255,7 +255,7 @@ var List = {
//Helper.log("Empty-checker items " + data.items.length); //Helper.log("Empty-checker items " + data.items.length);
if (data.items.length == 0) { if (data.items.length == 0) {
Helper.log(["Emtpy-checker error at " + full_playlist[i].id + " " + full_playlist[i].title]); Helper.log(["Emtpy-checker error at " + full_playlist[i].id + " " + full_playlist[i].title]);
socket.emit("error_video", {channel: chan.toLowerCase(), id: full_playlist[i].id, title: full_playlist[i].title}); socket.emit("error_video", {channel: chan.toLowerCase(), id: full_playlist[i].id, title: full_playlist[i].title, source: full_playlist[i].source});
} }
if(full_playlist.length > i + 1 && window.location.pathname != "/") { if(full_playlist.length > i + 1 && window.location.pathname != "/") {
List.check_error_videos(i + 1); List.check_error_videos(i + 1);
@@ -356,7 +356,7 @@ var List = {
full_playlist.push(now_playing); full_playlist.push(now_playing);
} }
if(document.querySelectorAll("#suggested-"+added.id).length > 0) { if(added.source != "soundcloud" && document.querySelectorAll("#suggested-"+added.id).length > 0) {
number_suggested = number_suggested - 1; number_suggested = number_suggested - 1;
if(number_suggested < 0) number_suggested = 0; if(number_suggested < 0) number_suggested = 0;
@@ -366,9 +366,9 @@ var List = {
} }
document.querySelector(".suggested-link span.badge.new.white").innerText = to_display; document.querySelector(".suggested-link span.badge.new.white").innerText = to_display;
Helper.removeElement("#suggested-"+added.id);
} }
Helper.removeElement("#suggested-"+added.id);
if(List.empty){ if(List.empty){
List.empty = false; List.empty = false;
} }
@@ -832,6 +832,7 @@ var List = {
}, },
addToYoutubePlaylist: function(playlist_id, full_playlist, num, request_url) { addToYoutubePlaylist: function(playlist_id, full_playlist, num, request_url) {
if(full_playlist[num].source != "soundcloud") {
var _data = JSON.stringify({ var _data = JSON.stringify({
'snippet': { 'snippet': {
'playlistId': playlist_id, 'playlistId': playlist_id,
@@ -863,12 +864,28 @@ var List = {
//setTimeout(function(){ //setTimeout(function(){
Helper.removeClass(".current_number", "hide"); Helper.removeClass(".current_number", "hide");
document.querySelector(".current_number").innerText = (num + 1) + " of " + (full_playlist.length); document.querySelector(".current_number").innerText = (num + 1) + " of " + (full_playlist.length);
List.addToYoutubePlaylist(playlist_id, full_playlist, num + 1, request_url) List.addToYoutubePlaylist(playlist_id, full_playlist, num + 1, request_url);
//}, 50); //}, 50);
} }
} }
}); });
} 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", "<a target='_blank' class='btn light exported-playlist' href='https://www.youtube.com/playlist?list=" + playlist_id + "'>" + chan + "</a>");
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);
}
}
}, },
sortList: function() { sortList: function() {
@@ -899,6 +916,9 @@ var List = {
var video_title = _song_info.title; var video_title = _song_info.title;
var video_votes = _song_info.votes; var video_votes = _song_info.votes;
var video_thumb_url = "//img.youtube.com/vi/"+video_id+"/mqdefault.jpg"; var video_thumb_url = "//img.youtube.com/vi/"+video_id+"/mqdefault.jpg";
if(_song_info.source == "soundcloud") {
video_thumb_url = _song_info.thumbnail;
}
var video_thumb = "background-image:url('" + video_thumb_url + "');"; var video_thumb = "background-image:url('" + video_thumb_url + "');";
var song = document.createElement("div"); var song = document.createElement("div");
song.innerHTML = list_html; song.innerHTML = list_html;
@@ -924,9 +944,11 @@ var List = {
song.querySelector(".list-image").setAttribute(image_attr,video_thumb); song.querySelector(".list-image").setAttribute(image_attr,video_thumb);
if(list){ if(list){
song.querySelector("#list-song")
song.querySelector(".list-votes").innerText = video_votes; song.querySelector(".list-votes").innerText = video_votes;
song.querySelector("#list-song").setAttribute("data-video-id", video_id); song.querySelector("#list-song").setAttribute("data-video-id", video_id);
song.querySelector("#list-song").setAttribute("data-video-type", "song"); song.querySelector("#list-song").setAttribute("data-video-type", "song");
song.querySelector("#list-song").setAttribute("data-video-source", _song_info.source);
song.querySelector("#list-song").setAttribute("id", video_id); song.querySelector("#list-song").setAttribute("id", video_id);
song.classList.remove("hide"); song.classList.remove("hide");
song.querySelector(".vote-container").setAttribute("title", video_title); song.querySelector(".vote-container").setAttribute("title", video_title);

View File

@@ -5,6 +5,10 @@ var client = false;
if(domain.length > 0 && domain[0] == "client") { if(domain.length > 0 && domain[0] == "client") {
client = true; client = true;
} }
var _SC1;
var _SC2;
var firstLoad = "";
var videoSource;
var dynamicListeners = {}; var dynamicListeners = {};
var socket_connected = false; var socket_connected = false;
var hasadmin = 0; var hasadmin = 0;
@@ -420,6 +424,7 @@ addListener("submit", "#description_form", function(event){
}); });
addListener("click", "#playpause-overlay", function(){ addListener("click", "#playpause-overlay", function(){
console.log("playpause");
if(document.getElementById("play-overlay").classList.contains("hide")){ if(document.getElementById("play-overlay").classList.contains("hide")){
Player.pauseVideo(); Player.pauseVideo();
Helper.toggleClass("#play-overlay", "hide"); Helper.toggleClass("#play-overlay", "hide");
@@ -488,6 +493,9 @@ addListener("click", ".copy-context-menu", function(e) {
addListener("click", ".find-context-menu", function(e) { addListener("click", ".find-context-menu", function(e) {
this.preventDefault(); this.preventDefault();
var that = e; var that = e;
if(that.classList.contains("context-menu-disabled")) {
return;
}
var parent = that.parentElement; var parent = that.parentElement;
var id = parent.getAttribute("data-id"); var id = parent.getAttribute("data-id");
Search.search(id, false, true); Search.search(id, false, true);
@@ -580,6 +588,12 @@ document.addEventListener("keydown", function(event) {
document.querySelector("#import") != document.activeElement && document.querySelector("#import") != document.activeElement &&
document.querySelector("#find_input") != document.activeElement && document.querySelector("#find_input") != document.activeElement &&
document.querySelector("#import_spotify") != document.activeElement) { document.querySelector("#import_spotify") != document.activeElement) {
console.log("play pause space", videoSource);
if(videoSource == "soundcloud") {
event.preventDefault();
Playercontrols.play_pause();
return false;
}
if(Player.player.getPlayerState() == 1) { if(Player.player.getPlayerState() == 1) {
event.preventDefault(); event.preventDefault();
Player.player.pauseVideo(); Player.player.pauseVideo();
@@ -741,6 +755,10 @@ addListener("click", ".modal-close", function(event){
this.preventDefault(); this.preventDefault();
}); });
addListener("click", "#player_overlay", function(event) {
if(videoSource == "soundcloud") Playercontrols.play_pause();
});
/* /*
addListener("change", ".password_protected", function(event) { addListener("change", ".password_protected", function(event) {
this.preventDefault(); this.preventDefault();
@@ -1254,9 +1272,16 @@ addListener("click", ".result-object", function(e){
var original_length = e.getAttribute("data-video-length"); var original_length = e.getAttribute("data-video-length");
var start = parseInt(e.querySelector(".result-start").value); var start = parseInt(e.querySelector(".result-start").value);
var end = parseInt(e.querySelector(".result-end").value); var end = parseInt(e.querySelector(".result-end").value);
var source = "youtube";
var thumbnail;
if(e.getAttribute("data-type-source") != undefined) {
source = "soundcloud";
thumbnail = e.getAttribute("data-type-thumbnail");
}
if(end > original_length) { if(end > original_length) {
end = original_length; end = original_length;
} }
console.log(source);
if(start > end) { if(start > end) {
M.toast({html: "Start can't be before the end..", displayLength: 3000, classes: "red lighten"}); M.toast({html: "Start can't be before the end..", displayLength: 3000, classes: "red lighten"});
} else if(start < 0) { } else if(start < 0) {
@@ -1264,7 +1289,7 @@ addListener("click", ".result-object", function(e){
} else { } else {
try { try {
var length = parseInt(end) - parseInt(start); var length = parseInt(end) - parseInt(start);
Search.submitAndClose(id, title, length, start, end); Search.submitAndClose(id, title, length, start, end, source, thumbnail);
} catch(err) { } catch(err) {
M.toast({html: "Only numbers are accepted as song start and end parameters..", displayLength: 3000, classes: "red lighten"}); M.toast({html: "Only numbers are accepted as song start and end parameters..", displayLength: 3000, classes: "red lighten"});
} }
@@ -1349,6 +1374,12 @@ addListener("click", "#add-many", function(e){
if(end > original_length) { if(end > original_length) {
end = original_length; end = original_length;
} }
var source = "youtube";
if(e.getAttribute("data-type-source") != undefined) {
source = "soundcloud";
thumbnail = e.getAttribute("data-type-thumbnail");
}
console.log(source);
if(start > end) { if(start > end) {
M.toast({html: "Start can't be before the end..", displayLength: 3000, classes: "red lighten"}); M.toast({html: "Start can't be before the end..", displayLength: 3000, classes: "red lighten"});
} else if(start < 0) { } else if(start < 0) {
@@ -1357,7 +1388,7 @@ addListener("click", "#add-many", function(e){
try { try {
var length = parseInt(end) - parseInt(start); var length = parseInt(end) - parseInt(start);
e.parentElement.parentElement.parentElement.remove(); e.parentElement.parentElement.parentElement.remove();
Search.submit(id, title, length, false, 0, 1, start, end); Search.submit(id, title, length, false, 0, 1, start, end, source, thumbnail);
} catch(event) { } catch(event) {
M.toast({html: "Only numbers are accepted as song start and end parameters..", displayLength: 3000, classes: "red lighten"}); M.toast({html: "Only numbers are accepted as song start and end parameters..", displayLength: 3000, classes: "red lighten"});
} }
@@ -1380,7 +1411,7 @@ addListener("click", ".add-suggested", function(e){
var title = e.getAttribute("data-video-title"); var title = e.getAttribute("data-video-title");
var length = e.getAttribute("data-video-length"); var length = e.getAttribute("data-video-length");
var added_by = e.getAttribute("data-added-by"); var added_by = e.getAttribute("data-added-by");
Search.submit(id, title, parseInt(length), false, 0, 1, 0, parseInt(length)); Search.submit(id, title, parseInt(length), false, 0, 1, 0, parseInt(length), "youtube");
if(added_by == "user") { if(added_by == "user") {
number_suggested = number_suggested - 1; number_suggested = number_suggested - 1;
if(number_suggested < 0) number_suggested = 0; if(number_suggested < 0) number_suggested = 0;

View File

@@ -7,6 +7,7 @@ var Player = {
stopInterval: false, stopInterval: false,
fireplace: "", fireplace: "",
np: {}, np: {},
soundcloud_player: document.querySelector('#soundcloud_player'),
youtube_listener: function(obj) { youtube_listener: function(obj) {
Helper.log(["object", obj]); Helper.log(["object", obj]);
@@ -44,6 +45,7 @@ var Player = {
startTime = time - conf.startTime; startTime = time - conf.startTime;
song_title = obj.np[0].title; song_title = obj.np[0].title;
duration = obj.np[0].duration; duration = obj.np[0].duration;
videoSource = obj.np[0].hasOwnProperty("source") ? obj.np[0].source : "youtube";
if(player_ready) { if(player_ready) {
Player.cueVideoById(video_id, duration); Player.cueVideoById(video_id, duration);
Player.stopVideo(); Player.stopVideo();
@@ -107,6 +109,7 @@ var Player = {
Player.stopVideo(); Player.stopVideo();
} }
video_id = obj.np[0].id; video_id = obj.np[0].id;
videoSource = obj.np[0].hasOwnProperty("source") ? obj.np[0].source : "youtube";
Player.np = { Player.np = {
id: video_id, id: video_id,
start: obj.np[0].start, start: obj.np[0].start,
@@ -156,6 +159,7 @@ var Player = {
startTime = time - conf.startTime; startTime = time - conf.startTime;
song_title = obj.np[0].title; song_title = obj.np[0].title;
duration = obj.np[0].duration; duration = obj.np[0].duration;
videoSource = obj.np[0].hasOwnProperty("source") ? obj.np[0].source : "youtube";
Player.setThumbnail(conf, video_id); Player.setThumbnail(conf, video_id);
if(mobile_beginning && Helper.mobilecheck() && seekTo === 0 && !chromecastAvailable) { if(mobile_beginning && Helper.mobilecheck() && seekTo === 0 && !chromecastAvailable) {
seekTo = 1 + Player.np.start; seekTo = 1 + Player.np.start;
@@ -246,13 +250,24 @@ var Player = {
} else { } else {
empty_clear = false; empty_clear = false;
} }
try {
if(videoSource == "soundcloud") {
Player.player.stopVideo();
} else {
SC.Widget(Player.soundcloud_player).pause();
}
} catch(e) {}
}, },
setThumbnail: function(conf, video_id) { setThumbnail: function(conf, video_id) {
if(embed) return; if(embed) return;
if(!conf.hasOwnProperty("thumbnail") || conf.thumbnail == "") { if(!conf.hasOwnProperty("thumbnail") || conf.thumbnail == "") {
if(videoSource == "soundcloud") {
document.getElementById("thumbnail_image").innerHTML = "<img id='thumbnail_image_channel' src='" + full_playlist[full_playlist.length - 1].thumbnail + "' alt='thumbnail' />";
} else {
document.getElementById("thumbnail_image").innerHTML = "<img id='thumbnail_image_channel' src='https://img.youtube.com/vi/"+video_id+"/mqdefault.jpg' alt='thumbnail' />"; document.getElementById("thumbnail_image").innerHTML = "<img id='thumbnail_image_channel' src='https://img.youtube.com/vi/"+video_id+"/mqdefault.jpg' alt='thumbnail' />";
} }
}
}, },
onPlayerStateChange: function(newState) { onPlayerStateChange: function(newState) {
@@ -365,12 +380,19 @@ var Player = {
Helper.toggleClass("#pause", "hide"); Helper.toggleClass("#pause", "hide");
} }
//Playercontrols.play_pause(); //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 { } else {
Player.player.playVideo(); Player.player.playVideo();
} }
}
}, },
pauseVideo: function(){ pauseVideo: function(){
console.log("pause");
if(chromecastAvailable){ if(chromecastAvailable){
castSession.sendMessage("urn:x-cast:zoff.me", {type: "pauseVideo"}); castSession.sendMessage("urn:x-cast:zoff.me", {type: "pauseVideo"});
if(document.getElementById("play").classList.contains("hide")){ if(document.getElementById("play").classList.contains("hide")){
@@ -379,9 +401,15 @@ var Player = {
} }
//Playercontrols.play_pause(); //Playercontrols.play_pause();
} else { } else {
console.log(videoSource);
paused = true; paused = true;
if(videoSource == "soundcloud") {
console.log("you need to pause now");
SC.Widget(document.querySelector("#soundcloud_player")).pause();
} else {
Player.player.pauseVideo(); Player.player.pauseVideo();
} }
}
}, },
seekTo: function(_seekTo){ seekTo: function(_seekTo){
@@ -405,10 +433,37 @@ var Player = {
castSession.sendMessage("urn:x-cast:zoff.me", {start: s, end: e, type: "loadVideo", videoId: id, channel: chan.toLowerCase()}); castSession.sendMessage("urn:x-cast:zoff.me", {start: s, end: e, type: "loadVideo", videoId: id, channel: chan.toLowerCase()});
chrome.cast.media.GenericMediaMetadata({metadataType: 0, title:song_title, image: 'https://img.youtube.com/vi/'+id+'/mqdefault.jpg', images: ['https://img.youtube.com/vi/'+id+'/mqdefault.jpg']}); chrome.cast.media.GenericMediaMetadata({metadataType: 0, title:song_title, image: 'https://img.youtube.com/vi/'+id+'/mqdefault.jpg', images: ['https://img.youtube.com/vi/'+id+'/mqdefault.jpg']});
chrome.cast.Image('https://img.youtube.com/vi/'+id+'/mqdefault.jpg'); chrome.cast.Image('https://img.youtube.com/vi/'+id+'/mqdefault.jpg');
} else {
if(videoSource == "soundcloud") {
Helper.removeClass(document.getElementById("player_overlay"), "hide");
SC.Widget(Player.soundcloud_player).load(id, {
auto_play: true,
buying:false,
sharing:false,
download:false,
show_user:false,
callback: function() {
SC.Widget(Player.soundcloud_player).setVolume(Crypt.get_volume());
console.log(start, seekTo);
if(start == undefined) start = 0;
if(seekTo == undefined) seekTo = 0;
SC.Widget(Player.soundcloud_player).seekTo((start + 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", document.querySelector("#controls").style.backgroundColor);
Helper.addClass("#player_overlay_text", "hide");
}
});
//SC.Widget(Player.soundcloud_player).play();
} else { } else {
//window.player = Player.player; //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}); Player.player.loadVideoById({'videoId': id, 'startSeconds': s, 'endSeconds': e});
} }
}
if(offline) { if(offline) {
getColor(id); getColor(id);
//socket.emit("color", {id: id}); //socket.emit("color", {id: id});
@@ -423,8 +478,29 @@ var Player = {
if(end) e = end; if(end) e = end;
else e = Player.np.end; else e = Player.np.end;
if(videoSource == "soundcloud") {
SC.Widget(Player.soundcloud_player).load(id, {
auto_play: false,
buying:false,
sharing:false,
download:false,
show_user:false,
callback: function() {
SC.Widget(Player.soundcloud_player).setVolume(Crypt.get_volume());
console.log(start, seekTo);
if(start == undefined) start = 0;
if(seekTo == undefined) seekTo = 0;
SC.Widget(Player.soundcloud_player).seekTo((start + 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", "cover");
Helper.css(document.getElementById("player_overlay"), "background-position", "20%");
Helper.css(document.getElementById("player_overlay"), "background-color", document.querySelector("#controls").style.backgroundColor);
Helper.addClass("#player_overlay_text", "hide");
}
});
} else {
Player.player.cueVideoById({'videoId': id, 'startSeconds': s, 'endSeconds': e}); Player.player.cueVideoById({'videoId': id, 'startSeconds': s, 'endSeconds': e});
}
}, },
stopVideo: function(){ stopVideo: function(){
@@ -442,6 +518,7 @@ var Player = {
castSession.setVolume(vol/100); castSession.setVolume(vol/100);
} else { } else {
Player.player.setVolume(vol); Player.player.setVolume(vol);
SC.Widget(Player.soundcloud_player).setVolume(vol);
} }
}, },
@@ -571,6 +648,92 @@ var Player = {
} }
}, },
soundcloudFinish: function() {
playing = false;
paused = false;
if(!offline) {
/*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true);
if(u == undefined) u = "";*/
socket.emit("end", {id: video_id, channel: chan.toLowerCase()});
} else {
Player.playNext();
}
},
soundcloudPause: function() {
if(end_programmatically) {
paused = false;
playing = false;
end_programmatically = false;
} else {
if(!chromecastAvailable){
if(beginning && mobile_beginning) {
Helper.css("#playpause", "visibility", "visible");
Helper.css("#playpause", "pointer-events", "all");
Helper.css("#channel-load", "display", "none");
}
if(!empty_clear && !gotten_np) {
paused = true;
}
if(gotten_np) gotten_np = false;
if(window.location.pathname != "/") Playercontrols.play_pause_show();
mobile_beginning = true;
}
Helper.removeClass("#play", "hide");
Helper.addClass("#pause", "hide");
}
},
soundcloudPlay: function() {
if(embed) {
Helper.css("#player", "visibility", "visible");
}
if(embed && !autoplay) autoplay = true;
if(!window.MSStream) {
Helper.css("#player", "opacity", "1");
//if(!Helper.mobilecheck()) {
Helper.css("#channel-load", "display", "none");
//}
}
Helper.css("#playpause", "visibility", "visible");
Helper.css("#playpause", "pointer-events", "all");
playing = true;
if(beginning && Helper.mobilecheck() && !chromecastAvailable){
//Player.pauseVideo();
beginning = false;
mobile_beginning = false;
}
//if(!embed && window.location.pathname != "/" && !chromecastAvailable) Helper.addClass("#player_overlay", "hide");
if(window.location.pathname != "/"){
Helper.addClass("#play", "hide");
Helper.removeClass("#pause", "hide");
}
if((paused || was_stopped) && !offline) {
/*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true);
if(u == undefined) u = "";*/
socket.emit('pos', {channel: chan.toLowerCase()});
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", {
auto_play: false,
buying:false,
sharing:false,
download:false,
show_user:false,
});
},
onPlayerReady: function(event) { onPlayerReady: function(event) {
try{ try{
beginning = true; beginning = true;
@@ -734,7 +897,13 @@ var Player = {
dMinutes = Math.floor(duration / 60); dMinutes = Math.floor(duration / 60);
dSeconds = duration - dMinutes * 60; dSeconds = duration - dMinutes * 60;
if(videoSource == "soundcloud") {
SC.Widget(Player.soundcloud_player).getPosition(function(dur) {
currDurr = Math.floor(dur) / 1000;
});
} else {
currDurr = Player.player.getCurrentTime() !== undefined ? Math.floor(Player.player.getCurrentTime()) : seekTo; currDurr = Player.player.getCurrentTime() !== undefined ? Math.floor(Player.player.getCurrentTime()) : seekTo;
}
if(currDurr - Player.np.start > duration && !offline) { if(currDurr - Player.np.start > duration && !offline) {
currDurr = duration - Player.np.start; currDurr = duration - Player.np.start;
} }
@@ -761,7 +930,22 @@ var Player = {
if(!dragging) { if(!dragging) {
document.getElementById("bar").style.width = per+"%"; document.getElementById("bar").style.width = per+"%";
} }
if(videoSource == "soundcloud") {
SC.Widget(Player.soundcloud_player).isPaused(function(paused) {
if(Math.floor(currDurr / 1000) > Player.np.end && !paused) {
end_programmatically = true;
if(!offline) {
SC.Widget(Player.soundcloud_player).pause();
/*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true);
if(u == undefined) u = "";*/
socket.emit("end", {id: video_id, channel: chan.toLowerCase()});
} else {
Player.playNext();
}
}
});
} else {
if(Player.player.getCurrentTime() > Player.np.end && Player.player.getPlayerState() == YT.PlayerState.PLAYING) { if(Player.player.getCurrentTime() > Player.np.end && Player.player.getPlayerState() == YT.PlayerState.PLAYING) {
end_programmatically = true; end_programmatically = true;
@@ -775,6 +959,7 @@ var Player = {
} }
} }
} }
}
}catch(e){} }catch(e){}
if(!Player.stopInterval) { if(!Player.stopInterval) {
setTimeout(Player.durationSetter, 1000); setTimeout(Player.durationSetter, 1000);
@@ -794,6 +979,46 @@ var Player = {
firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
} }
if(document.querySelectorAll("script[src='https://w.soundcloud.com/player/api.js']").length == 1) {
SC.Widget(Player.soundcloud_player);
} else {
tag = document.createElement('script');
tag.src = "https://w.soundcloud.com/player/api.js";
firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
tagSearch = document.createElement('script');
tagSearch.src = "https://connect.soundcloud.com/sdk/sdk-3.3.0.js";
firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tagSearch, firstScriptTag);
console.log("hello");
tagSearch.onload = function() {
if(firstLoad == "") {
firstLoad = "search";
_SC2 = SC;
} else {
_SC2 = SC;
SC = _SC1;
_SC1 = _SC2;
}
console.log("loaded1")
window._SC1 = _SC1;
_SC1.initialize({
client_id: 'ed53fc01f248f15becddf8eb52cc91ef'
});
}
tag.onload = function() {
if(firstLoad == "") {
firstLoad = "widget";
_SC1 = SC;
}
SC.Widget(Player.soundcloud_player);
SC.Widget(Player.soundcloud_player).bind(SC.Widget.Events.READY, Player.soundcloudReady);
}
}
} }
}; };

View File

@@ -8,6 +8,7 @@ var Playercontrols = {
}, },
initControls: function() { initControls: function() {
console.log("init controls");
document.getElementById("volume-button").addEventListener("click", Playercontrols.mute_video); document.getElementById("volume-button").addEventListener("click", Playercontrols.mute_video);
document.getElementById("playpause").addEventListener("click", Playercontrols.play_pause); document.getElementById("playpause").addEventListener("click", Playercontrols.play_pause);
document.getElementById("volume-button-overlay").addEventListener("click", Playercontrols.mute_video); document.getElementById("volume-button-overlay").addEventListener("click", Playercontrols.mute_video);
@@ -189,7 +190,17 @@ var Playercontrols = {
}, },
play_pause: function() { play_pause: function() {
console.log("play pause here");
if(!chromecastAvailable){ if(!chromecastAvailable){
if(videoSource == "soundcloud") {
SC.Widget(Player.soundcloud_player).isPaused(function(paused) {
if(paused) {
Player.playVideo();
} else {
Player.pauseVideo();
}
});
} else {
if(Player.player.getPlayerState() == YT.PlayerState.PLAYING) if(Player.player.getPlayerState() == YT.PlayerState.PLAYING)
{ {
Player.pauseVideo(); Player.pauseVideo();
@@ -210,12 +221,14 @@ var Playercontrols = {
Helper.toggleClass(".page-footer", "padding-bottom-extra"); Helper.toggleClass(".page-footer", "padding-bottom-extra");
} }
} }
}
} else { } else {
Playercontrols.play_pause_show(); Playercontrols.play_pause_show();
} }
}, },
play_pause_show: function() { play_pause_show: function() {
console.log("pause2");
if(chromecastAvailable){ if(chromecastAvailable){
if(document.getElementById("play").classList.contains("hide")){ if(document.getElementById("play").classList.contains("hide")){
Player.pauseVideo(); Player.pauseVideo();
@@ -265,6 +278,8 @@ var Playercontrols = {
setVolume: function(vol) { setVolume: function(vol) {
Player.setVolume(vol); Player.setVolume(vol);
console.log(vol);
SC.Widget(Player.soundcloud_player).setVolume(vol);
Playercontrols.choose_button(vol, false); Playercontrols.choose_button(vol, false);
if(Player.player.isMuted()) if(Player.player.isMuted())
Player.player.unMute(); Player.player.unMute();
@@ -345,6 +360,22 @@ var Playercontrols = {
}, },
playPause: function() { playPause: function() {
console.log("playpause", videoSource);
if(videoSource == "soundcloud") {
console.log("hello");
SC.Widget(Player.soundcloud_player).isPaused(function(paused) {
console.log(paused);
if(paused) {
Helper.addClass("#play", "hide");
Helper.removeClass("#pause", "hide");
SC.Widget(Player.soundcloud_player).play();
} else {
Helper.removeClass("#play", "hide");
Helper.addClass("#pause", "hide");
SC.Widget(Player.soundcloud_player).pause();
}
})
} else {
state = Player.player.getPlayerState(); state = Player.player.getPlayerState();
button = document.getElementById("playpause"); button = document.getElementById("playpause");
if(state == YT.PlayerState.PLAYING) { if(state == YT.PlayerState.PLAYING) {
@@ -352,6 +383,7 @@ var Playercontrols = {
} else if(state == YT.PlayerState.PAUSED) { } else if(state == YT.PlayerState.PAUSED) {
Player.playVideo(); Player.playVideo();
} }
}
}, },
visualVolume: function(val) { visualVolume: function(val) {

View File

@@ -17,28 +17,29 @@ var Search = {
//$("#results").empty(); //$("#results").empty();
if(document.querySelector("#search-btn i").innerText == "close") { if(document.querySelector("#search-btn i").innerText == "close") {
document.querySelector("body").setAttribute("style", "overflow-y:auto") document.querySelector("body").setAttribute("style", "overflow-y:auto")
/*$("#results").slideUp({
complete: function() {
$("#results").empty();
}
});*/
document.getElementById("results").innerHTML = ""; document.getElementById("results").innerHTML = "";
document.getElementById("results_soundcloud").innerHTML = "";
Helper.css(".search_results", "display", "none");
Helper.css(".results-tabs", "display", "none");
document.querySelector(".search_input").value = ""; document.querySelector(".search_input").value = "";
document.querySelector("#search-btn i").innerText = "search"; document.querySelector("#search-btn i").innerText = "search";
} else { } else {
document.querySelector("#search-btn i").innerText = "close"; document.querySelector("#search-btn i").innerText = "close";
Helper.css(".search_results", "display", "block");
} }
document.querySelector("#search").focus(); document.querySelector("#search").focus();
}, },
search: function(search_input, retried, related, pagination){ search: function(search_input, retried, related, pagination){
if(result_html === undefined || empty_results_html === undefined) { if(result_html === undefined || empty_results_html === undefined) {
result_html = document.getElementById("temp-results-container"); result_html = document.getElementById("temp-results-container");
empty_results_html = Helper.html("#empty-results-container"); empty_results_html = Helper.html("#empty-results-container");
} }
if(!pagination && document.querySelectorAll("#inner-results").length == 0) { if(!pagination && document.querySelectorAll("#inner-results").length == 0) {
Helper.setHtml(".search_results", ''); Helper.setHtml("#results", '');
} }
if(search_input !== ""){ if(search_input !== ""){
searching = true; searching = true;
@@ -55,7 +56,8 @@ var Search = {
Helper.addClass(".search_loader_spinner", "active"); Helper.addClass(".search_loader_spinner", "active");
Helper.removeClass("#results", "hide"); Helper.removeClass(".search_results", "hide");
Helper.css(".results-tabs", "display", "none");
Helper.ajax({ Helper.ajax({
type: "GET", type: "GET",
@@ -63,11 +65,13 @@ var Search = {
dataType: "jsonp", dataType: "jsonp",
success: function(response){ success: function(response){
response = JSON.parse(response); response = JSON.parse(response);
var output = "";
var nextPageToken = response.nextPageToken; var nextPageToken = response.nextPageToken;
var prevPageToken = response.prevPageToken; var prevPageToken = response.prevPageToken;
if(response.items.length === 0) { if(response.items.length === 0) {
document.getElementById("results").innerHTML = ""; document.getElementById("results").innerHTML = "";
Helper.css("#results", "display", "block"); Helper.css("#results", "display", "block");
Helper.css(".results-tabs", "display", "block");
//$("<div style='display:none;' id='inner-results' class='empty-inner-results'>"+empty_results_html+"</div>").appendTo($("#results")).show("blind", 83.33); //$("<div style='display:none;' id='inner-results' class='empty-inner-results'>"+empty_results_html+"</div>").appendTo($("#results")).show("blind", 83.33);
document.getElementById("results").insertAdjacentHTML("beforeend", "<div style='display:block;' id='inner-results' style='height:calc(100vh - 64px);' class='empty-inner-results'>"+empty_results_html+"</div>"); document.getElementById("results").insertAdjacentHTML("beforeend", "<div style='display:block;' id='inner-results' style='height:calc(100vh - 64px);' class='empty-inner-results'>"+empty_results_html+"</div>");
Helper.removeClass(".search_loader_spinner", "active"); Helper.removeClass(".search_loader_spinner", "active");
@@ -88,18 +92,17 @@ var Search = {
pre_result.innerHTML = result_html.outerHTML; pre_result.innerHTML = result_html.outerHTML;
//$("#results").append(result_html); //$("#results").append(result_html);
for(var i = 0; i < response.items.length; i++) { for(var i = 0; i < response.items.length; i++) {
var song = response.items[i]; var song = response.items[i];
var duration=song.contentDetails.duration; var duration=song.contentDetails.duration;
secs=Search.durationToSeconds(duration); var secs=Search.durationToSeconds(duration);
var _temp_duration = Helper.secondsToOther(secs); var _temp_duration = Helper.secondsToOther(secs);
if(!longsongs || secs<720){ if(!longsongs || secs<720){
title=song.snippet.title; var title=song.snippet.title;
enc_title=title;//encodeURIComponent(title).replace(/'/g, "\\\'"); var enc_title=title;//encodeURIComponent(title).replace(/'/g, "\\\'");
id=song.id; var id=song.id;
duration = duration.replace("PT","").replace("H","h ").replace("M","m ").replace("S","s"); duration = duration.replace("PT","").replace("H","h ").replace("M","m ").replace("S","s");
thumb=song.snippet.thumbnails.medium.url; var thumb=song.snippet.thumbnails.medium.url;
//$("#results").append(result_html); //$("#results").append(result_html);
var songs = pre_result.cloneNode(true); var songs = pre_result.cloneNode(true);
@@ -127,7 +130,7 @@ var Search = {
if(document.querySelectorAll("#inner-results").length == 0) { if(document.querySelectorAll("#inner-results").length == 0) {
fresh = true; fresh = true;
} }
document.getElementsByClassName("search_results")[0].innerHTML = ""; document.getElementById("results").innerHTML = "";
if(output.length > 0) { if(output.length > 0) {
//$(window).scrollTop(0); //$(window).scrollTop(0);
if(!pagination && fresh) { if(!pagination && fresh) {
@@ -158,6 +161,7 @@ var Search = {
Helper.removeClass(".search_loader_spinner", "active"); Helper.removeClass(".search_loader_spinner", "active");
Helper.css(".search_results", "display", "block"); Helper.css(".search_results", "display", "block");
Helper.css(".results-tabs", "display", "block");
} else if(!retried){ } else if(!retried){
Search.search(search_input, true); Search.search(search_input, true);
@@ -179,6 +183,104 @@ var Search = {
} }
}, },
soundcloudSearch: function(keyword) {
_SC1.get('/tracks', {
q: keyword
}).then(function(tracks) {
var pre_result = document.createElement("div");
pre_result.innerHTML = result_html.outerHTML;
//$("#results").append(result_html);
var output = "";
for(var i = 0; i < tracks.length; i++) {
var song = tracks[i];
var duration=Math.floor(song.duration / 1000);
//var secs=Search.durationToSeconds(duration);
var secs = duration;
var _temp_duration = Helper.secondsToOther(secs);
if(!longsongs || secs<720){
var title=song.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");
//thumb=song.artwork_url;
var thumb = null;
if(thumb == null) thumb = song.waveform_url;
console.log(song);
//$("#results").append(result_html);
var songs = pre_result.cloneNode(true);
songs.querySelector(".search-title").innerText = title;
songs.querySelector(".result_info").innerText = Helper.pad(_temp_duration[0]) + ":" + Helper.pad(_temp_duration[1]);
songs.querySelector(".thumb").setAttribute("src", thumb);
//songs.querySelector(".add-many").attr("onclick", "submit('"+id+"','"+enc_title+"',"+secs+");");
songs.querySelector("#add-many").setAttribute("data-video-id", id);
songs.querySelector("#add-many").setAttribute("data-video-title", enc_title);
songs.querySelector("#add-many").setAttribute("data-video-length", secs);
//$($(songs).querySelector("div")[0]).setAttribute("onclick", "submitAndClose('"+id+"','"+enc_title+"',"+secs+");");
songs.querySelector("#temp-results").setAttribute("data-video-id", id);
songs.querySelector("#temp-results").setAttribute("data-video-title", enc_title);
songs.querySelector("#temp-results").setAttribute("data-video-length", secs);
songs.querySelector(".open-externally").setAttribute("href", song.permalink_url);
songs.querySelector(".result-end").setAttribute("value", secs);
songs.querySelector("#temp-results").setAttribute("data-type-source", "soundcloud");
songs.querySelector("#temp-results").setAttribute("data-type-thumbnail", thumb);
//$($(songs).querySelector("div")[0]).setAttribute("id", id)
//output += undefined;
if(songs.innerHTML != undefined && songs.innerHTML != "") {
output += songs.innerHTML;
}
}
}
var fresh = false;
if(document.querySelectorAll("#inner-results").length == 0) {
fresh = true;
}
document.getElementById("results_soundcloud").innerHTML = "";
//console.log(output);
if(output.length > 0) {
//$(window).scrollTop(0);
/*if(!pagination && fresh) {
//Helper.css(".search_results", "display", "none");
}*/
//document.getElementById("results_soundcloud").insertAdjacentHTML("beforeend", pagination_buttons_html);
//$("<div id='inner-results'>"+output+"</div>").prependTo($("#results"));
document.getElementById("results_soundcloud").insertAdjacentHTML("afterbegin", "<div id='inner-results'>"+output+"</div>");
if(!pagination && fresh) {
//$(".search_results").slideDown();
}
document.getElementsByTagName("body")[0].setAttribute("style", "overflow-y:hidden !important")
/*if(nextPageToken) {
document.querySelector(".next-results-button").setAttribute("data-pagination", nextPageToken);
} else {
Helper.addClass(".next-results-button", "disabled");
}
if(prevPageToken) {
document.querySelector(".prev-results-button").setAttribute("data-pagination", prevPageToken);
} else {
Helper.addClass(".prev-results-button", "disabled");
}
document.querySelector(".pagination-results a").setAttribute("data-original-search", search_input);
*/
//setTimeout(function(){$(".thumb").lazyload({container: $("#results")});}, 250);
/*Helper.removeClass(".search_loader_spinner", "active");
Helper.css(".search_results", "display", "block");*/
} /*else if(!retried){
Search.search(search_input, true);
} else {
//$("<div style='display:none;' id='inner-results'>"+empty_results_html+"</div>").appendTo($("#results_soundcloud")).show("blind", 83.33);
document.getElementById("results_soundcloud").insertAdjacentHTML("beforeend", "<div style='display:block;' id='inner-results' style='height:calc(100vh - 64px);'>"+empty_results_html+"</div>");
Helper.css("#results_soundcloud", "display", "block");
Helper.removeClass(".search_loader_spinner", "active");
}*/
});
},
backgroundSearch: function(title, artist, length, totalNumber, current){ backgroundSearch: function(title, artist, length, totalNumber, current){
var keyword= encodeURIComponent(title + " " + artist); 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=10&videoCategoryId=10"; 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";
@@ -307,21 +409,23 @@ var Search = {
Search.submitArray = []; Search.submitArray = [];
Search.submitArrayExpected = null; Search.submitArrayExpected = null;
} }
}, },
submitAndClose: function(id,title,duration, start, end){ submitAndClose: function(id,title,duration, start, end, source, thumbnail){
Search.submit(id,title, duration, false, 0, 1, start, end); Search.submit(id,title, duration, false, 0, 1, start, end, source, thumbnail);
Helper.setHtml("#results", ''); Helper.setHtml("#results", '');
Search.showSearch(); Search.showSearch();
document.getElementById("search").value = ""; document.getElementById("search").value = "";
document.getElementsByTagName("body")[0].setAttribute("style", "overflow-y:auto") document.getElementsByTagName("body")[0].setAttribute("style", "overflow-y:auto")
Helper.setHtml("#results",""); Helper.setHtml("#results","");
Helper.setHtml("#results-soundcloud", "");
Helper.removeClass(".main", "blurT"); Helper.removeClass(".main", "blurT");
Helper.removeClass("#controls", "blurT"); Helper.removeClass("#controls", "blurT");
Helper.removeClass(".main", "clickthrough"); Helper.removeClass(".main", "clickthrough");
}, Helper.css(".search_results", "display", "none");
},
importPlaylist: function(pId,pageToken){ importPlaylist: function(pId,pageToken){
token = ""; token = "";
var headers; var headers;
var datatype; var datatype;
@@ -436,9 +540,9 @@ var Search = {
} }
} }
}); });
}, },
importSpotifyPlaylist: function(url){ importSpotifyPlaylist: function(url){
Helper.ajax({ Helper.ajax({
method: "get", method: "get",
url: url, url: url,
@@ -465,9 +569,9 @@ var Search = {
M.toast({html: "It seems you've entered a invalid url.", displayLength: 4000}); M.toast({html: "It seems you've entered a invalid url.", displayLength: 4000});
} }
}); });
}, },
addVideos: function(ids){ addVideos: function(ids){
var more = false; var more = false;
var next_ids = []; var next_ids = [];
var request_url="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key=" + api_key + "&id="; var request_url="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key=" + api_key + "&id=";
@@ -509,11 +613,11 @@ var Search = {
console.log(e); console.log(e);
} }
}); });
}, },
submit: function(id,title,duration, playlist, num, full_num, start, end){ submit: function(id,title,duration, playlist, num, full_num, start, end, source, thumbnail){
if((client || Helper.mobilecheck()) && !socket_connected) { if((client || Helper.mobilecheck()) && !socket_connected) {
add_ajax(id, title, duration, playlist, num, full_num, start, end); add_ajax(id, title, duration, playlist, num, full_num, start, end, source, thumbnail);
return; return;
} }
if(offline && document.getElementsByName("addsongs")[0].checked && document.getElementsByName("addsongs")[0].disabled){ if(offline && document.getElementsByName("addsongs")[0].checked && document.getElementsByName("addsongs")[0].disabled){
@@ -529,15 +633,15 @@ var Search = {
} else { } else {
/*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true); /*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true);
if(u == undefined) u = "";*/ if(u == undefined) u = "";*/
emit("add", {id: id, start: start, end: end, title: title, list: chan.toLowerCase(), duration: duration}); emit("add", {id: id, start: start, end: end, title: title, list: chan.toLowerCase(), duration: duration, source: source, thumbnail: thumbnail});
}//[id, decodeURIComponent(title), adminpass, duration, playlist]); }//[id, decodeURIComponent(title), adminpass, duration, playlist]);
}, },
durationToSeconds: function(duration) { durationToSeconds: function(duration) {
var matches = duration.match(time_regex); var matches = duration.match(time_regex);
hours= parseInt(matches[12])||0; hours= parseInt(matches[12])||0;
minutes= parseInt(matches[14])||0; minutes= parseInt(matches[14])||0;
seconds= parseInt(matches[16])||0; seconds= parseInt(matches[16])||0;
return hours*60*60+minutes*60+seconds; return hours*60*60+minutes*60+seconds;
} }
}; };

View File

@@ -37,6 +37,7 @@ var Suggestions = {
}, },
fetchYoutubeSuggests: function(id){ fetchYoutubeSuggests: function(id){
if(videoSource == "soundcloud") return;
var get_url = "https://www.googleapis.com/youtube/v3/search?part=snippet&relatedToVideoId="+id+"&type=video&key="+api_key; var get_url = "https://www.googleapis.com/youtube/v3/search?part=snippet&relatedToVideoId="+id+"&type=video&key="+api_key;
var video_urls = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+api_key+"&id="; var video_urls = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+api_key+"&id=";

View File

@@ -3,6 +3,9 @@
<div id="fireplace_player" class="ytplayer"></div> <div id="fireplace_player" class="ytplayer"></div>
{{/unless}} {{/unless}}
<div id="player" class="ytplayer"></div> <div id="player" class="ytplayer"></div>
<iframe width="100%" id="soundcloud_player" height="166" scrolling="no" frameborder="no" style="visibility: hidden;z-index: -999;"
src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/undefined&amp;{ auto_play: false, buying:false, sharing:false, download:false, show_user:false, }">
</iframe>
<div id="main_components"> <div id="main_components">
<div id="player_overlay" class="hide valign-wrapper"> <div id="player_overlay" class="hide valign-wrapper">
<div id="playing_on"> <div id="playing_on">

View File

@@ -1,4 +1,11 @@
<div id="results" class="search_results hide"> <div class="row search_results hide">
<div class="col s12">
<ul class="results-tabs">
<li class="tab col s6"><a class="active" href="#results">YouTube</a></li>
<li class="tab col s6"><a href="#results_soundcloud">SoundCloud</a></li>
</ul>
</div>
<div id="results" class="">
<div id="temp-results-container"> <div id="temp-results-container">
<div id="temp-results" class="result-object"> <div id="temp-results" class="result-object">
<div id="result" class="result"> <div id="result" class="result">
@@ -40,4 +47,6 @@
<a href="#" class="btn waves-effect waves-light prev-results-button orange">Prev</a> <a href="#" class="btn waves-effect waves-light prev-results-button orange">Prev</a>
<a href="#" class="btn waves-effect waves-light next-results-button orange">Next</a> <a href="#" class="btn waves-effect waves-light next-results-button orange">Next</a>
</div> </div>
</div> </div>
<div id="results_soundcloud" class="col s12">Test 2</div>
</div>

View File

@@ -622,7 +622,8 @@ router.route('/api/list/:channel_name/:video_id').post(function(req,res) {
if(!fetch_only && (!req.body.hasOwnProperty('adminpass') || !req.body.hasOwnProperty('userpass') || if(!fetch_only && (!req.body.hasOwnProperty('adminpass') || !req.body.hasOwnProperty('userpass') ||
!req.params.hasOwnProperty('channel_name') || !req.params.hasOwnProperty('video_id') || !req.params.hasOwnProperty('channel_name') || !req.params.hasOwnProperty('video_id') ||
!req.body.hasOwnProperty('duration') || !req.body.hasOwnProperty('start_time') || !req.body.hasOwnProperty('duration') || !req.body.hasOwnProperty('start_time') ||
!req.body.hasOwnProperty('end_time') || !req.body.hasOwnProperty('title'))) { !req.body.hasOwnProperty('end_time') || !req.body.hasOwnProperty('title') ||
!req.body.hasOwnProperty('source'))) {
throw "Wrong format"; throw "Wrong format";
} }
@@ -637,6 +638,8 @@ router.route('/api/list/:channel_name/:video_id').post(function(req,res) {
var duration = parseInt(req.body.duration); var duration = parseInt(req.body.duration);
var start_time = parseInt(req.body.start_time); var start_time = parseInt(req.body.start_time);
var end_time = parseInt(req.body.end_time); var end_time = parseInt(req.body.end_time);
var source = req.body.source;
if(source == "soundcloud" && !req.body.hasOwnProperty("thumbnail")) throw "Wrong format";
if(duration != end_time - start_time) duration = end_time - start_time; if(duration != end_time - start_time) duration = end_time - start_time;
var title = req.body.title; var title = req.body.title;
if(typeof(userpass) != "string" || typeof(adminpass) != "string" || if(typeof(userpass) != "string" || typeof(adminpass) != "string" ||
@@ -715,7 +718,8 @@ router.route('/api/list/:channel_name/:video_id').post(function(req,res) {
if(now_playing.length == 0 && authenticated) { if(now_playing.length == 0 && authenticated) {
set_np = true; set_np = true;
} }
var new_song = {"added": Functions.get_time(),"guids":[guid],"id":video_id,"now_playing":set_np,"title":title,"votes":1, "duration":duration, "start": parseInt(start_time), "end": parseInt(end_time), "type": song_type}; var new_song = {"added": Functions.get_time(),"guids":[guid],"id":video_id,"now_playing":set_np,"title":title,"votes":1, "duration":duration, "start": parseInt(start_time), "end": parseInt(end_time), "type": song_type, "source": source};
if(source == "soundcloud") new_song.thumbnail = req.body.thumbnail;
Search.get_correct_info(new_song, channel_name, false, function(element, found) { Search.get_correct_info(new_song, channel_name, false, function(element, found) {
if(!found) { if(!found) {
res.status(404).send(JSON.stringify(error.not_found.youtube)); res.status(404).send(JSON.stringify(error.not_found.youtube));