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) {
try {
/*var cookieParser = require("cookie-parser");
@@ -273,6 +291,7 @@ function removeSessionAdminPass(id, channel, callback) {
});
}
module.exports.isUrl = isUrl;
module.exports.removeEmojis = removeEmojis;
module.exports.getSessionChatPass = getSessionChatPass;
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){
socket.join(coll);
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);
});
});

View File

@@ -298,7 +298,9 @@ function add_function(arr, coll, guid, offline, socket) {
if(typeof(arr.id) != "string" || typeof(arr.start) != "number" ||
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 = {
start: {
expected: "number or string that can be cast to int",
@@ -327,6 +329,14 @@ function add_function(arr, coll, guid, offline, socket) {
adminpass: {
expected: "string",
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);
@@ -350,6 +360,7 @@ function add_function(arr, coll, guid, offline, socket) {
var title = arr.title;
var hash = Functions.hash_pass(Functions.hash_pass(Functions.decrypt_string(arr.adminpass), true));
var duration = parseInt(arr.duration);
var source = arr.source;
/*db.collection(coll + "_settings").find(function(err, docs)
{*/
conf = docs;
@@ -366,7 +377,10 @@ function add_function(arr, coll, guid, offline, socket) {
} else {
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){
new_song._id = "asd";
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()}});
List.send_play(coll, undefined);
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 {
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){});
List.getNextSong(coll);

View File

