summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/irc/ircsignalhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/protocols/irc/ircsignalhandler.cpp')
-rw-r--r--kopete/protocols/irc/ircsignalhandler.cpp173
1 files changed, 173 insertions, 0 deletions
diff --git a/kopete/protocols/irc/ircsignalhandler.cpp b/kopete/protocols/irc/ircsignalhandler.cpp
new file mode 100644
index 00000000..5bfab0cc
--- /dev/null
+++ b/kopete/protocols/irc/ircsignalhandler.cpp
@@ -0,0 +1,173 @@
+
+/*
+ ircsignalhandler.cpp - Maps signals from the IRC engine to contacts
+
+ Copyright (c) 2004 by Jason Keirstead <jason@keirstead.org>
+
+ Kopete (c) 2002-2003 by the Kopete developers <kopete-devel@kde.org>
+
+ *************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#include "ircusercontact.h"
+#include "ircchannelcontact.h"
+#include "ircsignalhandler.h"
+
+#include "kircengine.h"
+
+IRCSignalHandler::IRCSignalHandler(IRCContactManager *m)
+ : QObject(m),
+ manager(m)
+{
+ KIRC::Engine *m_engine = static_cast<IRCAccount*>( manager->mySelf()->account() )->engine();
+
+ //Channel Connections to ourself
+ QObject::connect(m_engine, SIGNAL(incomingNamesList(const QString &, const QStringList &)),
+ this, SLOT(slotNamesList(const QString &, const QStringList &)));
+
+ QObject::connect(m_engine, SIGNAL(incomingEndOfNames(const QString &)),
+ this, SLOT(slotEndOfNames(const QString &)));
+
+ QObject::connect(m_engine, SIGNAL(incomingTopicUser(const QString &, const QString &, const QDateTime &)),
+ this, SLOT(slotTopicUser(const QString&,const QString&,const QDateTime&)));
+
+ //Channel String mappings
+ map<IRCChannelContact>( m, SIGNAL(incomingFailedChankey(const QString &)),
+ &IRCChannelContact::failedChankey );
+
+ map<IRCChannelContact>( m, SIGNAL(incomingFailedChanFull(const QString &)),
+ &IRCChannelContact::failedChanInvite );
+
+ map<IRCChannelContact>( m, SIGNAL(incomingFailedChanInvite(const QString &)),
+ &IRCChannelContact::failedChanInvite );
+
+ map<IRCChannelContact>( m, SIGNAL(incomingFailedChanBanned(const QString &)),
+ &IRCChannelContact::failedChanBanned );
+
+ mapSingle<IRCChannelContact>( m, SIGNAL(incomingJoinedChannel(const QString &, const QString &)),
+ &IRCChannelContact::userJoinedChannel );
+
+ mapSingle<IRCChannelContact>( m, SIGNAL(incomingExistingTopic(const QString &, const QString &)),
+ &IRCChannelContact::channelTopic );
+
+ mapSingle<IRCChannelContact>( m, SIGNAL(incomingChannelHomePage(const QString &, const QString &)),
+ &IRCChannelContact::channelHomePage );
+
+ mapDouble<IRCChannelContact>( m,
+ SIGNAL(incomingPartedChannel(const QString &, const QString &,const QString &)),
+ &IRCChannelContact::userPartedChannel );
+
+ mapDouble<IRCChannelContact>( m,
+ SIGNAL(incomingTopicChange(const QString &, const QString &,const QString &)),
+ &IRCChannelContact::topicChanged );
+
+ mapDouble<IRCChannelContact>( m,
+ SIGNAL(incomingChannelModeChange(const QString &, const QString &,const QString &)),
+ &IRCChannelContact::incomingModeChange );
+
+ mapDouble<IRCChannelContact>( m,
+ SIGNAL(incomingChannelMode(const QString &, const QString &,const QString &)),
+ &IRCChannelContact::incomingChannelMode );
+
+ mapTriple<IRCChannelContact>( m,
+ SIGNAL(incomingKick(const QString &, const QString &,const QString &,const QString &)),
+ &IRCChannelContact::userKicked );
+
+ //User connections to ourself
+ QObject::connect(m_engine, SIGNAL(incomingWhoIsIdle(const QString &, unsigned long )),
+ this, SLOT(slotNewWhoIsIdle(const QString &, unsigned long )));
+
+ QObject::connect(m_engine, SIGNAL(incomingWhoReply(const QString &, const QString &, const QString &,
+ const QString &, const QString &, bool, const QString &, uint, const QString & )),
+ this, SLOT( slotNewWhoReply(const QString &, const QString &, const QString &, const QString &,
+ const QString &, bool, const QString &, uint, const QString &)));
+
+ //User signal mappings
+ map<IRCUserContact>( m, SIGNAL(incomingUserOnline( const QString & )), &IRCUserContact::userOnline );
+
+ map<IRCUserContact>( m, SIGNAL(incomingWhoIsOperator( const QString & )), &IRCUserContact::newWhoIsOperator );
+
+ map<IRCUserContact>( m, SIGNAL(incomingWhoIsIdentified( const QString & )), &IRCUserContact::newWhoIsIdentified );
+
+ map<IRCUserContact>( m, SIGNAL(incomingEndOfWhois( const QString & )), &IRCUserContact::whoIsComplete );
+
+ map<IRCUserContact>( m, SIGNAL(incomingEndOfWhoWas( const QString & )), &IRCUserContact::whoWasComplete );
+
+ mapSingle<IRCUserContact>( m, SIGNAL(incomingUserIsAway( const QString &, const QString & )),
+ &IRCUserContact::incomingUserIsAway );
+
+ mapSingle<IRCUserContact>( m, SIGNAL(incomingWhoIsChannels( const QString &, const QString & )),
+ &IRCUserContact::newWhoIsChannels );
+
+ mapDouble<IRCUserContact>( m,
+ SIGNAL(incomingWhoIsServer(const QString &, const QString &, const QString &)),
+ &IRCUserContact::newWhoIsServer );
+
+ mapDouble<IRCUserContact>( m,
+ SIGNAL(incomingPrivAction(const QString &, const QString &, const QString &)),
+ &IRCUserContact::newAction );
+
+ mapDouble<IRCChannelContact>( m,
+ SIGNAL(incomingAction(const QString &, const QString &, const QString &)),
+ &IRCChannelContact::newAction );
+
+ mapTriple<IRCUserContact>( m,
+ SIGNAL(incomingWhoIsUser(const QString &, const QString &, const QString &, const QString &)),
+ &IRCUserContact::newWhoIsUser );
+
+ mapTriple<IRCUserContact>( m,
+ SIGNAL(incomingWhoWasUser(const QString &, const QString &, const QString &, const QString &)),
+ &IRCUserContact::newWhoIsUser );
+}
+
+IRCSignalHandler::~IRCSignalHandler()
+{
+ //Delete our mapping pointers
+ for( QValueList<IRCSignalMappingBase*>::iterator it = mappings.begin(); it != mappings.end(); ++it )
+ delete *it;
+}
+
+void IRCSignalHandler::slotNamesList( const QString &chan, const QStringList &list )
+{
+ IRCChannelContact *c = manager->existChannel( chan );
+ if( c )
+ c->namesList( list );
+}
+
+void IRCSignalHandler::slotEndOfNames( const QString &chan )
+{
+ IRCChannelContact *c = manager->existChannel( chan );
+ if ( c )
+ c->endOfNames();
+}
+
+void IRCSignalHandler::slotTopicUser(const QString &chan, const QString &user,const QDateTime &time)
+{
+ IRCChannelContact *c = manager->existChannel( chan );
+ if( c )
+ c->topicUser( user, time );
+}
+
+void IRCSignalHandler::slotNewWhoIsIdle(const QString &nick, unsigned long val )
+{
+ IRCUserContact *c = manager->findUser( nick );
+ if( c )
+ c->newWhoIsIdle( val );
+}
+
+void IRCSignalHandler::slotNewWhoReply(const QString &nick, const QString &arg1, const QString &arg2,
+ const QString &arg3, const QString &arg4, bool arg5, const QString &arg6, uint arg7, const QString &arg8 )
+{
+ IRCUserContact *c = manager->findUser( nick );
+ if( c )
+ c->newWhoReply( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 );
+}
+
+#include "ircsignalhandler.moc"