Finish channel.js
This commit is contained in:
parent
e155a30a17
commit
4204ea8ddf
298
channel.js
298
channel.js
|
|
@ -36,7 +36,6 @@ var Channel = function(name, Server) {
|
||||||
self.users = [];
|
self.users = [];
|
||||||
self.afkers = [];
|
self.afkers = [];
|
||||||
self.playlist = new Playlist(self);
|
self.playlist = new Playlist(self);
|
||||||
self.library = {};
|
|
||||||
self.position = -1;
|
self.position = -1;
|
||||||
self.drinks = 0;
|
self.drinks = 0;
|
||||||
self.leader = null;
|
self.leader = null;
|
||||||
|
|
@ -501,7 +500,6 @@ Channel.prototype.cacheMedia = function(media) {
|
||||||
if(self.registered) {
|
if(self.registered) {
|
||||||
self.server.db.addToLibrary(self.name, media);
|
self.server.db.addToLibrary(self.name, media);
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.tryNameBan = function(actor, name) {
|
Channel.prototype.tryNameBan = function(actor, name) {
|
||||||
|
|
@ -655,34 +653,20 @@ Channel.prototype.tryUnban = function(actor, data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.search = function(query, callback) {
|
Channel.prototype.search = function(query, callback) {
|
||||||
// Search youtube
|
var self = this;
|
||||||
if(callback) {
|
self.server.db.searchLibrary(self.name, query, function (err, res) {
|
||||||
if(query.trim() == "") {
|
if(err) {
|
||||||
return;
|
res = [];
|
||||||
}
|
}
|
||||||
this.server.infogetter.Getters["ytSearch"](query.split(" "), function(err, vids) {
|
|
||||||
if(!err) {
|
results.sort(function(a, b) {
|
||||||
callback(vids);
|
var x = a.title.toLowerCase();
|
||||||
}
|
var y = b.title.toLowerCase();
|
||||||
|
|
||||||
|
return (x == y) ? 0 : (x < y ? -1 : 1);
|
||||||
});
|
});
|
||||||
return;
|
callback(results);
|
||||||
}
|
|
||||||
|
|
||||||
query = query.toLowerCase();
|
|
||||||
var results = [];
|
|
||||||
for(var id in this.library) {
|
|
||||||
if(this.library[id].title.toLowerCase().indexOf(query) != -1) {
|
|
||||||
results.push(this.library[id]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
results.sort(function(a, b) {
|
|
||||||
var x = a.title.toLowerCase();
|
|
||||||
var y = b.title.toLowerCase();
|
|
||||||
|
|
||||||
return (x == y) ? 0 : (x < y ? -1 : 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* REGION User interaction */
|
/* REGION User interaction */
|
||||||
|
|
@ -870,7 +854,15 @@ Channel.prototype.sendRankStuff = function(user) {
|
||||||
|
|
||||||
Channel.prototype.sendChannelRanks = function(user) {
|
Channel.prototype.sendChannelRanks = function(user) {
|
||||||
if(Rank.hasPermission(user, "acl")) {
|
if(Rank.hasPermission(user, "acl")) {
|
||||||
user.socket.emit("channelRanks", this.server.db.listChannelRanks(this.name));
|
this.server.db.listChannelRanks(this.name, function (err, res) {
|
||||||
|
if(err) {
|
||||||
|
user.socket.emit("errorMsg", {
|
||||||
|
msg: "Internal error: " + err
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
user.socket.emit("channelRanks", res);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -949,50 +941,56 @@ Channel.prototype.broadcastUsercount = function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.broadcastNewUser = function(user) {
|
Channel.prototype.broadcastNewUser = function(user) {
|
||||||
var aliases = this.server.db.getAliases(user.ip);
|
var self = this;
|
||||||
var chan = this;
|
self.server.db.listAliases(user.ip, function (err, aliases) {
|
||||||
this.ip_alias[user.ip] = aliases;
|
if(err) {
|
||||||
aliases.forEach(function(alias) {
|
aliases = [];
|
||||||
chan.name_alias[alias] = aliases;
|
|
||||||
});
|
|
||||||
|
|
||||||
this.login_hist.unshift({
|
|
||||||
name: user.name,
|
|
||||||
aliases: this.ip_alias[user.ip],
|
|
||||||
time: Date.now()
|
|
||||||
});
|
|
||||||
if(this.login_hist.length > 20)
|
|
||||||
this.login_hist.pop();
|
|
||||||
|
|
||||||
if(user.name.toLowerCase() in this.namebans &&
|
|
||||||
this.namebans[user.name.toLowerCase()] != null) {
|
|
||||||
this.kick(user, "You're banned!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.sendAll("addUser", {
|
|
||||||
name: user.name,
|
|
||||||
rank: user.rank,
|
|
||||||
leader: this.leader == user,
|
|
||||||
meta: user.meta,
|
|
||||||
profile: user.profile
|
|
||||||
});
|
|
||||||
//this.sendRankStuff(user);
|
|
||||||
if(user.rank > Rank.Guest) {
|
|
||||||
this.saveRank(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
var msg = user.name + " joined (aliases: ";
|
|
||||||
msg += this.ip_alias[user.ip].join(", ") + ")";
|
|
||||||
var pkt = {
|
|
||||||
username: "[server]",
|
|
||||||
msg: msg,
|
|
||||||
msgclass: "server-whisper",
|
|
||||||
time: Date.now()
|
|
||||||
};
|
|
||||||
this.users.forEach(function(u) {
|
|
||||||
if(u.rank >= 2) {
|
|
||||||
u.socket.emit("joinMessage", pkt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.ip_alias[user.ip] = aliases;
|
||||||
|
aliases.forEach(function (alias) {
|
||||||
|
chan.name_alias[alias] = aliases;
|
||||||
|
});
|
||||||
|
|
||||||
|
self.login_hist.unshift({
|
||||||
|
name: user.name,
|
||||||
|
aliases: self.ip_alias[user.ip],
|
||||||
|
time: Date.now()
|
||||||
|
});
|
||||||
|
|
||||||
|
if(self.login_hist.length > 20)
|
||||||
|
self.login_hist.pop();
|
||||||
|
|
||||||
|
if(user.name.toLowerCase() in self.namebans &&
|
||||||
|
self.namebans[user.name.toLowerCase()] !== null) {
|
||||||
|
self.kick(user, "You're banned!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
self.sendAll("addUser", {
|
||||||
|
name: user.name,
|
||||||
|
rank: user.rank,
|
||||||
|
leader: self.leader == user,
|
||||||
|
meta: user.meta,
|
||||||
|
profile: user.profile
|
||||||
|
});
|
||||||
|
|
||||||
|
if(user.rank > Rank.Guest) {
|
||||||
|
self.saveRank(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
var msg = user.name + " joined (aliases: ";
|
||||||
|
msg += self.ip_alias[user.ip].join(", ") + ")";
|
||||||
|
var pkt = {
|
||||||
|
username: "[server]",
|
||||||
|
msg: msg,
|
||||||
|
msgclass: "server-whisper",
|
||||||
|
time: Date.now()
|
||||||
|
};
|
||||||
|
self.users.forEach(function(u) {
|
||||||
|
if(u.rank >= 2) {
|
||||||
|
u.socket.emit("joinMessage", pkt);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1076,13 +1074,6 @@ Channel.prototype.broadcastBanlist = function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.broadcastRankTable = function() {
|
|
||||||
var ranks = this.server.db.listChannelRanks(this.name);
|
|
||||||
for(var i = 0; i < this.users.length; i++) {
|
|
||||||
this.sendACL(this.users[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Channel.prototype.broadcastChatFilters = function() {
|
Channel.prototype.broadcastChatFilters = function() {
|
||||||
var filts = new Array(this.filters.length);
|
var filts = new Array(this.filters.length);
|
||||||
for(var i = 0; i < this.filters.length; i++) {
|
for(var i = 0; i < this.filters.length; i++) {
|
||||||
|
|
@ -1200,9 +1191,6 @@ Channel.prototype.tryQueue = function(user, data) {
|
||||||
if(typeof data.id !== "string" && data.id !== false) {
|
if(typeof data.id !== "string" && data.id !== false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(typeof data.type !== "string" && !(data.id in this.library)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(data.pos == "next" && !this.hasPermission(user, "playlistnext")) {
|
if(data.pos == "next" && !this.hasPermission(user, "playlistnext")) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -1224,69 +1212,87 @@ Channel.prototype.tryQueue = function(user, data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.addMedia = function(data, user) {
|
Channel.prototype.addMedia = function(data, user) {
|
||||||
if(data.type === "yp" && !this.hasPermission(user, "playlistaddlist")) {
|
var self = this;
|
||||||
user.socket.emit("queueFail", "You don't have permission to add playlists");
|
if(data.type === "yp" &&
|
||||||
|
!self.hasPermission(user, "playlistaddlist")) {
|
||||||
|
user.socket.emit("queueFail", "You don't have permission to add " +
|
||||||
|
"playlists");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(data.type === "cu" && !this.hasPermission(user, "playlistaddcustom")) {
|
if(data.type === "cu" &&
|
||||||
user.socket.emit("queueFail", "You don't have permission to add cusstom embeds");
|
!self.hasPermission(user, "playlistaddcustom")) {
|
||||||
|
user.socket.emit("queueFail", "You don't have permission to add " +
|
||||||
|
"custom embeds");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
data.temp = data.temp || isLive(data.type);
|
data.temp = data.temp || isLive(data.type);
|
||||||
data.queueby = user ? user.name : "";
|
data.queueby = user ? user.name : "";
|
||||||
data.maxlength = this.hasPermission(user, "exceedmaxlength") ? 0 : this.opts.maxlength;
|
data.maxlength = self.hasPermission(user, "exceedmaxlength")
|
||||||
var chan = this;
|
? 0
|
||||||
if(data.id in this.library) {
|
: this.opts.maxlength;
|
||||||
var m = this.library[data.id].dup();
|
self.server.db.getLibraryItem(self.name, data.id,
|
||||||
if(data.maxlength && m.seconds > data.maxlength) {
|
function (err, item) {
|
||||||
user.socket.emit("queueFail", "Media is too long!");
|
if(err) {
|
||||||
|
user.socket.emit("queueFail", "Internal error: " + err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
data.media = m;
|
if(item !== null) {
|
||||||
this.playlist.addCachedMedia(data, function (err, item) {
|
var m = new Media(item.id, item.title, item.seconds, item.type);
|
||||||
if(err) {
|
if(data.maxlength && m.seconds > data.maxlength) {
|
||||||
if(err === true)
|
user.socket.emit("queueFail", "Media is too long!");
|
||||||
err = false;
|
|
||||||
if(user)
|
|
||||||
user.socket.emit("queueFail", err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
chan.logger.log("### " + user.name + " queued " + item.media.title);
|
|
||||||
chan.sendAll("queue", {
|
|
||||||
item: item.pack(),
|
|
||||||
after: item.prev ? item.prev.uid : "prepend"
|
|
||||||
});
|
|
||||||
chan.broadcastPlaylistMeta();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(isLive(data.type) && !this.hasPermission(user, "playlistaddlive")) {
|
|
||||||
user.socket.emit("queueFail", "You don't have permission to queue livestreams");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.playlist.addMedia(data, function(err, item) {
|
data.media = m;
|
||||||
if(err) {
|
self.playlist.addCachedMedia(data, function (err, item) {
|
||||||
if(err === true)
|
if(err) {
|
||||||
err = false;
|
if(err === true)
|
||||||
if(user)
|
err = false;
|
||||||
user.socket.emit("queueFail", err);
|
if(user)
|
||||||
return;
|
user.socket.emit("queueFail", err);
|
||||||
}
|
return;
|
||||||
else {
|
}
|
||||||
chan.logger.log("### " + user.name + " queued " + item.media.title);
|
else {
|
||||||
chan.sendAll("queue", {
|
chan.logger.log("### " + user.name + " queued " + item.media.title);
|
||||||
item: item.pack(),
|
chan.sendAll("queue", {
|
||||||
after: item.prev ? item.prev.uid : "prepend"
|
item: item.pack(),
|
||||||
|
after: item.prev ? item.prev.uid : "prepend"
|
||||||
|
});
|
||||||
|
chan.broadcastPlaylistMeta();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
if(isLive(data.type) &&
|
||||||
|
!self.hasPermission(user, "playlistaddlive")) {
|
||||||
|
user.socket.emit("queueFail", "You don't have " +
|
||||||
|
"permission to add livestreams");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
self.playlist.addMedia(data, function(err, item) {
|
||||||
|
if(err) {
|
||||||
|
if(err === true)
|
||||||
|
err = false;
|
||||||
|
if(user)
|
||||||
|
user.socket.emit("queueFail", err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
chan.logger.log("### " + user.name + " queued " + item.media.title);
|
||||||
|
chan.sendAll("queue", {
|
||||||
|
item: item.pack(),
|
||||||
|
after: item.prev ? item.prev.uid : "prepend"
|
||||||
|
});
|
||||||
|
chan.broadcastPlaylistMeta();
|
||||||
|
if(!item.temp)
|
||||||
|
chan.cacheMedia(item.media);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
chan.broadcastPlaylistMeta();
|
|
||||||
if(!item.temp)
|
|
||||||
chan.cacheMedia(item.media);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.addMediaList = function(data, user) {
|
Channel.prototype.addMediaList = function(data, user) {
|
||||||
|
|
@ -1315,6 +1321,7 @@ Channel.prototype.addMediaList = function(data, user) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.tryQueuePlaylist = function(user, data) {
|
Channel.prototype.tryQueuePlaylist = function(user, data) {
|
||||||
|
var self = this;
|
||||||
if(!this.hasPermission(user, "playlistaddlist")) {
|
if(!this.hasPermission(user, "playlistaddlist")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -1328,11 +1335,19 @@ Channel.prototype.tryQueuePlaylist = function(user, data) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var pl = this.server.db.loadUserPlaylist(user.name, data.name);
|
self.server.db.getUserPlaylist(user.name, data.name,
|
||||||
data.list = pl;
|
function (err, pl) {
|
||||||
data.queueby = user.name;
|
if(err) {
|
||||||
data.temp = !this.hasPermission(user, "addnontemp");
|
user.socket.emit("errorMsg", {
|
||||||
this.addMediaList(data, user);
|
msg: "Playlist load failed: " + err
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
data.list = pl;
|
||||||
|
data.queueby = user.name;
|
||||||
|
data.temp = !self.hasPermission(user, "addnontemp");
|
||||||
|
self.addMediaList(data, user);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.setTemp = function(uid, temp) {
|
Channel.prototype.setTemp = function(uid, temp) {
|
||||||
|
|
@ -1394,13 +1409,14 @@ Channel.prototype.tryUncache = function(user, data) {
|
||||||
if(typeof data.id != "string") {
|
if(typeof data.id != "string") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(this.server.db.removeFromLibrary(this.name, data.id)) {
|
self.server.db.removeFromLibrary(self.name, data.id,
|
||||||
var msg = data.id;
|
function (err, res) {
|
||||||
if(data.id in this.library)
|
if(err)
|
||||||
msg = this.library[data.id];
|
return;
|
||||||
this.logger.log("*** " + user.name + " deleted " + msg + " from library");
|
|
||||||
delete this.library[data.id];
|
self.logger.log("*** " + user.name + " deleted " + data.id +
|
||||||
}
|
" from library");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.playNext = function() {
|
Channel.prototype.playNext = function() {
|
||||||
|
|
|
||||||
16
database.js
16
database.js
|
|
@ -607,6 +607,22 @@ Database.prototype.getLibraryItem = function (channame, id, callback) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Database.prototype.searchLibrary = function (channame, term, callback) {
|
||||||
|
var self = this;
|
||||||
|
if(typeof callback !== "function")
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(!$util.isValidChannelName(channame)) {
|
||||||
|
callback("Invalid channel name", null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var query = "SELECT id, title, seconds, type FROM " +
|
||||||
|
"`chan_" + channame + "_library` WHERE title LIKE %?%";
|
||||||
|
|
||||||
|
self.query(query, [term], callback);
|
||||||
|
};
|
||||||
|
|
||||||
Database.prototype.addChannelBan = function (channame, ip, name, banBy,
|
Database.prototype.addChannelBan = function (channame, ip, name, banBy,
|
||||||
callback) {
|
callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
|
||||||
22
user.js
22
user.js
|
|
@ -298,19 +298,23 @@ User.prototype.initCallbacks = function() {
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
this.socket.on("searchMedia", function(data) {
|
this.socket.on("searchMedia", function(data) {
|
||||||
|
var self = this;
|
||||||
if(this.channel != null) {
|
if(this.channel != null) {
|
||||||
if(data.source == "yt") {
|
if(data.source == "yt") {
|
||||||
var callback = function(vids) {
|
var searchfn = self.server.infogetter.Getters["ytSearch"];
|
||||||
this.socket.emit("searchResults", {
|
searchfn(data.query.split(" "), function (e, vids) {
|
||||||
|
if(!e) {
|
||||||
|
self.socket.emit("searchResults", {
|
||||||
|
results: vids
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
self.channel.search(data.query, function (vids) {
|
||||||
|
self.socket.emit("searchResults", {
|
||||||
results: vids
|
results: vids
|
||||||
});
|
});
|
||||||
}.bind(this);
|
}
|
||||||
this.channel.search(data.query, callback);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this.socket.emit("searchResults", {
|
|
||||||
results: this.channel.search(data.query)
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue