From a8f84d446ab8589452ba8ba61fcdc17b980effc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20Rynning-T=C3=B8nnesen?= Date: Fri, 10 Apr 2015 01:19:28 +0200 Subject: [PATCH] Only missing del, shuffle and remove after play --- index.php | 8 +- js/admin.js | 39 ++++- js/list.js | 139 +++--------------- js/search.js | 24 +-- js/youtube.js | 75 ++++++---- server/index.js | 381 ++++++++++++++++++++++++++---------------------- 6 files changed, 322 insertions(+), 344 deletions(-) diff --git a/index.php b/index.php index ee086be7..3a6776ed 100755 --- a/index.php +++ b/index.php @@ -1,10 +1,10 @@ - @@ -66,6 +66,6 @@ - + diff --git a/js/admin.js b/js/admin.js index 97fc90ca..d8a252a4 100755 --- a/js/admin.js +++ b/js/admin.js @@ -1,6 +1,23 @@ var adminTogg = false; var pass_corr = ""; +socket.on("success_settings", function() +{ + pass_corr = "correct"; + document.getElementById("sBar").innerHTML = "Successfully applied settings."; + $("#sBar").addClass("opacityFull"); + document.getElementById("passbox").value = ""; + remove_bar(); +}); + +socket.on("error_settings", function(msg){ + pass_corr = "wrong"; + document.getElementById("eBar").innerHTML = "Error: " + msg; + $("#eBar").addClass("opacityFull"); + document.getElementById("passbox").value = ""; + remove_bar(); +}); + function admin() { adminTogg = !adminTogg; @@ -39,8 +56,8 @@ function submitAdmin(form) configs = [voting, addsongs, longsongs, frontpage, allvideos, removeplay, adminpass, skipping, shuffling]; - socket.emit("config", configs); - + socket.emit("conf", configs); + /* confRes = $.ajax({ type: "POST", url: "php/change.php", @@ -52,7 +69,7 @@ function submitAdmin(form) console.log("configurations response: "+response); } }).responseText; - + pass_corr = confRes; if(pass_corr=="correct"){ @@ -60,14 +77,24 @@ function submitAdmin(form) document.getElementById("sBar").innerHTML = "Successfully applied settings."; $("#sBar").addClass("opacityFull"); document.getElementById("passbox").value = ""; - }else{ + }else{ document.getElementById("eBar").innerHTML = "Error: Wrong Admin Password!"; $("#eBar").addClass("opacityFull"); - document.getElementById("passbox").value = "";/*$("#adminPanel").addClass("fadeerror");*/ + document.getElementById("passbox").value = "";/*$("#adminPanel").addClass("fadeerror"); } console.log(pass_corr); updateList(); + setTimeout(function(){ + $("#adminPanel").removeClass("success"); + $("#adminPanel").removeClass("fadeerror"); + $("#eBar").removeClass("opacityFull"); + $("#sBar").removeClass("opacityFull"); + },1500);*/ +} + +function remove_bar() +{ setTimeout(function(){ $("#adminPanel").removeClass("success"); $("#adminPanel").removeClass("fadeerror"); @@ -79,6 +106,7 @@ function submitAdmin(form) function shuffle(form) { console.log(adminpass); + /* confRes = $.ajax({ type: "GET", url: "php/change.php", @@ -107,4 +135,5 @@ function shuffle(form) $("#eBar").removeClass("opacityFull"); $("#sBar").removeClass("opacityFull"); },1500); + */ } diff --git a/js/list.js b/js/list.js index fc8d8543..39a7708d 100755 --- a/js/list.js +++ b/js/list.js @@ -19,6 +19,15 @@ socket.on(chan.toLowerCase(), function(msg){ populate_list(msg); }); +socket.on("skipping", function(obj) +{ + document.getElementById("pBar").innerHTML = "Vote registrated! "+obj[0]+" of "+obj[1]+" has skipped. "+(Math.ceil(obj[1]/2))+" or more is needed!"; + $("#pBar").addClass("opacityFull"); + setTimeout(function(){ + $("#pBar").removeClass("opacityFull"); + },1500); +}); + function populate_list(msg) { console.log(msg); @@ -35,16 +44,20 @@ function populate_list(msg) if(listeID.hasOwnProperty('startTime')) { console.log("startTime"); - if(listeID.hasOwnProperty("addsongs") && listeID.addsongs) adminadd = 1; - else adminadd = 0; - if(listeID.hasOwnProperty("allvideos") && listeID.allvideos) music = 1; - else music = 0; - if(listeID.hasOwnProperty("longsongs") && listeID.longsongs) longS = 1; - else longS = 0; - if(listeID.hasOwnProperty("vote") && listeID.vote) adminvote = 1; - else adminvote = 0; - if(listeID.hasOwnProperty("adminpass") && listeID.adminpass !== '') hasadmin = 1; - else hasadmin = 0; + console.log(listeID.addsongs); + if(!adminTogg) + { + names=["vote","addsongs","longsongs","frontpage", "allvideos", "removeplay", "skip", "shuffle"]; + for (var i = 0; i < names.length; i++) { + document.getElementsByName(names[i])[0].checked = (listeID[names[i]] === 'true'); + document.getElementsByName(names[i])[1].checked = (listeID[names[i]] === 'false'); + } + + if(hasadmin) + $("#setpass").text("Channel has admin"); + else + $("#setpass").text("Channel has no admin"); + } }else if(!listeID.now_playing){ var video_title=listeID.title.replace(/\\\'/g, "'").replace(/"/g,"'").replace(/&/g,"&"); var video_id = listeID.id; @@ -99,100 +112,17 @@ function populate_list(msg) }else{ myScroll.refresh(); } - if(!adminTogg) - { - names=["vote","addsongs","longsongs","frontpage", "allvideos", "removeplay", "skip", "shuffle"]; - for (var i = 0; i < names.length; i++) { - document.getElementsByName(names[i])[0].checked = (conf[names[i]] === "true"); - document.getElementsByName(names[i])[1].checked = (conf[names[i]] === "false"); - } - - if(hasadmin) - $("#setpass").text("Channel has admin"); - else - $("#setpass").text("Channel has no admin"); - } $("#settings").css("visibility", "visible"); $("#settings").css("opacity", "0.7"); $("#wrapper").css("opacity", "1"); } -function updateList() -{ - -} - function vote(id, vote){ - socket.emit('vote', [chan, id, vote, guid]); - - serverAns = ($.ajax({ - type: "GET", - url: "php/change.php", - async: false, - data: "vote="+vote+"&id="+id+"&pass="+adminpass, - success: function() { - //console.log("voted "+vote+" on "+id); - /*if(vote=="pos"){ $("#playlist").addClass("success");} - else{ $("#playlist").addClass("fadeerror");} - updateList();*/ - }, - }).responseText); - - if(serverAns == "wrong") - { - //alert("Wrong adminpassword!"); - $("#eBar").addClass("opacityFull"); - }else{ - if(vote=="pos" && serverAns != "many"){ $("."+id).addClass("success");} - else{ $("."+id).addClass("fadeerror");} - updateList(); - } - - setTimeout(function(){ - $("."+id).removeClass("success"); - $("."+id).removeClass("fadeerror"); - $("#eBar").removeClass("opacityFull"); - },1500); + socket.emit('vote', [chan, id, vote, guid, adminpass]); } function skip(){ socket.emit('skip', [chan, guid]); -/* - voteRes = ($.ajax({ - type: "GET", - url: "php/change.php", - async: false, - data: "skip", - success: function() { - //console.log("voted to skip song"); - //$("#search").addClass("success"); - updateList(); - }, - }).responseText); - - if(voteRes == "wrong!") - { - document.getElementById("eBar").innerHTML = "Error: Skipping disabled."; - $("#eBar").addClass("opacityFull"); - }else{ - skipVotes = voteRes.split("/"); - if(skipVotes[0]>= skipVotes[1]/2) - { - document.getElementById("sBar").innerHTML = "Successfully skipped!"; - $("#sBar").addClass("opacityFull"); - }else - { - document.getElementById("pBar").innerHTML = "Vote registrated! "+skipVotes[0]+" of "+skipVotes[1]+" has skipped. "+(Math.ceil(skipVotes[1]/2))+" or more is needed!"; - $("#pBar").addClass("opacityFull"); - } - } - setTimeout(function(){ - $("#search").removeClass("success"); - $("#sBar").removeClass("opacityFull"); - $("#pBar").removeClass("opacityFull"); - $("#eBar").removeClass("opacityFull"); - },1500); -*/ } function show(){ @@ -213,24 +143,3 @@ function show(){ fitToScreen(); } } - - -function ks() -{ - list = $.ajax({ type: "GET", - url: "php/change.php", - async: false - }).responseText; - list = $.parseJSON(list); - myScroll.destroy(); - myScroll = null; - $("#playlist").css({height: $("#player").height()}); - $("#playlist").css({overflow: "hidden"}); - myScroll = new IScroll('#playlist', { - mouseWheel: true, - scrollbars: false, - scrollY: true, - interactiveScrollbars: false - }); - scroller = true; -} \ No newline at end of file diff --git a/js/search.js b/js/search.js index dc77f0c6..1e3fe7a6 100755 --- a/js/search.js +++ b/js/search.js @@ -5,18 +5,18 @@ var timer = 0; $(document).ready(function() { $( "#results" ).hover( function() { $("div.result").removeClass("hoverResults"); i = 0; }, function() { }); - + $("#search").focus(); $('#base').bind("keyup keypress", function(e) { - var code = e.keyCode || e.which; - if (code == 13) { + var code = e.keyCode || e.which; + if (code == 13) { e.preventDefault(); return false; } }); - + $(".search_input").focus(); $(".search_input").keyup(function(event) { var search_input = $(this).val(); @@ -27,7 +27,7 @@ $(document).ready(function() { peis = true; loadjsfile("js/jazzscript.js"); - + }else { peis = false; @@ -74,7 +74,7 @@ $(document).ready(function() } } - + }); setInterval(function(){ @@ -85,7 +85,7 @@ $(document).ready(function() }, 1); }); -$(document).keyup(function(e) { +$(document).keyup(function(e) { if ($("div.result").length > 2){ if (e.keyCode == 40) { if(i < $("div.result").length -2) @@ -115,13 +115,13 @@ $(document).keyup(function(e) { function search(search_input){ - + $("#results").html(''); if(search_input !== ""){ var keyword= encodeURIComponent(search_input); - var yt_url='http://gdata.youtube.com/feeds/api/videos?q='+keyword+'&format=5&orderby=relevance&max-results=6&v=2&alt=jsonc'; + var yt_url='http://gdata.youtube.com/feeds/api/videos?q='+keyword+'&format=5&orderby=relevance&max-results=6&v=2&alt=jsonc'; $.ajax({ type: "GET", @@ -163,7 +163,7 @@ function search(search_input){ } $("").appendTo('#results').slideDown('slow'); - + } else{ $("#video").html("
No Video
");} } @@ -186,7 +186,7 @@ function submitAndClose(id,title){ function submit(id,title,type){ - socket.emit("add", [id, title]); + socket.emit("add", [id, title, adminpass]); /* serverAns = $.ajax({ type: "GET", @@ -229,7 +229,7 @@ function submit(id,title,type){ document.getElementById("sBar").innerHTML = "Successfully added song!"; $("#sBar").addClass("opacityFull"); } - + $("#search").focus(); setTimeout(function(){ diff --git a/js/youtube.js b/js/youtube.js index 858cb84d..5a50fcd5 100755 --- a/js/youtube.js +++ b/js/youtube.js @@ -11,7 +11,7 @@ var beginning; var diffVideo; var serverTime; var url; -var response; +var response; var url; var tag; var firstScriptTag; @@ -37,6 +37,10 @@ var chan = $("#chan").html(); var player_ready = false; var seekTo; var arr = [] +var song_title; +var viewers = 1; +var paused = false; +var playing = false; socket.on(chan.toLowerCase()+",np", function(obj) { @@ -46,15 +50,26 @@ socket.on(chan.toLowerCase()+",np", function(obj) conf = obj[1][0]; time = obj[2]; seekTo = time - conf["startTime"]; - getTitle(obj[0][0]["title"], 1); + song_title = obj[0][0]["title"]; + getTitle(song_title, viewers); + console.log(seekTo); if(player_ready) { - ytplayer.loadVideoById(video_id); - ytplayer.playVideo(); + if(!playing){ + ytplayer.loadVideoById(video_id); + ytplayer.playVideo(); + } ytplayer.seekTo(seekTo); } }); +socket.on(chan.toLowerCase()+",viewers", function(view) +{ + viewers = view; + if(song_title !== undefined) + getTitle(song_title, viewers); +}); + $(document).ready(function() { window.mobilecheck = function() { @@ -129,17 +144,31 @@ function onPlayerStateChange(newState) { break; case 0: socket.emit("end", video_id); + playing = false; console.log("ended"); break; case 1: console.log("playing"); - $("#playpause").toggleClass("play"); - $("#playpause").toggleClass("pause"); + playing = true; + if(document.getElementById("playpause").className == "play") + { + $("#playpause").toggleClass("play"); + $("#playpause").toggleClass("pause"); + } + if(paused) + { + socket.emit('pos'); + paused = false; + } break; case 2: console.log("paused"); - $("#playpause").toggleClass("play"); - $("#playpause").toggleClass("pause"); + paused = true; + if(document.getElementById("playpause").className == "pause") + { + $("#playpause").toggleClass("play"); + $("#playpause").toggleClass("pause"); + } break; case 3: console.log("buffering"); @@ -147,46 +176,30 @@ function onPlayerStateChange(newState) { } } -function checkEnd() +function getTitle(titt, v) { - -} - -function startNextSong() -{ - -} - -function getTime() -{ - -} - -function getTitle(titt, viewers) -{ - /*var outPutWord = viewers[5].length > 1 ? "viewers" : "viewer";*/ + var outPutWord = v > 1 ? "viewers" : "viewer"; console.log(titt); var title= titt.replace(/\\\'/g, "'").replace(/"/g,"'").replace(/&/g,"&"); document.title = title + " • Zöff"; if(!window.mobilecheck()){ console.log("ikke mobil"); - document.getElementsByName('v')[0].placeholder = title + " • 1 "; + document.getElementsByName('v')[0].placeholder = title + " • " + v + " " + outPutWord; }else { document.getElementById("mobileTitle").innerHTML = title; - document.getElementsByName('v')[0].placeholder = "Search • 1 " + outPutWord; + document.getElementsByName('v')[0].placeholder = "Search • 1 " + v + " " + outPutWord; //document.getElementById("viewers").innerHTML = viewers[5].length + " " + outPutWord; } } -function errorHandler(newState) +function errorHandler(newState) { socket.emit("end", video_id); } -function onPlayerReady(event) { +function onPlayerReady(event) { player_ready = true; - getTime(); if(!window.mobilecheck()) { $("#player").css("opacity", "1"); @@ -236,4 +249,4 @@ function notifyUser(id, title) { notification.close(); },5000); } -} \ No newline at end of file +} diff --git a/server/index.js b/server/index.js index efca5889..efdd8cfd 100755 --- a/server/index.js +++ b/server/index.js @@ -8,6 +8,9 @@ var io = require('socket.io')(server); var mongojs = require('mongojs'); var db = mongojs.connect('mydb'); +//crypto +var crypto = require('crypto'); + var port = 3000; var lists = []; @@ -20,7 +23,7 @@ io.on('connection', function(socket){ var coll; var guid; - + socket.on('list', function(list) { list = list.split(','); @@ -39,79 +42,28 @@ io.on('connection', function(socket){ db.getCollectionNames(function(err, docs){ if(contains(docs, coll)) { - db.collection(coll).find().sort({votes:-1}, function(err, docs) { - console.log(docs); - socket.emit(coll, docs); - db.collection(coll).find({now_playing:true}, function(err, np){ - console.log("sending now_playing to " + coll+",np"); - db.collection(coll).find({views:{$exists:true}}, function(err, conf){ - var d = new Date(); - var time = Math.floor(d.getTime() / 1000); - toSend = [np,conf,time]; - console.log(toSend); - socket.emit(coll+",np", toSend); - }); - }); - }); + sort_list(coll, socket, true); }else { db.createCollection(coll, function(err, docs){ - var d = new Date(); - var time = Math.floor(d.getTime() / 1000); - db.collection(coll).insert({"added":time,"guids":[],"id":"30H2Z8Lr-4c","now_playing":true,"title":"Empty Playlist","votes":0}, function(err, docs){ - db.collection(coll).insert({"addsongs":false, "adminpass":"", "allvideos":true, "frontpage":true, "longsongs":true, "removeplay": false, "shuffle": false, "skip": true, "skips": [], "startTime":time, "views": [], "vote": false}, function(err, docs) - { - socket.emit(coll, docs); - }) - }); - }) + db.collection(coll).insert({"addsongs":false, "adminpass":"", "allvideos":true, "frontpage":true, "longsongs":true, "removeplay": false, "shuffle": false, "skip": true, "skips": [], "startTime":get_time(), "views": [], "vote": false}, function(err, docs) + { + db.collection(coll).find().sort({votes:-1}, function(err, docs) { + console.log(docs); + socket.emit(coll, docs); + //send_play(coll, socket); + }); + }); + }); } - }); + }); }); socket.on('end', function(arg) { db.collection(coll).find({now_playing:true}, function(err, docs){ - if(docs[0]["id"] == arg){ - db.collection(coll).update({now_playing:true}, - {$set:{ - now_playing:false, - votes:0, - guids:[] - }}, function(err, docs) - { - db.collection(coll).findAndModify({ - query: {now_playing:false, id: {$ne: arg}}, - sort: {votes:-1}, - update: - {$set:{ - now_playing:true, - votes:0, - guids:[] - }} - }, function(err, docs) - { - var d = new Date(); - var time = Math.floor(d.getTime() / 1000); - db.collection(coll).update({views:{$exists:true}}, - {$set:{startTime:time}}, function(err, docs){ - db.collection(coll).find().sort({votes:-1}, function(err, docs) - { - io.sockets.emit(coll, docs); - db.collection(coll).find({now_playing:true}, function(err, np){ - console.log("sending now_playing to " + coll+",np"); - db.collection(coll).find({views:{$exists:true}}, function(err, conf){ - var d = new Date(); - var time = Math.floor(d.getTime() / 1000); - toSend = [np,conf,time]; - console.log(toSend); - io.sockets.emit(coll+",np", toSend); - }); - }); - }); - }); - }); - }); + if(docs.length > 0 && docs[0]["id"] == arg){ + change_song(coll); } }) }); @@ -121,151 +73,226 @@ io.on('connection', function(socket){ console.log("add songs"); var id = arr[0]; var title = arr[1]; - db.collection(coll).find({id:id}, function(err, docs){ - if(docs.length < 1) - { - var d = new Date(); - var time = Math.floor(d.getTime() / 1000); - var guids = [guid]; - var votes = 1; - db.collection(coll).find({id:"30H2Z8Lr-4c"}, function(err, docs){ - if(docs.length == 0){ - db.collection(coll).insert({"added":time,"guids":guids,"id":id,"now_playing":false,"title":title,"votes":votes}, function(err, docs){ - db.collection(coll).find().sort({votes:-1}, function(err, docs){ - io.sockets.emit(coll, docs); - }); - }); - }else{ - db.collection(coll).update({id:"30H2Z8Lr-4c"}, - {"added":time,"guids":guids,"id":id,"now_playing":false,"title":title,"votes":votes}, function(err, docs){ - db.collection(coll).find().sort({votes:-1}, function(err, docs){ - io.sockets.emit(coll, docs); - }); - }); - } - }); - } - }); + var hash = hash_pass(arr[2]); + db.collection(coll).find({views:{$exists:true}}, function(err, docs) + { + if((docs[0]["addsongs"] == "true" && (hash == docs[0]["adminpass"] || docs[0]["adminpass"] == "")) || docs[0]["addsongs"] == "false") + { + db.collection(coll).find({id:id}, function(err, docs){ + if(docs.length == 0) + { + var guids = [guid]; + var votes = 1 + db.collection(coll).find({now_playing:true}, function(err, docs){ + if(docs.length == 0) + np = true; + else + np = false; + db.collection(coll).insert({"added":get_time(),"guids":guids,"id":id,"now_playing":np,"title":title,"votes":votes}, function(err, docs){ + sort_list(coll, undefined, np); + }); + }); + }else{ + vote(coll, id, guid); + } + }); + }else + socket.emit("error_settings", "Password Protected List!"); + }); }); socket.on('vote', function(msg) { console.log("vote on list: " + msg[0].toLowerCase()); - var id = msg[1]; - guid = msg[3]; - - - db.collection(coll).find({id:id}, function(err, docs){ - if(!contains(docs[0]["guids"], guid)) - { - db.collection(coll).update({id:id}, {$inc:{votes:1}}, function(err, docs) - { - /*db.collection(coll).update({id:id}, {$push :{guids: guid}}, function(err, docs) - { - db.collection(coll).find().sort({votes:-1}, function(err, docs) - { - console.log(docs); - for(x in lists[coll]) - { - lists[coll][x].emit(coll, docs); - } - }); - });*/ - db.collection(coll).find().sort({votes:-1}, function(err, docs) - { - console.log(docs); - io.sockets.emit(coll, docs); - /*for(x in lists[coll]) - { - lists[coll][x].emit(coll, docs); - }*/ - }); - }); - } - }); - - }); - - socket.on('pos', function() - { - + if(msg[2] == "del") + del(msg); + else + { + var id = msg[1]; + guid = msg[3]; + var hash = has_pass(msg[4]); + db.collection(coll).find({views:{$exists:true}}, function(err, docs) + { + if((docs[0]["vote"] == "true" && (hash == docs[0]["adminpass"] || docs[0]["adminpass"] == "")) || docs[0]["vote"] == "false") + { + vote(coll, id, guid); + }else{ + socket.emit("error_settings", "Password Protected List!"); + } + }); + } }); socket.on('skip', function(list) { console.log("skip on list: " + list); - var coll = list[0].toLowerCase(); - db.collection(coll).find({skip: true}, function(err, docs){ + db.collection(coll).find({skip: "true"}, function(err, docs){ if(docs.length == 1) { console.log(lists[coll]); if(lists[coll].length/2 <= docs[0]["skips"]+1) { - db.collection(coll).update({now_playing:true}, - {$set:{ - now_playing:false, - votes:0, - guids:[] - }}, function(err, docs) - { - db.collection(coll).findAndModify({ - query: {now_playing:false}, - sort: {votes:-1}, - update: - {$set:{ - now_playing:true, - votes:0, - guids:[] - }} - }, function(err, docs) - { - var d = new Date(); - var time = Math.floor(d.getTime() / 1000); - db.collection(coll).update({views:{$exists:true}}, - {$set:{startTime:time}}, function(err, docs){ - db.collection(coll).find().sort({votes:-1}, function(err, docs) - { - io.sockets.emit(coll, docs); - db.collection(coll).find({now_playing:true}, function(err, np){ - console.log("sending now_playing to " + coll+",np"); - db.collection(coll).find({views:{$exists:true}}, function(err, conf){ - var d = new Date(); - var time = Math.floor(d.getTime() / 1000); - toSend = [np,conf,time]; - console.log(toSend); - io.sockets.emit(coll+",np", toSend); - }); - }); - }); - }); - }); - }); + change_song(coll); }else{ - db.collection(coll).update({views:{$exists:true}}, {$push:{guids:guid}}, function(err, coll){ + db.collection(coll).update({views:{$exists:true}}, {$push:{guids:guid}}, function(err, d){ //reply with skips or something console.log("skipped without effect"); + socket.emit("skipping", [docs[0]["skips"]+1, lists[coll].length]) }); } - } + }else + socket.emit("error_settings", "No Skipping!"); }); }); + socket.on('conf', function(params) + { + var voting = params[0]; + var addsongs = params[1]; + var longsongs = params[2]; + var frontpage = params[3]; + var allvideos = params[4]; + var removeplay = params[5]; + var adminpass = params[6]; + var skipping = params[7]; + var shuffling = params[8]; + + var hash = hash_pass(adminpass); + + db.collection(coll).find({views:{$exists:true}}, function(err, docs){ + console.log(docs[0]["adminpass"]); + console.log(params); + if(docs[0]["adminpass"] == "" || docs[0]["adminpass"] == hash) + { + db.collection(coll).update({views:{$exists:true}}, { + $set:{addsongs:addsongs, + allvideos:allvideos, + frontpage:frontpage, + skip:skipping, + vote:voting, + removeplay:removeplay, + shuffle:shuffling, + longsongs:longsongs, + adminpass:hash}}, function(err, docs){ + socket.emit("success_settings"); + sort_list(coll,undefined,false); + }); + + }else + { + socket.emit("error_settings", "Wrong Password!"); + } + }); + }); + socket.on('disconnect', function() { try { var index = lists[coll].indexOf(guid); - lists.splice(index, 1); + lists[coll].splice(index, 1); io.sockets.emit(coll+",viewers", lists[coll].length); }catch(err){} - /*db.collection(coll).update({guids: guid},{$pull: {guids: guid}}, {multi: true}, function(err, docs) - {}); - db.collection(coll).update({skips: guid},{$pull: {skips: guid}}, {multi: true}, function(err, docs) - {});*/ + }); + + socket.on('pos', function() + { + console.log("EMITTED"); + send_play(coll, socket); }); }); +function del(params) +{ + +} + +function hash_pass(adminpass) +{ + return crypto.createHash('sha256').update(adminpass).digest('base64'); +} + +function vote(coll, id, guid) +{ + db.collection(coll).find({id:id}, function(err, docs){ + if(!contains(docs[0]["guids"], guid)) + { + db.collection(coll).update({id:id}, {$inc:{votes:1}, $set:{added:get_time()}}, function(err, docs) + { + /*db.collection(coll).update({id:id}, {$push :{guids: guid}}, function(err, docs) + { + sort_list(coll, undefined, false); + });*/ + sort_list(coll, undefined, false); + }); + } + }); +} + +function change_song(coll) +{ + db.collection(coll).update({now_playing:true}, + {$set:{ + now_playing:false, + votes:0, + guids:[] + }}, function(err, docs) + { + db.collection(coll).aggregate([ + {$match:{now_playing:false}}, + {$sort:{votes:-1, added:1}}, + {$limit:1}], function(err, docs){ + db.collection(coll).update({id:docs[0]["id"]}, + {$set:{ + now_playing:true, + votes:0, + guids:[], + added:get_time()}}, function(err, docs){ + db.collection(coll).update({views:{$exists:true}}, + {$set:{startTime:get_time()}}, function(err, docs){ + sort_list(coll,undefined,true); + }); + + }); + }); + }); +} + +function sort_list(coll, socket, send) +{ + db.collection(coll).aggregate([{$sort:{votes:-1, added:1}}], function(err, docs) + { + io.sockets.emit(coll, docs); + if(socket === undefined && send) + send_play(coll); + else if(send) + send_play(coll, socket); + }); +} + +function send_play(coll, socket) +{ + db.collection(coll).find({now_playing:true}, function(err, np){ + console.log("sending now_playing to " + coll+",np"); + db.collection(coll).find({views:{$exists:true}}, function(err, conf){ + toSend = [np,conf,get_time()]; + console.log(toSend); + if(socket === undefined) + io.sockets.emit(coll+",np", toSend); + else + socket.emit(coll+",np", toSend); + }); + }); +} + +function get_time() +{ + var d = new Date(); + var time = Math.floor(d.getTime() / 1000); + return time; +} + function contains(a, obj) { var i = a.length; while (i--) { @@ -274,4 +301,4 @@ function contains(a, obj) { } } return false; -} \ No newline at end of file +}