@@ -82,6 +82,7 @@ function check_error_video(msg, channel) {
};
return;
}
if(msg.source == "soundcloud") return;
channel = channel.replace(/ /g,'');
request({
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) {
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")
{
var result = {

View File

@@ -1480,7 +1480,7 @@ margin:-1px;
}
#inner-results {
height: calc(100vh - 64px - 76px);
height: calc(100vh - 64px - 76px - 64px);
overflow-y: scroll;
overflow-x: hidden;
}
@@ -1602,6 +1602,38 @@ ul #chat-log{
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{
display: flex;
}
@@ -2011,11 +2043,15 @@ nav ul li:hover, nav ul li.active {
position: absolute;
width: 100%;
top: 64px;
max-height: calc(100vh - 64px);
max-height: calc(100vh - 128px);
overflow: overlay;
overflow-x: hidden;
/* z-index: 99999999; */
}
#results_soundcloud {
max-height: calc(100vh - 64px - 64px);
}
.result:hover, .hoverResults {
background-color: rgba(0,0,0,0.4);
}

View File

@@ -77,6 +77,7 @@ var Channel = {
}
Helper.tabs('.chatTabs');
Helper.tabs('.results-tabs');
}
var sidenavElem = document.getElementsByClassName("sidenav")[0];
M.Sidenav.init(sidenavElem, {
@@ -165,6 +166,7 @@ var Channel = {
Playercontrols.initSlider();
if(player_ready) {
Player.player.setVolume(Crypt.get_volume());
SC.Widget(Player.soundcloud_player).setVolume(Crypt.get_volume());
}
Helper.removeClass(".video-container", "no-opacity");
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>");
} else {
Frontpage.populate_channels(msg.channels, true);
console.log(msg.channels);
}
Frontpage.set_viewers(msg.viewers);
},
@@ -77,10 +78,15 @@ var Frontpage = {
var id = lists[x].id;
var viewers = lists[x].viewers;
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) {
img = "background-image:url('" + lists[x].thumbnail + "');";
}
}
var song_count = lists[x].count;
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);
}
Player.player.setVolume(100);
SC.Widget(Player.soundcloud_player).setVolume(100);
Helper.toggleClass("#player_overlay_text", "hide");
} else if(way == 0){
@@ -108,6 +109,7 @@ function hide_native(way) {
if(!Helper.mobilecheck()){
Player.player.setVolume(Crypt.get_volume());
Playercontrols.visualVolume(Crypt.get_volume());
SC.Widget(Player.soundcloud_player).setVolume(Crypt.get_volume());
}
Helper.addClass("#player_overlay", "hide");
Helper.toggleClass("#player_overlay_text", "hide");
@@ -235,6 +237,11 @@ function contextListener(that, event) {
} else if(top < 0) {
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", "top", top + "px");
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 u = Crypt.get_userpass(chan.toLowerCase());
if(a == undefined) a = "";
@@ -332,6 +339,8 @@ function add_ajax(id, title, duration, playlist, num, full_num, start, end) {
duration: duration,
end_time: end,
start_time: start,
thumbnail: thumbnail,
source: source,
token: zoff_api_token
},
headers: {"Content-Type": "application/json;charset=UTF-8"},
@@ -901,9 +910,11 @@ function searchTimeout(event) {
}
if(code == 13){
Search.search(search_input);
Search.soundcloudSearch(search_input);
}else{
timeout_search = setTimeout(function(){
Search.search(search_input);
Search.soundcloudSearch(search_input);
}, 1000);
}
}

View File

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

View File

@@ -245,7 +245,7 @@ var List = {
check_error_videos: function(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({
method: "get",
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);
if (data.items.length == 0) {
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 != "/") {
List.check_error_videos(i + 1);
@@ -356,7 +356,7 @@ var List = {
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;
if(number_suggested < 0) number_suggested = 0;
@@ -366,9 +366,9 @@ var List = {
}
document.querySelector(".suggested-link span.badge.new.white").innerText = to_display;
Helper.removeElement("#suggested-"+added.id);
}
Helper.removeElement("#suggested-"+added.id);
if(List.empty){
List.empty = false;
}
@@ -832,6 +832,7 @@ 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,
@@ -863,12 +864,28 @@ var List = {
//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)
List.addToYoutubePlaylist(playlist_id, full_playlist, num + 1, request_url);
//}, 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() {
@@ -899,6 +916,9 @@ var List = {
var video_title = _song_info.title;
var video_votes = _song_info.votes;
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 song = document.createElement("div");
song.innerHTML = list_html;
@@ -924,9 +944,11 @@ var List = {
song.querySelector(".list-image").setAttribute(image_attr,video_thumb);
if(list){
song.querySelector("#list-song")
song.querySelector(".list-votes").innerText = video_votes;
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-source", _song_info.source);
song.querySelector("#list-song").setAttribute("id", video_id);
song.classList.remove("hide");
song.querySelector(".vote-container").setAttribute("title", video_title);

View File

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

View File

@@ -7,6 +7,7 @@ var Player = {
stopInterval: false,
fireplace: "",
np: {},
soundcloud_player: document.querySelector('#soundcloud_player'),
youtube_listener: function(obj) {
Helper.log(["object", obj]);
@@ -44,6 +45,7 @@ var Player = {
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();
@@ -107,6 +109,7 @@ var Player = {
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,
@@ -156,6 +159,7 @@ var Player = {
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;
@@ -246,13 +250,24 @@ var Player = {
} else {
empty_clear = false;
}
try {
if(videoSource == "soundcloud") {
Player.player.stopVideo();
} else {
SC.Widget(Player.soundcloud_player).pause();
}
} catch(e) {}
},
setThumbnail: function(conf, video_id) {
if(embed) return;
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' />";
}
}
},
onPlayerStateChange: function(newState) {
@@ -365,12 +380,19 @@ var Player = {
Helper.toggleClass("#pause", "hide");
}
//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();
}
}
},
pauseVideo: function(){
console.log("pause");
if(chromecastAvailable){
castSession.sendMessage("urn:x-cast:zoff.me", {type: "pauseVideo"});
if(document.getElementById("play").classList.contains("hide")){
@@ -379,9 +401,15 @@ 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();
}
}
},
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()});
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');
} 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 {
//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});
}
}
if(offline) {
getColor(id);
//socket.emit("color", {id: id});
@@ -423,8 +478,29 @@ var Player = {
if(end) e = 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});
}
},
stopVideo: function(){
@@ -442,6 +518,7 @@ var Player = {
castSession.setVolume(vol/100);
} else {
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) {
try{
beginning = true;
@@ -734,7 +897,13 @@ var Player = {
dMinutes = Math.floor(duration / 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;
}
if(currDurr - Player.np.start > duration && !offline) {
currDurr = duration - Player.np.start;
}
@@ -761,7 +930,22 @@ var Player = {
if(!dragging) {
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) {
end_programmatically = true;
@@ -775,6 +959,7 @@ var Player = {
}
}
}
}
}catch(e){}
if(!Player.stopInterval) {
setTimeout(Player.durationSetter, 1000);
@@ -794,6 +979,46 @@ var Player = {
firstScriptTag = document.getElementsByTagName('script')[0];
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() {
console.log("init controls");
document.getElementById("volume-button").addEventListener("click", Playercontrols.mute_video);
document.getElementById("playpause").addEventListener("click", Playercontrols.play_pause);
document.getElementById("volume-button-overlay").addEventListener("click", Playercontrols.mute_video);
@@ -189,7 +190,17 @@ var Playercontrols = {
},
play_pause: function() {
console.log("play pause here");
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)
{
Player.pauseVideo();
@@ -210,12 +221,14 @@ var Playercontrols = {
Helper.toggleClass(".page-footer", "padding-bottom-extra");
}
}
}
} else {
Playercontrols.play_pause_show();
}
},
play_pause_show: function() {
console.log("pause2");
if(chromecastAvailable){
if(document.getElementById("play").classList.contains("hide")){
Player.pauseVideo();
@@ -265,6 +278,8 @@ var Playercontrols = {
setVolume: function(vol) {
Player.setVolume(vol);
console.log(vol);
SC.Widget(Player.soundcloud_player).setVolume(vol);
Playercontrols.choose_button(vol, false);
if(Player.player.isMuted())
Player.player.unMute();
@@ -345,6 +360,22 @@ var Playercontrols = {
},
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();
button = document.getElementById("playpause");
if(state == YT.PlayerState.PLAYING) {
@@ -352,6 +383,7 @@ var Playercontrols = {
} else if(state == YT.PlayerState.PAUSED) {
Player.playVideo();
}
}
},
visualVolume: function(val) {

View File

@@ -17,28 +17,29 @@ var Search = {
//$("#results").empty();
if(document.querySelector("#search-btn i").innerText == "close") {
document.querySelector("body").setAttribute("style", "overflow-y:auto")
/*$("#results").slideUp({
complete: function() {
$("#results").empty();
}
});*/
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-btn i").innerText = "search";
} else {
document.querySelector("#search-btn i").innerText = "close";
Helper.css(".search_results", "display", "block");
}
document.querySelector("#search").focus();
},
search: function(search_input, retried, related, pagination){
if(result_html === undefined || empty_results_html === undefined) {
result_html = document.getElementById("temp-results-container");
empty_results_html = Helper.html("#empty-results-container");
}
if(!pagination && document.querySelectorAll("#inner-results").length == 0) {
Helper.setHtml(".search_results", '');
Helper.setHtml("#results", '');
}
if(search_input !== ""){
searching = true;
@@ -55,7 +56,8 @@ var Search = {
Helper.addClass(".search_loader_spinner", "active");
Helper.removeClass("#results", "hide");
Helper.removeClass(".search_results", "hide");
Helper.css(".results-tabs", "display", "none");
Helper.ajax({
type: "GET",
@@ -63,11 +65,13 @@ var Search = {
dataType: "jsonp",
success: function(response){
response = JSON.parse(response);
var output = "";
var nextPageToken = response.nextPageToken;
var prevPageToken = response.prevPageToken;
if(response.items.length === 0) {
document.getElementById("results").innerHTML = "";
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);
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");
@@ -88,18 +92,17 @@ var Search = {
pre_result.innerHTML = result_html.outerHTML;
//$("#results").append(result_html);
for(var i = 0; i < response.items.length; i++) {
var song = response.items[i];
var duration=song.contentDetails.duration;
secs=Search.durationToSeconds(duration);
var secs=Search.durationToSeconds(duration);
var _temp_duration = Helper.secondsToOther(secs);
if(!longsongs || secs<720){
title=song.snippet.title;
enc_title=title;//encodeURIComponent(title).replace(/'/g, "\\\'");
id=song.id;
var title=song.snippet.title;
var enc_title=title;//encodeURIComponent(title).replace(/'/g, "\\\'");
var id=song.id;
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);
var songs = pre_result.cloneNode(true);
@@ -127,7 +130,7 @@ var Search = {
if(document.querySelectorAll("#inner-results").length == 0) {
fresh = true;
}
document.getElementsByClassName("search_results")[0].innerHTML = "";
document.getElementById("results").innerHTML = "";
if(output.length > 0) {
//$(window).scrollTop(0);
if(!pagination && fresh) {
@@ -158,6 +161,7 @@ var Search = {
Helper.removeClass(".search_loader_spinner", "active");
Helper.css(".search_results", "display", "block");
Helper.css(".results-tabs", "display", "block");
} else if(!retried){
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){
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";
@@ -307,21 +409,23 @@ var Search = {
Search.submitArray = [];
Search.submitArrayExpected = null;
}
},
},
submitAndClose: function(id,title,duration, start, end){
Search.submit(id,title, duration, false, 0, 1, start, end);
submitAndClose: function(id,title,duration, start, end, source, thumbnail){
Search.submit(id,title, duration, false, 0, 1, start, end, source, thumbnail);
Helper.setHtml("#results", '');
Search.showSearch();
document.getElementById("search").value = "";
document.getElementsByTagName("body")[0].setAttribute("style", "overflow-y:auto")
Helper.setHtml("#results","");
Helper.setHtml("#results-soundcloud", "");
Helper.removeClass(".main", "blurT");
Helper.removeClass("#controls", "blurT");
Helper.removeClass(".main", "clickthrough");
},
Helper.css(".search_results", "display", "none");
},
importPlaylist: function(pId,pageToken){
importPlaylist: function(pId,pageToken){
token = "";
var headers;
var datatype;
@@ -436,9 +540,9 @@ var Search = {
}
}
});
},
},
importSpotifyPlaylist: function(url){
importSpotifyPlaylist: function(url){
Helper.ajax({
method: "get",
url: url,
@@ -465,9 +569,9 @@ var Search = {
M.toast({html: "It seems you've entered a invalid url.", displayLength: 4000});
}
});
},
},
addVideos: function(ids){
addVideos: function(ids){
var more = false;
var next_ids = [];
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);
}
});
},
},
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) {
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;
}
if(offline && document.getElementsByName("addsongs")[0].checked && document.getElementsByName("addsongs")[0].disabled){
@@ -529,15 +633,15 @@ var Search = {
} else {
/*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true);
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]);
},
},
durationToSeconds: function(duration) {
durationToSeconds: function(duration) {
var matches = duration.match(time_regex);
hours= parseInt(matches[12])||0;
minutes= parseInt(matches[14])||0;
seconds= parseInt(matches[16])||0;
return hours*60*60+minutes*60+seconds;
}
}
};

View File

@@ -37,6 +37,7 @@ var Suggestions = {
},
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 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>
{{/unless}}
<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="player_overlay" class="hide valign-wrapper">
<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" class="result-object">
<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 next-results-button orange">Next</a>
</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') ||
!req.params.hasOwnProperty('channel_name') || !req.params.hasOwnProperty('video_id') ||
!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";
}
@@ -637,6 +638,8 @@ router.route('/api/list/:channel_name/:video_id').post(function(req,res) {
var duration = parseInt(req.body.duration);
var start_time = parseInt(req.body.start_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;
var title = req.body.title;
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) {
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) {
if(!found) {
res.status(404).send(JSON.stringify(error.not_found.youtube));