1 /***************************************************************************
2 * Copyright (C) 2005-2010 by the Quassel Project *
3 * devel@quassel-irc.org *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) version 3. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
21 #include "coresessioneventprocessor.h"
23 #include "corenetwork.h"
24 #include "coresession.h"
27 CoreSessionEventProcessor::CoreSessionEventProcessor(CoreSession *session)
34 bool CoreSessionEventProcessor::checkParamCount(IrcEvent *e, int minParams) {
35 if(e->params().count() < minParams) {
36 if(e->type() == EventManager::IrcEventNumeric) {
37 qWarning() << "Command " << static_cast<IrcEventNumeric *>(e)->number() << " requires " << minParams << "params, got: " << e->params();
39 QString name = coreSession()->eventManager()->enumName(e->type());
40 qWarning() << qPrintable(name) << "requires" << minParams << "params, got:" << e->params();
48 void CoreSessionEventProcessor::processIrcEventNumeric(IrcEventNumeric *e) {
52 case 903: case 904: case 905: case 906: case 907:
53 qobject_cast<CoreNetwork *>(e->network())->putRawLine("CAP END");
61 void CoreSessionEventProcessor::processIrcEventInvite(IrcEvent *e) {
62 if(checkParamCount(e, 2)) {
63 e->network()->updateNickFromMask(e->prefix());
67 void CoreSessionEventProcessor::processIrcEventKick(IrcEvent *e) {
68 if(checkParamCount(e, 2)) {
69 e->network()->updateNickFromMask(e->prefix());
70 IrcUser *victim = e->network()->ircUser(e->params().at(1));
72 victim->partChannel(e->params().at(0));
73 //if(e->network()->isMe(victim)) e->network()->setKickedFromChannel(channel);
78 void CoreSessionEventProcessor::processIrcEventNick(IrcEvent *e) {
79 if(checkParamCount(e, 1)) {
80 IrcUser *ircuser = e->network()->updateNickFromMask(e->prefix());
82 qWarning() << Q_FUNC_INFO << "Unknown IrcUser!";
85 QString newnick = e->params().at(0);
86 QString oldnick = ircuser->nick();
88 // the order is cruicial
89 // otherwise the client would rename the buffer, see that the assigned ircuser doesn't match anymore
90 // and remove the ircuser from the querybuffer leading to a wrong on/offline state
91 ircuser->setNick(newnick);
92 coreSession()->renameBuffer(e->networkId(), newnick, oldnick);
96 void CoreSessionEventProcessor::processIrcEventPart(IrcEvent *e) {
97 if(checkParamCount(e, 1)) {
98 IrcUser *ircuser = e->network()->updateNickFromMask(e->prefix());
100 qWarning() << Q_FUNC_INFO<< "Unknown IrcUser!";
103 QString channel = e->params().at(0);
104 ircuser->partChannel(channel);
105 if(e->network()->isMe(ircuser))
106 qobject_cast<CoreNetwork *>(e->network())->setChannelParted(channel);