Add configurable voteskip ratio, show # voteskips to mods

This commit is contained in:
calzoneman 2013-04-20 20:17:38 -05:00
parent 6e6f6217b0
commit 40ad039a06
5 changed files with 42 additions and 5 deletions

View File

@ -43,6 +43,7 @@ var Channel = function(name) {
qopen_allow_playnext: false, qopen_allow_playnext: false,
qopen_allow_delete: false, qopen_allow_delete: false,
allow_voteskip: true, allow_voteskip: true,
voteskip_ratio: 0.5,
pagetitle: this.name, pagetitle: this.name,
customcss: "", customcss: "",
customjs: "" customjs: ""
@ -292,6 +293,7 @@ Channel.prototype.userJoin = function(user) {
user.socket.emit("channelNotRegistered"); user.socket.emit("channelNotRegistered");
} }
this.users.push(user); this.users.push(user);
this.broadcastVoteskipUpdate();
if(user.name != "") { if(user.name != "") {
this.broadcastNewUser(user); this.broadcastNewUser(user);
} }
@ -342,6 +344,7 @@ Channel.prototype.userLeave = function(user) {
var idx = this.users.indexOf(user); var idx = this.users.indexOf(user);
if(idx >= 0 && idx < this.users.length) if(idx >= 0 && idx < this.users.length)
this.users.splice(idx, 1); this.users.splice(idx, 1);
this.broadcastVoteskipUpdate();
this.broadcastUsercount(); this.broadcastUsercount();
if(user.name != "") { if(user.name != "") {
this.sendAll("userLeave", { this.sendAll("userLeave", {
@ -407,7 +410,8 @@ Channel.prototype.sendUserlist = function(user) {
users.push({ users.push({
name: this.users[i].name, name: this.users[i].name,
rank: this.users[i].rank, rank: this.users[i].rank,
leader: this.users[i] == this.leader leader: this.users[i] == this.leader,
meta: this.users[i].meta
}); });
} }
} }
@ -499,6 +503,20 @@ Channel.prototype.broadcastChatFilters = function() {
} }
} }
Channel.prototype.broadcastVoteskipUpdate = function() {
var amt = this.voteskip ? this.voteskip.counts[0] : 0;
var need = this.voteskip ? this.users.length * this.opts.voteskip_ratio + 1 : 0;
for(var i = 0; i < this.users.length; i++) {
if(Rank.hasPermission(this.users[i], "seeVoteskip") ||
this.leader == this.users[i]) {
this.users[i].socket.emit("voteskip", {
count: amt,
need: need
});
}
}
}
Channel.prototype.broadcastMotd = function() { Channel.prototype.broadcastMotd = function() {
this.sendAll("updateMotd", this.motd); this.sendAll("updateMotd", this.motd);
} }
@ -662,6 +680,7 @@ Channel.prototype.playNext = function() {
// Reset voteskip // Reset voteskip
this.voteskip = false; this.voteskip = false;
this.broadcastVoteskipUpdate();
this.drinks = 0; this.drinks = 0;
this.broadcastDrinks(); this.broadcastDrinks();
@ -708,6 +727,7 @@ Channel.prototype.jumpTo = function(pos) {
// Reset voteskip // Reset voteskip
this.voteskip = false; this.voteskip = false;
this.broadcastVoteskipUpdate();
this.drinks = 0; this.drinks = 0;
this.broadcastDrinks(); this.broadcastDrinks();
@ -866,7 +886,8 @@ Channel.prototype.tryVoteskip = function(user) {
this.voteskip = new Poll("voteskip", "voteskip", ["yes"]); this.voteskip = new Poll("voteskip", "voteskip", ["yes"]);
} }
this.voteskip.vote(user.ip, 0); this.voteskip.vote(user.ip, 0);
if(this.voteskip.counts[0] > this.users.length / 2) { this.broadcastVoteskipUpdate();
if(this.voteskip.counts[0] > this.users.length * this.opts.voteskip_ratio) {
this.playNext(); this.playNext();
} }
} }

View File

