diff --git a/server/server.js b/server/server.js index 9b0f4ee3..10280ecd 100755 --- a/server/server.js +++ b/server/server.js @@ -545,7 +545,7 @@ io.on('connection', function(socket){ } }); - + socket.on('reconnect_failed', function() { if(in_list) @@ -563,7 +563,7 @@ io.on('connection', function(socket){ } }); - + socket.on('connect_timeout', function() { if(in_list) diff --git a/static/css/style.css b/static/css/style.css index 416387f2..13bd2de3 100755 --- a/static/css/style.css +++ b/static/css/style.css @@ -575,7 +575,7 @@ ul #chat-log{ padding: 0 !important; } .switch{ - display: inline; + display: flex; float: right; /*position: absolute;*/ margin-right:10px; diff --git a/static/js/admin.js b/static/js/admin.js index 30a7cb59..23bba4c7 100755 --- a/static/js/admin.js +++ b/static/js/admin.js @@ -1,74 +1,79 @@ var pass_corr = ""; +admin_listener(); -socket.on("toast", function(msg) +function admin_listener() { - console.log("Got message from server: "+msg); - pass_corr = "correct"; - switch(msg) { - case "addedsong": - msg=rnd(["I added your song", "Your song has been added", "Yay, more songs!", "Thats a cool song!", "I added that song for you", "I see you like adding songs..."]) - break; - case "savedsettings": - msg=rnd(["I've saved your settings", "I stored all your settings", "Your settings have been stored in a safe place"]) - break; - case "wrongpass": - msg=rnd(["That's not the right password!", "Wrong! Better luck next time...", "You seem to have mistyped the password", "Incorrect. Have you tried meditating?","Nope, wrong password!", "Wrong password. The authorities have been notified."]) - if(localStorage[chan.toLowerCase()]){ - localStorage.removeItem(chan.toLowerCase()); - } - break; - case "shuffled": - msg=rnd(["♫ You stir me right round, baby. ♫","♫ Stir, stir, stir my boat ♫","I vigorously stirred your playlist!", "I hope you like your list stirred, not shaken.", "I shuffled your playlist with the cosmic background radiation as a seed. Enjoy.", "100% randomized, for your listening pleasure!", "I hope you enjoy your fresh playlist!"]) - break; - case "deletesong": - msg=rnd(["Your song is now in a better place...", "You won't be seeing any more of that video...", "EXTERMINATE! EXTERMINATE! EXTERMINATE!", "I killed it with fire", "Thanks for deleting that song. I didn't like it anyways...", "Removed song securely."]) - break; - case "voted": - msg=rnd(["You voted!", "You vote like a boss", "Voting is the key to democracy", "May you get your song to the very top!", "I love that song! I vouch for you.", "Only you vote that good", "I like the way you vote...", "Up the video goes!", "Voted Zöff for president", "Only 999 more to go!"]) - break; - case "alreadyvoted": - msg=rnd(["You can't vote twice on that song!", "I see you have voted on that song before", "One vote per person!", "I know you want to hear your song, but have patience!", "I'm sorry, but I can't let you vote twice, Dave."]) - break; - case "skip": - msg=rnd(["The song was skipped", "I have skipped a song", "Skipped to the beat", "Skipmaster3000", "They see me skippin', they hatin'"]) - break; - case "listhaspass": - msg=rnd(["I'm sorry, but you have to be an admin to do that!", "Only admins can do that", "You're not allowed to do that, try logging in!", "I can't let you do that", "Please log in to do that"]) - break; - case "noskip": - msg=rnd(["Only Admins can skip songs, peasant!", "You have to log in to skip songs on this channel", "Try clicking the settings icon and logging in before you skip"]) - break; - case "alreadyskip": - msg=rnd(["Skipping is democratic, only one vote per person!", "More people have to vote to skip, not just you!", "Get someone else to skip too! You can't do it on yourself."]) - break; - case "notyetskip": - msg="Skipping is disabled the first 10 seconds."; - break; - } - Materialize.toast(msg, 4000); -}); + socket.on("toast", function(msg) + { + console.log("Got message from server: "+msg); + pass_corr = "correct"; + switch(msg) { + case "addedsong": + msg=rnd(["I added your song", "Your song has been added", "Yay, more songs!", "Thats a cool song!", "I added that song for you", "I see you like adding songs..."]) + break; + case "savedsettings": + msg=rnd(["I've saved your settings", "I stored all your settings", "Your settings have been stored in a safe place"]) + break; + case "wrongpass": + msg=rnd(["That's not the right password!", "Wrong! Better luck next time...", "You seem to have mistyped the password", "Incorrect. Have you tried meditating?","Nope, wrong password!", "Wrong password. The authorities have been notified."]) + if(localStorage[chan.toLowerCase()]){ + localStorage.removeItem(chan.toLowerCase()); + } + break; + case "shuffled": + msg=rnd(["♫ You stir me right round, baby. ♫","♫ Stir, stir, stir my boat ♫","I vigorously stirred your playlist!", "I hope you like your list stirred, not shaken.", "I shuffled your playlist with the cosmic background radiation as a seed. Enjoy.", "100% randomized, for your listening pleasure!", "I hope you enjoy your fresh playlist!"]) + break; + case "deletesong": + msg=rnd(["Your song is now in a better place...", "You won't be seeing any more of that video...", "EXTERMINATE! EXTERMINATE! EXTERMINATE!", "I killed it with fire", "Thanks for deleting that song. I didn't like it anyways...", "Removed song securely."]) + break; + case "voted": + msg=rnd(["You voted!", "You vote like a boss", "Voting is the key to democracy", "May you get your song to the very top!", "I love that song! I vouch for you.", "Only you vote that good", "I like the way you vote...", "Up the video goes!", "Voted Zöff for president", "Only 999 more to go!"]) + break; + case "alreadyvoted": + msg=rnd(["You can't vote twice on that song!", "I see you have voted on that song before", "One vote per person!", "I know you want to hear your song, but have patience!", "I'm sorry, but I can't let you vote twice, Dave."]) + break; + case "skip": + msg=rnd(["The song was skipped", "I have skipped a song", "Skipped to the beat", "Skipmaster3000", "They see me skippin', they hatin'"]) + break; + case "listhaspass": + msg=rnd(["I'm sorry, but you have to be an admin to do that!", "Only admins can do that", "You're not allowed to do that, try logging in!", "I can't let you do that", "Please log in to do that"]) + break; + case "noskip": + msg=rnd(["Only Admins can skip songs, peasant!", "You have to log in to skip songs on this channel", "Try clicking the settings icon and logging in before you skip"]) + break; + case "alreadyskip": + msg=rnd(["Skipping is democratic, only one vote per person!", "More people have to vote to skip, not just you!", "Get someone else to skip too! You can't do it on yourself."]) + break; + case "notyetskip": + msg="Skipping is disabled the first 10 seconds."; + break; + } + Materialize.toast(msg, 4000); + }); -socket.on("pw", function(msg) -{ - w_p = false; - adminpass = msg; - names=["vote","addsongs","longsongs","frontpage", "allvideos", "removeplay", "skip", "shuffle"]; - for (var i = 0; i < names.length; i++) { - $("input[name="+names[i]+"]").attr("disabled", false); - } - $(".card-action").removeClass("hide"); - $("#admin-lock").removeClass("mdi-action-lock"); - $("#admin-lock").addClass("mdi-action-lock-open clickable"); - localStorage.setItem(chan.toLowerCase(), msg); - Materialize.toast("Correct password. You now have access to the sacred realm of The Admin.", 4000); -}); + socket.on("pw", function(msg) + { + w_p = false; + adminpass = msg; + names=["vote","addsongs","longsongs","frontpage", "allvideos", "removeplay", "skip", "shuffle"]; + for (var i = 0; i < names.length; i++) { + $("input[name="+names[i]+"]").attr("disabled", false); + } + $(".card-action").removeClass("hide"); -socket.on("conf", function(msg) -{ - set_conf(msg[0]); -}); + $("#admin-lock").removeClass("mdi-action-lock"); + $("#admin-lock").addClass("mdi-action-lock-open clickable"); + localStorage.setItem(chan.toLowerCase(), msg); + Materialize.toast("Correct password. You now have access to the sacred realm of The Admin.", 4000); + }); + + socket.on("conf", function(msg) + { + set_conf(msg[0]); + }); +} $('input[class=conf]').change(function() { diff --git a/static/js/chat.js b/static/js/chat.js index 8346c3a4..cecee781 100755 --- a/static/js/chat.js +++ b/static/js/chat.js @@ -15,6 +15,7 @@ function chat(data) } setup_chat_listener(chan); +allchat_listener(); document.getElementById("chat-btn").addEventListener("click", function(){ $("#text-chat-input").focus(); @@ -30,30 +31,33 @@ $(".chat-tab").click(function(){ $("#text-chat-input").focus(); }); -socket.on("chat.all", function(inp) +function allchat_listener() { - - if($("#chat-bar").position()["left"] != 0) + socket.on("chat.all", function(inp) { - //$("#chat-btn").css("color", "grey"); - if(!blink_interval_exists) + + if($("#chat-bar").position()["left"] != 0) + { + //$("#chat-btn").css("color", "grey"); + if(!blink_interval_exists) + { + $("#favicon").attr("href", "static/images/highlogo.png"); + blink_interval_exists = true; + unseen = true; + blink_interval = setInterval(chat_blink, 2000); + } + }else if(document.hidden) { $("#favicon").attr("href", "static/images/highlogo.png"); - blink_interval_exists = true; unseen = true; - blink_interval = setInterval(chat_blink, 2000); } - }else if(document.hidden) - { - $("#favicon").attr("href", "static/images/highlogo.png"); - unseen = true; - } - var color = intToARGB(hashCode(inp[0])).substring(0,6); - $("#chatall").append("
  • "+inp[0]+"
  • "); - var in_text = document.createTextNode(inp[1]); - $("#chatall li:last")[0].appendChild(in_text); - document.getElementById("chatall").scrollTop = document.getElementById("chatall").scrollHeight -}); + var color = intToARGB(hashCode(inp[0])).substring(0,6); + $("#chatall").append("
  • "+inp[0]+"
  • "); + var in_text = document.createTextNode(inp[1]); + $("#chatall li:last")[0].appendChild(in_text); + document.getElementById("chatall").scrollTop = document.getElementById("chatall").scrollHeight + }); +} $(window).focus(function(){ if(unseen) diff --git a/static/js/list.js b/static/js/list.js index 5f962d1c..fd02216d 100755 --- a/static/js/list.js +++ b/static/js/list.js @@ -15,9 +15,15 @@ var check = false; (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check = true;})(navigator.userAgent||navigator.vendor||window.opera); return check; }; -socket.on(chan.toLowerCase(), function(msg){ - channel_function(msg); -}); +channel_listener(); +skipping_listener(); + +function channel_listener() +{ + socket.on(chan.toLowerCase(), function(msg){ + channel_function(msg); + }); +} function channel_function(msg) { @@ -88,14 +94,16 @@ function channel_function(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 skipping_listener(){ + 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 set_conf(conf_array) { diff --git a/static/js/youtube.js b/static/js/youtube.js index 17f6b83f..2bbde652 100755 --- a/static/js/youtube.js +++ b/static/js/youtube.js @@ -152,13 +152,28 @@ $(document).ready(function() function sample() { if (Date.now() - lastSample >= SAMPLE_RATE * 2) { + socket.removeAllListeners() socket.disconnect(); socket.connect(); + setup_all_listeners(); } lastSample = Date.now(); setTimeout(sample, SAMPLE_RATE); } +function setup_all_listeners() +{ + socket.on("get_list", function(){ + socket.emit('list', chan+',mockvalue'); + }); + setup_youtube_listener(chan); + admin_listener(); + setup_chat_listener(chan); + allchat_listener(); + channel_listener(); + skipping_listener(); +} + function loadjsfile(filename) { if (filesadded.indexOf("["+filename+"]")==-1){