thelounge/src/models/network.js

110 lines
1.8 KiB
JavaScript
Raw Normal View History

2014-09-13 23:29:45 +02:00
var _ = require("lodash");
var Chan = require("./chan");
module.exports = Network;
var id = 0;
function Network(attr) {
_.merge(this, _.extend({
2014-10-11 22:44:56 +02:00
name: "",
host: "",
port: 6667,
tls: false,
password: "",
2014-11-09 17:01:22 +01:00
commands: [],
2014-10-11 22:44:56 +02:00
username: "",
realname: "",
2014-09-13 23:29:45 +02:00
channels: [],
2016-04-03 07:12:49 +02:00
ip: null,
hostname: null,
2014-09-13 23:29:45 +02:00
id: id++,
irc: null,
serverOptions: {
PREFIX: [],
},
2014-09-13 23:29:45 +02:00
}, attr));
this.name = attr.name || prettify(attr.host);
this.channels.unshift(
2014-10-12 00:47:24 +02:00
new Chan({
name: this.name,
type: Chan.Type.LOBBY
})
2014-09-13 23:29:45 +02:00
);
}
2016-05-12 13:15:38 +02:00
Network.prototype.setNick = function(nick) {
this.nick = nick;
this.highlightRegex = new RegExp(
// Do not match characters and numbers (unless IRC color)
"(?:^|[^a-z0-9]|\x03[0-9]{1,2})" +
// Escape nickname, as it may contain regex stuff
nick.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&") +
// Do not match characters and numbers
"(?:[^a-z0-9]|$)",
// Case insensitive search
"i"
);
};
2014-09-13 23:29:45 +02:00
Network.prototype.toJSON = function() {
2016-05-12 13:15:38 +02:00
return _.omit(this, [
"irc",
"password",
"highlightRegex"
]);
2014-10-11 22:44:56 +02:00
};
Network.prototype.export = function() {
2014-10-12 00:47:24 +02:00
var network = _.pick(this, [
2016-05-12 13:15:38 +02:00
"nick",
2014-10-12 00:47:24 +02:00
"name",
"host",
"port",
"tls",
"password",
"username",
2014-11-09 17:01:22 +01:00
"realname",
2016-04-03 07:12:49 +02:00
"commands",
"ip",
"hostname"
2014-10-12 00:47:24 +02:00
]);
2016-05-12 13:15:38 +02:00
2016-06-19 19:12:42 +02:00
network.channels = this.channels
.filter(function(channel) {
return channel.type === Chan.Type.CHANNEL;
})
.map(function(chan) {
return _.pick(chan, [
"name"
]);
});
2016-05-12 13:15:38 +02:00
2014-10-11 22:44:56 +02:00
return network;
2014-09-13 23:29:45 +02:00
};
2016-03-20 15:28:47 +01:00
Network.prototype.getChannel = function(name) {
name = name.toLowerCase();
return _.find(this.channels, function(that) {
return that.name.toLowerCase() === name;
});
};
2014-09-13 23:29:45 +02:00
function prettify(host) {
var name = capitalize(host.split(".")[1]);
if (!name) {
name = host;
}
return name;
}
function capitalize(str) {
if (typeof str === "string") {
return str.charAt(0).toUpperCase() + str.slice(1);
}
}