X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fircserverhandler.cpp;h=4d32f1dd10459711258bb543d143a259e669d148;hb=adff595449304996ee1a5b21f9ee768f83e0a4b1;hp=25e5c4462569d8c0ba6926f04e572da654bf21a8;hpb=5cb19c841e567f26c34e77dbe254e530efacd6b3;p=quassel.git diff --git a/src/core/ircserverhandler.cpp b/src/core/ircserverhandler.cpp index 25e5c446..4d32f1dd 100644 --- a/src/core/ircserverhandler.cpp +++ b/src/core/ircserverhandler.cpp @@ -29,7 +29,7 @@ #include "ctcphandler.h" #include "ircuser.h" -#include "ircchannel.h" +#include "coreircchannel.h" #include "logger.h" #include @@ -41,7 +41,6 @@ IrcServerHandler::IrcServerHandler(NetworkConnection *parent) } IrcServerHandler::~IrcServerHandler() { - } /*! Handle a raw message string sent by the server. We try to find a suitable handler, otherwise we call a default handler. */ @@ -326,6 +325,24 @@ void IrcServerHandler::handleNotice(const QString &prefix, const QListisChannelName(target)) { + QString msg = serverDecode(params[1]); + QRegExp welcomeRegExp("^\\[([^\\]]+)\\] "); + if(welcomeRegExp.indexIn(msg) != -1) { + QString channelname = welcomeRegExp.cap(1); + msg = msg.mid(welcomeRegExp.matchedLength()); + CoreIrcChannel *chan = static_cast(network()->ircChannel(channelname)); // we only have CoreIrcChannels in the core, so this cast is safe + if(chan && !chan->receivedWelcomeMsg()) { + chan->setReceivedWelcomeMsg(); + emit displayMsg(Message::Notice, BufferInfo::ChannelBuffer, channelname, msg, prefix); + return; + } + } + } + if(prefix.isEmpty() || target == "AUTH") { target = ""; } else { @@ -572,8 +589,12 @@ void IrcServerHandler::handle305(const QString &prefix, const QList if(me) me->setAway(false); - if(!params.isEmpty()) - emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", serverDecode(params[0])); + if(!network()->autoAwayActive()) { + if(!params.isEmpty()) + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", serverDecode(params[0])); + } else { + network()->setAutoAwayActive(false); + } } // 306 RPL_NOWAWAY @@ -584,7 +605,7 @@ void IrcServerHandler::handle306(const QString &prefix, const QList if(me) me->setAway(true); - if(!params.isEmpty()) + if(!params.isEmpty() && !network()->autoAwayActive()) emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", serverDecode(params[0])); }