+}
+*/
+
+void Server::handleUserAway(QString bufname, QString msg) {
+ putCmd("AWAY", QStringList(msg));
+}
+
+void Server::handleUserDeop(QString bufname, QString msg) {
+ QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
+ QString m = "-"; for(int i = 0; i < nicks.count(); i++) m += 'o';
+ QStringList params;
+ params << bufname << m << nicks;
+ putCmd("MODE", params);
+}
+
+void Server::handleUserDevoice(QString bufname, QString msg) {
+ QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
+ QString m = "-"; for(int i = 0; i < nicks.count(); i++) m += 'v';
+ QStringList params;
+ params << bufname << m << nicks;
+ putCmd("MODE", params);
+}
+
+void Server::handleUserInvite(QString bufname, QString msg) {
+ QStringList params;
+ params << msg << bufname;
+ putCmd("INVITE", params);
+}
+
+void Server::handleUserJoin(QString bufname, QString msg) {
+ putCmd("JOIN", QStringList(msg));
+}
+
+void Server::handleUserKick(QString bufname, QString msg) {
+ QStringList params;
+ params << bufname << msg.split(' ', QString::SkipEmptyParts);
+ putCmd("KICK", params);
+}
+
+void Server::handleUserList(QString bufname, QString msg) {
+ putCmd("LIST", msg.split(' ', QString::SkipEmptyParts));
+}
+
+void Server::handleUserMode(QString bufname, QString msg) {
+ putCmd("MODE", msg.split(' ', QString::SkipEmptyParts));
+}
+
+void Server::handleUserMsg(QString bufname, QString msg) {
+ QString nick = msg.section(" ", 0, 0);
+ msg = msg.section(" ", 1);
+ if(nick.isEmpty() || msg.isEmpty()) return;
+ QStringList params;
+ params << nick << msg;
+ putCmd("PRIVMSG", params);
+}
+
+void Server::handleUserNick(QString bufname, QString msg) {
+ QString nick = msg.section(' ', 0, 0);
+ putCmd("NICK", QStringList(nick));
+}
+
+void Server::handleUserOp(QString bufname, QString msg) {
+ QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
+ QString m = "+"; for(int i = 0; i < nicks.count(); i++) m += 'o';
+ QStringList params;
+ params << bufname << m << nicks;
+ putCmd("MODE", params);
+}
+
+void Server::handleUserPart(QString bufname, QString msg) {
+ QStringList params;
+ params << bufname << msg;
+ putCmd("PART", params);
+}
+
+void Server::handleUserQuit(QString bufname, QString msg) {
+ putCmd("QUIT", QStringList(msg));
+}
+
+void Server::handleUserQuote(QString bufname, QString msg) {
+ putRawLine(msg);
+}
+
+void Server::handleUserSay(QString bufname, QString msg) {
+ if(bufname.isEmpty()) return; // server buffer
+ QStringList params;
+ params << bufname << msg;
+ putCmd("PRIVMSG", params);
+ emit displayMsg(params[0], Message(Message::Msg, msg, currentNick, Message::Self));
+}
+
+void Server::handleUserVoice(QString bufname, QString msg) {
+ QStringList nicks = msg.split(' ', QString::SkipEmptyParts);
+ QString m = "+"; for(int i = 0; i < nicks.count(); i++) m += 'v';
+ QStringList params;
+ params << bufname << m << nicks;
+ putCmd("MODE", params);
+}
+
+/**********************************************************************************/
+
+void Server::handleServerJoin(QString prefix, QStringList params) {
+ Q_ASSERT(params.count() == 1);
+ QString nick = updateNickFromMask(prefix);
+ if(nick == currentNick) {
+ // Q_ASSERT(!buffers.contains(params[0])); // cannot join a buffer twice!
+ // Buffer *buf = new Buffer(params[0]);
+ // buffers[params[0]] = buf;
+ } else {
+ VarMap n;
+ if(nicks.contains(nick)) {
+ n = nicks[nick].toMap();
+ VarMap chans = n["Channels"].toMap();
+ // Q_ASSERT(!chans.keys().contains(params[0])); TODO uncomment
+ chans[params[0]] = VarMap();
+ n["Channels"] = chans;
+ nicks[nick] = n;
+ emit nickUpdated(network, nick, n);
+ } else {
+ VarMap chans;
+ chans[params[0]] = VarMap();
+ n["Channels"] = chans;
+ n["User"] = userFromMask(prefix);
+ n["Host"] = hostFromMask(prefix);
+ nicks[nick] = n;
+ emit nickAdded(network, nick, n);