diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | bcb704366cb5e333a626c18c308c7e0448a8e69f (patch) | |
tree | f0d6ab7d78ecdd9207cf46536376b44b91a1ca71 /kopete/protocols/oscar/liboscar/connectionhandler.cpp | |
download | tdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.tar.gz tdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdenetwork@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kopete/protocols/oscar/liboscar/connectionhandler.cpp')
-rw-r--r-- | kopete/protocols/oscar/liboscar/connectionhandler.cpp | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/kopete/protocols/oscar/liboscar/connectionhandler.cpp b/kopete/protocols/oscar/liboscar/connectionhandler.cpp new file mode 100644 index 00000000..bf5706ee --- /dev/null +++ b/kopete/protocols/oscar/liboscar/connectionhandler.cpp @@ -0,0 +1,174 @@ +/* + Kopete Oscar Protocol + Oscar Multiple Connection Handling + + Copyright (c) 2005 Matt Rogers <[email protected]> + + Kopete (c) 2002-2005 by the Kopete developers <[email protected]> + + ************************************************************************* + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + ************************************************************************* +*/ + +#include "connectionhandler.h" +#include <qvaluelist.h> +#include <kdebug.h> +#include "connection.h" +#include "oscartypes.h" + +class ConnectionHandler::Private +{ +public: + QValueList<Connection*> connections; + QMap<Connection*, ConnectionRoomInfo> chatRoomConnections; +}; + +ConnectionHandler::ConnectionHandler() +{ + d = new Private; +} + + +ConnectionHandler::~ConnectionHandler() +{ + delete d; +} + +void ConnectionHandler::append( Connection* c ) +{ + d->connections.append( c ); +} + +void ConnectionHandler::remove( Connection* c ) +{ + kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Removing connection " + << c << endl; + d->connections.remove( c ); + c->deleteLater(); +} + +void ConnectionHandler::remove( int family ) +{ + kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Removing all connections " << + "supporting family " << family << endl; + QValueList<Connection*>::iterator it = d->connections.begin(); + QValueList<Connection*>::iterator itEnd = d->connections.end(); + for ( ; it != itEnd; ++it ) + { + if ( ( *it )->isSupported( family ) ) + { + Connection* c = ( *it ); + it = d->connections.remove( it ); + c->deleteLater(); + } + } +} + +void ConnectionHandler::clear() +{ + kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Clearing all connections" + << endl; + while ( !d->connections.isEmpty() ) + { + Connection *c = d->connections.front(); + d->connections.pop_front(); + c->deleteLater(); + } +} + +Connection* ConnectionHandler::connectionForFamily( int family ) const +{ + QValueList<Connection*>::iterator it = d->connections.begin(); + QValueList<Connection*>::iterator itEnd = d->connections.end(); + int connectionCount = 0; + Connection* lastConnection = 0; + for ( ; it != itEnd; ++it ) + { + if ( ( *it )->isSupported( family ) ) + { + connectionCount++; + lastConnection = ( *it ); + } + } + if ( connectionCount == 1 ) + return lastConnection; + + return 0; +} + +Connection* ConnectionHandler::defaultConnection() const +{ + if ( d->connections.isEmpty() || d->connections.count() > 1 ) + return 0; + + return d->connections.first(); +} + +void ConnectionHandler::addChatInfoForConnection( Connection* c, Oscar::WORD exchange, const QString& room ) +{ + if ( d->connections.findIndex( c ) == -1 ) + d->connections.append( c ); + + ConnectionRoomInfo info = qMakePair( exchange, room ); + d->chatRoomConnections[c] = info; +} + +Connection* ConnectionHandler::connectionForChatRoom( Oscar::WORD exchange, const QString& room ) +{ + ConnectionRoomInfo infoToFind = qMakePair( exchange, room ); + QMap<Connection*, ConnectionRoomInfo>::iterator it, itEnd = d->chatRoomConnections.end(); + for ( it = d->chatRoomConnections.begin(); it != itEnd; ++it ) + { + if ( it.data() == infoToFind ) + { + Connection* c = it.key(); + return c; + } + } + + return 0; +} + +QString ConnectionHandler::chatRoomForConnection( Connection* c ) +{ + if ( d->connections.findIndex( c ) == -1 ) + return QString::null; + + QMap<Connection*, ConnectionRoomInfo>::iterator it, itEnd = d->chatRoomConnections.end(); + for ( it = d->chatRoomConnections.begin(); it != itEnd; ++it ) + { + if ( it.key() == c ) + { + QString room = it.data().second; + return room; + } + } + + return QString::null; +} + +Oscar::WORD ConnectionHandler::exchangeForConnection( Connection* c ) +{ + + if ( d->connections.findIndex( c ) == -1 ) + return 0xFFFF; + + QMap<Connection*, ConnectionRoomInfo>::iterator it, itEnd = d->chatRoomConnections.end(); + for ( it = d->chatRoomConnections.begin(); it != itEnd; ++it ) + { + if ( it.key() == c ) + { + Oscar::WORD exchange = it.data().first; + return exchange; + } + } + + return 0xFFFF; +} + |