@ -32,6 +32,7 @@ var permissions = {
chatFilter : exports.Moderator, chatFilter : exports.Moderator,
updateMotd : exports.Moderator, updateMotd : exports.Moderator,
drink : exports.Moderator, drink : exports.Moderator,
seeVoteskip : exports.Moderator,
search : exports.Guest, search : exports.Guest,
chat : exports.Guest, chat : exports.Guest,
}; };

View File

@ -75,6 +75,7 @@ function initCallbacks() {
.insertAfter($("link[href='./assets/css/ytsync.css']")); .insertAfter($("link[href='./assets/css/ytsync.css']"));
} }
$("#opt_allow_voteskip").prop("checked", opts.allow_voteskip); $("#opt_allow_voteskip").prop("checked", opts.allow_voteskip);
$("#opt_voteskip_ratio").val(opts.voteskip_ratio);
if(opts.customjs.trim() != "") { if(opts.customjs.trim() != "") {
$.getScript(opts.customjs); $.getScript(opts.customjs);
} }
@ -100,6 +101,15 @@ function initCallbacks() {
updateBanlist(data.entries); updateBanlist(data.entries);
}); });
socket.on("voteskip", function(data) {
if(data.count > 0) {
$("#voteskip").text("Voteskip ("+data.count+"/"+data.need+")");
}
else {
$("#voteskip").text("Voteskip");
}
});
/* REGION Rank Stuff */ /* REGION Rank Stuff */
socket.on("rank", function(data) { socket.on("rank", function(data) {

View File

@ -359,12 +359,14 @@ $("#opt_submit").click(function() {
if(ptitle == "") if(ptitle == "")
ptitle = $("#opt_pagetitle").attr("placeholder") ptitle = $("#opt_pagetitle").attr("placeholder")
var css = $("#opt_customcss").val(); var css = $("#opt_customcss").val();
var ratio = +$("#opt_voteskip_ratio").val() || 0.5;
opts = { opts = {
qopen_allow_qnext: $("#opt_qopen_allow_qnext").prop("checked"), qopen_allow_qnext: $("#opt_qopen_allow_qnext").prop("checked"),
qopen_allow_move: $("#opt_qopen_allow_move").prop("checked"), qopen_allow_move: $("#opt_qopen_allow_move").prop("checked"),
qopen_allow_delete: $("#opt_qopen_allow_delete").prop("checked"), qopen_allow_delete: $("#opt_qopen_allow_delete").prop("checked"),
qopen_allow_playnext: $("#opt_qopen_allow_playnext").prop("checked"), qopen_allow_playnext: $("#opt_qopen_allow_playnext").prop("checked"),
allow_voteskip: $("#opt_allow_voteskip").prop("checked"), allow_voteskip: $("#opt_allow_voteskip").prop("checked"),
voteskip_ratio: ratio,
pagetitle: ptitle, pagetitle: ptitle,
customcss: css, customcss: css,
customjs: $("#opt_customjs").val() customjs: $("#opt_customjs").val()

View File

@ -22,10 +22,10 @@
<div class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
<a class="brand" href="#">CyTube</a> <a class="brand" href="index.html">CyTube</a>
<div class=""> <div class="">
<ul class="nav"> <ul class="nav">
<li class="active"><a href="#">Home</a></li> <li class="active"><a href="index.html">Home</a></li>
<li><a href="help.html">Help</a></li> <li><a href="help.html">Help</a></li>
</ul> </ul>
<div class="navbar-form pull-right" id="loginform"> <div class="navbar-form pull-right" id="loginform">
@ -120,7 +120,6 @@
<div class="span10 offset1"> <div class="span10 offset1">
<form action="javascript:void(0)"> <form action="javascript:void(0)">
<fieldset> <fieldset>
<legend>Channel Options</legend>
<div class="span4"> <div class="span4">
<label>When the queue is open:</label> <label>When the queue is open:</label>
<label class="checkbox"> <label class="checkbox">
@ -157,6 +156,10 @@
<input type="checkbox" id="opt_allow_voteskip"> <input type="checkbox" id="opt_allow_voteskip">
Allow voteskip Allow voteskip
</label> </label>
<br>
<label>Voteskip Ratio
<input type="text" id="opt_voteskip_ratio" class="pull-right">
</label>
</div> </div>
<div class="span10"> <div class="span10">