diff --git a/channel.js b/channel.js
index 3cf027a6..3460e139 100644
--- a/channel.js
+++ b/channel.js
@@ -88,7 +88,7 @@ var Channel = function(name, Server) {
};
this.filters = [
new Filter("monospace", "`([^`]+)`", "g", "$1"),
- new Filter("bold", "(.)\\*([^\\*]+)\\*", "g", "$1$2"),
+ new Filter("bold", "(^|\\s)\\*([^\\*]+)\\*", "g", "$1$2"),
new Filter("italic", "(^| )_([^_]+)_", "g", "$1$2"),
new Filter("strikethrough", "~~([^~]+)~~", "g", "$1"),
new Filter("inline spoiler", "\\[spoiler\\](.*)\\[\\/spoiler\\]", "ig", "$1"),
@@ -1144,6 +1144,7 @@ Channel.prototype.tryQueue = function(user, data) {
}
data.queueby = user ? user.name : "";
+ data.temp = !this.hasPermission(user, "addnontemp");
if(data.list)
this.addMediaList(data, user);
@@ -1160,7 +1161,7 @@ Channel.prototype.addMedia = function(data, user) {
user.socket.emit("queueFail", "You don't have permission to add cusstom embeds");
return;
}
- data.temp = isLive(data.type) || !this.hasPermission(user, "addnontemp");
+ data.temp = data.temp || isLive(data.type);
data.queueby = user ? user.name : "";
data.maxlength = this.hasPermission(user, "exceedmaxlength") ? 0 : this.opts.maxlength;
var chan = this;
@@ -1516,9 +1517,8 @@ Channel.prototype.tryVoteskip = function(user) {
return;
}
// Voteskip = auto-unafk
- if(user.meta.afk) {
- user.setAFK(false);
- }
+ user.setAFK(false);
+ user.autoAFK();
if(!this.voteskip) {
this.voteskip = new Poll("voteskip", "voteskip", ["yes"]);
}
diff --git a/get-info.js b/get-info.js
index 24ef4071..c545926d 100644
--- a/get-info.js
+++ b/get-info.js
@@ -17,18 +17,22 @@ var CustomEmbedFilter = require("./customembed").filter;
module.exports = function (Server) {
function urlRetrieve(transport, options, callback) {
- var req = transport.request(options, function (res) {
- var buffer = "";
- res.setEncoding("utf-8");
- res.on("data", function (chunk) {
- buffer += chunk;
+ try {
+ var req = transport.request(options, function (res) {
+ var buffer = "";
+ res.setEncoding("utf-8");
+ res.on("data", function (chunk) {
+ buffer += chunk;
+ });
+ res.on("end", function () {
+ callback(res.statusCode, buffer);
+ });
});
- res.on("end", function () {
- callback(res.statusCode, buffer);
- });
- });
- req.end();
+ req.end();
+ } catch(e) {
+ callback(503, "");
+ }
}
var Getters = {
diff --git a/package.json b/package.json
index 42902bea..faa921eb 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"author": "Calvin Montgomery",
"name": "CyTube",
"description": "Online media synchronizer and chat",
- "version": "2.3.1",
+ "version": "2.3.2",
"repository": {
"url": "http://github.com/calzoneman/sync"
},
diff --git a/playlist.js b/playlist.js
index d10a68ba..c91de926 100644
--- a/playlist.js
+++ b/playlist.js
@@ -458,6 +458,7 @@ Playlist.prototype.lead = function(lead) {
this._leadInterval = false;
}
else if(this.leading && !this._leadInterval) {
+ this._lastUpdate = Date.now();
this._leadInterval = setInterval(function() {
pl._leadLoop();
}, 1000);
diff --git a/server.js b/server.js
index 0fccc6ce..70c2fb81 100644
--- a/server.js
+++ b/server.js
@@ -6,7 +6,7 @@ var Logger = require("./logger");
var Channel = require("./channel");
var User = require("./user");
-const VERSION = "2.3.1";
+const VERSION = "2.3.2";
function getIP(req) {
var raw = req.connection.remoteAddress;
diff --git a/user.js b/user.js
index dfec554e..6395c6c8 100644
--- a/user.js
+++ b/user.js
@@ -205,7 +205,7 @@ User.prototype.initCallbacks = function() {
this.socket.on("chatMsg", function(data) {
if(this.channel != null) {
- if(data.msg.indexOf("/afk") == -1) {
+ if(data.msg.indexOf("/afk") != 0) {
this.setAFK(false);
this.autoAFK();
}
diff --git a/www/assets/js/callbacks.js b/www/assets/js/callbacks.js
index 7abc0769..04f9928c 100644
--- a/www/assets/js/callbacks.js
+++ b/www/assets/js/callbacks.js
@@ -627,15 +627,8 @@ Callbacks = {
var nametag = $("").text(data.name).appendTo(div);
formatUserlistItem(div, data);
addUserDropdown(div, data);
- var users = $("#userlist").children();
- for(var i = 0; i < users.length; i++) {
- var othername = users[i].children[1].innerHTML;
- if(othername.toLowerCase() > data.name.toLowerCase()) {
- div.insertBefore(users[i]);
- return;
- }
- }
div.appendTo($("#userlist"));
+ sortUserlist();
},
updateUser: function(data) {
@@ -647,16 +640,7 @@ Callbacks = {
// I'm a leader! Set up sync function
if(LEADTMR)
clearInterval(LEADTMR);
- LEADTMR = setInterval(function() {
- PLAYER.getTime(function(seconds) {
- socket.emit("mediaUpdate", {
- id: PLAYER.id,
- currentTime: seconds,
- paused: PLAYER.paused,
- type: PLAYER.type
- });
- });
- }, 5000);
+ LEADTMR = setInterval(sendVideoUpdate, 5000);
}
// I'm not a leader. Don't send syncs to the server
else {
@@ -670,6 +654,8 @@ Callbacks = {
if(user !== null) {
formatUserlistItem(user, data);
addUserDropdown(user, data);
+ if(USEROPTS.sort_rank)
+ sortUserlist();
}
},
@@ -684,6 +670,8 @@ Callbacks = {
.appendTo(user[0].children[0]);
$(user[0].children[1]).css("font-style", "italic");
}
+ if(USEROPTS.sort_afk)
+ sortUserlist();
},
userLeave: function(data) {
diff --git a/www/assets/js/data.js b/www/assets/js/data.js
index dd324cc9..f7948d08 100644
--- a/www/assets/js/data.js
+++ b/www/assets/js/data.js
@@ -115,7 +115,9 @@ var USEROPTS = {
qbtn_idontlikechange : getOrDefault("qbtn_idontlikechange", false),
first_visit : getOrDefault("first_visit", true),
ignore_channelcss : getOrDefault("ignore_channelcss", false),
- ignore_channeljs : getOrDefault("ignore_channeljs", false)
+ ignore_channeljs : getOrDefault("ignore_channeljs", false),
+ sort_rank : getOrDefault("sort_rank", false),
+ sort_afk : getOrDefault("sort_afk", false)
};
var NO_WEBSOCKETS = USEROPTS.altsocket;
diff --git a/www/assets/js/paginator.js b/www/assets/js/paginator.js
index efaa6ad6..e2fcac53 100644
--- a/www/assets/js/paginator.js
+++ b/www/assets/js/paginator.js
@@ -48,7 +48,7 @@
.appendTo(sep);
}
}
- for(var i = s; i < s + this.opts.maxPages; i++) {
+ for(var i = s; i < s + this.opts.maxPages && i < s + pages; i++) {
(function (i) {
var li = $("