From 12c7ac48a7ebaf34e3c5c18aef3eafc4d9db24ae Mon Sep 17 00:00:00 2001 From: Edward Hades Date: Thu, 15 Jan 2009 23:51:24 +0300 Subject: [PATCH] Implemented /names command as in Irssi. --- src/core/userinputhandler.cpp | 33 +++++++++++++++++++++++++++++++++ src/core/userinputhandler.h | 1 + 2 files changed, 34 insertions(+), 0 deletions(-) diff --git a/src/core/userinputhandler.cpp b/src/core/userinputhandler.cpp index ae504a9..0352ec1 100644 --- a/src/core/userinputhandler.cpp +++ b/src/core/userinputhandler.cpp @@ -346,6 +346,39 @@ void UserInputHandler::handleTopic(const BufferInfo &bufferInfo, const QString & emit putCmd("TOPIC", params); } +void UserInputHandler::handleNames(const BufferInfo &bufferInfo, const QString &msg) { + if(bufferInfo.bufferName().isEmpty() || bufferInfo.type() != BufferInfo::ChannelBuffer) return; + + IrcChannel *chan = network()->ircChannel(bufferInfo.bufferName()); + QList< QString > words; + int maxlength = 1; + foreach(IrcUser* u, chan->ircUsers()) + { + QString word = QString("%1%2").arg(chan->userModes(u).replace('o','@').replace('v','+').replace('h','%'), 1).arg(u->nick()); + + if(word.length() > maxlength) + maxlength = word.length(); + + words << word; + } + + const static int cols = 4; // FIXME: probably an option. + int pos = 1; + QString buffer; + foreach(QString word, words) + { + buffer += QString("[%1]").arg(word, -maxlength); + if(++pos % cols == 0) + { + emit displayMsg(Message::Server, bufferInfo.type(), bufferInfo.bufferName(), buffer); + buffer.clear(); + } + } + + if(!buffer.isEmpty()) + emit displayMsg(Message::Server, bufferInfo.type(), bufferInfo.bufferName(), buffer); +} + void UserInputHandler::handleVoice(const BufferInfo &bufferInfo, const QString &msg) { QStringList nicks = msg.split(' ', QString::SkipEmptyParts); QString m = "+"; for(int i = 0; i < nicks.count(); i++) m += 'v'; diff --git a/src/core/userinputhandler.h b/src/core/userinputhandler.h index 5df2686..11f4059 100644 --- a/src/core/userinputhandler.h +++ b/src/core/userinputhandler.h @@ -48,6 +48,7 @@ public slots: void handleMe(const BufferInfo &bufferInfo, const QString &text); void handleMode(const BufferInfo &bufferInfo, const QString &text); void handleMsg(const BufferInfo &bufferInfo, const QString &text); + void handleNames(const BufferInfo &bufferInfo, const QString &text); void handleNick(const BufferInfo &bufferInfo, const QString &text); void handleNotice(const BufferInfo &bufferInfo, const QString &text); void handleOper(const BufferInfo &bufferInfo, const QString &text); -- 1.6.1