From f52205d2cce6bc770a5f2314e774feeb7eae570a Mon Sep 17 00:00:00 2001 From: Dominik Schmidt Date: Wed, 30 Mar 2011 05:05:22 +0200 Subject: [PATCH] Update jreen plugin to newer jreen and sip plugin interface --- src/sip/jreen/jabber.cpp | 49 ++++++++++++++++------ src/sip/jreen/jabber.h | 6 +++ src/sip/jreen/jabber_p.cpp | 86 +++++++++++++++++++------------------- src/sip/jreen/jabber_p.h | 22 +++++----- thirdparty/jreen | 2 +- 5 files changed, 98 insertions(+), 67 deletions(-) diff --git a/src/sip/jreen/jabber.cpp b/src/sip/jreen/jabber.cpp index 0d0c9acc6..c97067f59 100644 --- a/src/sip/jreen/jabber.cpp +++ b/src/sip/jreen/jabber.cpp @@ -77,10 +77,10 @@ JabberPlugin::connectPlugin( bool startup ) if ( startup && !TomahawkSettings::instance()->jabberAutoConnect() ) return false; - QString jid = TomahawkSettings::instance()->jabberUsername(); - QString server = TomahawkSettings::instance()->jabberServer(); - QString password = TomahawkSettings::instance()->jabberPassword(); - unsigned int port = TomahawkSettings::instance()->jabberPort(); + QString jid = m_currentUsername = TomahawkSettings::instance()->jabberUsername(); + QString server = m_currentServer = TomahawkSettings::instance()->jabberServer(); + QString password = m_currentPassword = TomahawkSettings::instance()->jabberPassword(); + unsigned int port = m_currentPort = TomahawkSettings::instance()->jabberPort(); QStringList splitJid = jid.split( '@', QString::SkipEmptyParts ); if ( splitJid.size() < 2 ) @@ -115,7 +115,7 @@ void JabberPlugin::disconnectPlugin() { onDisconnected(); - + if ( p ) p->disconnect(); @@ -123,35 +123,35 @@ JabberPlugin::disconnectPlugin() p = 0; } -void +void JabberPlugin::onConnected() { if( !m_menu ) { m_menu = new QMenu( QString( "JREEN (" ).append( accountName() ).append(")" ) ); m_addFriendAction = m_menu->addAction( "Add Friend..." ); QAction *connectAction = m_menu->addAction( "Connect" ); - + connect( m_addFriendAction, SIGNAL(triggered() ), this, SLOT( showAddFriendDialog() ) ); connect( connectAction, SIGNAL( triggered() ), SLOT( connectPlugin() ) ); - + emit addMenu( m_menu ); } - + emit connected(); } -void +void JabberPlugin::onDisconnected() { if( m_menu && m_addFriendAction ) { emit removeMenu( m_menu ); - + delete m_menu; m_menu = 0; m_addFriendAction = 0; // deleted by menu } - + emit disconnected(); } @@ -190,4 +190,29 @@ JabberPlugin::showAddFriendDialog() addContact( id ); } +void +JabberPlugin::checkSettings() +{ + bool reconnect = false; + if ( m_currentUsername != TomahawkSettings::instance()->jabberUsername() ) + reconnect = true; + if ( m_currentPassword != TomahawkSettings::instance()->jabberPassword() ) + reconnect = true; + if ( m_currentServer != TomahawkSettings::instance()->jabberServer() ) + reconnect = true; + if ( m_currentPort != TomahawkSettings::instance()->jabberPort() ) + reconnect = true; + + m_currentUsername = TomahawkSettings::instance()->jabberUsername(); + m_currentPassword = TomahawkSettings::instance()->jabberPassword(); + m_currentServer = TomahawkSettings::instance()->jabberServer(); + m_currentPort = TomahawkSettings::instance()->jabberPort(); + + if ( reconnect && ( p || TomahawkSettings::instance()->jabberAutoConnect() ) ) + { + disconnectPlugin(); + connectPlugin( false ); + } +} + Q_EXPORT_PLUGIN2( sip, JabberPlugin ) diff --git a/src/sip/jreen/jabber.h b/src/sip/jreen/jabber.h index 543a5a218..ccbbafc0e 100644 --- a/src/sip/jreen/jabber.h +++ b/src/sip/jreen/jabber.h @@ -47,6 +47,7 @@ public: public slots: virtual bool connectPlugin( bool startup ); void disconnectPlugin(); + void checkSettings(); void sendMsg( const QString& to, const QString& msg ); void broadcastMsg( const QString &msg ); void addContact( const QString &jid, const QString& msg = QString() ); @@ -60,6 +61,11 @@ private: Jabber_p* p; QMenu* m_menu; QAction* m_addFriendAction; + + QString m_currentUsername; + QString m_currentPassword; + QString m_currentServer; + unsigned int m_currentPort; }; #endif diff --git a/src/sip/jreen/jabber_p.cpp b/src/sip/jreen/jabber_p.cpp index a902ef4a3..93987b35e 100644 --- a/src/sip/jreen/jabber_p.cpp +++ b/src/sip/jreen/jabber_p.cpp @@ -47,22 +47,22 @@ Jabber_p::Jabber_p( const QString& jid, const QString& password, const QString& //qsrand( QTime( 0, 0, 0 ).secsTo( QTime::currentTime() ) ); qsrand(QDateTime::currentDateTime().toTime_t()); - m_presences[jreen::Presence::Available] = "available"; - m_presences[jreen::Presence::Chat] = "chat"; - m_presences[jreen::Presence::Away] = "away"; - m_presences[jreen::Presence::DND] = "dnd"; - m_presences[jreen::Presence::XA] = "xa"; - m_presences[jreen::Presence::Unavailable] = "unavailable"; - m_presences[jreen::Presence::Probe] = "probe"; - m_presences[jreen::Presence::Error] = "error"; - m_presences[jreen::Presence::Invalid] = "invalid"; + m_presences[Jreen::Presence::Available] = "available"; + m_presences[Jreen::Presence::Chat] = "chat"; + m_presences[Jreen::Presence::Away] = "away"; + m_presences[Jreen::Presence::DND] = "dnd"; + m_presences[Jreen::Presence::XA] = "xa"; + m_presences[Jreen::Presence::Unavailable] = "unavailable"; + m_presences[Jreen::Presence::Probe] = "probe"; + m_presences[Jreen::Presence::Error] = "error"; + m_presences[Jreen::Presence::Invalid] = "invalid"; - m_jid = jreen::JID( jid ); + m_jid = Jreen::JID( jid ); - m_client = new jreen::Client( jid, password ); + m_client = new Jreen::Client( jid, password ); m_client->setResource( QString( "tomahawk%1" ).arg( "DOMME" ) ); - jreen::Capabilities::Ptr caps = m_client->presence().findExtension(); + Jreen::Capabilities::Ptr caps = m_client->presence().findExtension(); caps->setNode(TOMAHAWK_CAP_NODE_NAME); qDebug() << "Our JID set to:" << m_client->jid().full(); @@ -71,10 +71,10 @@ Jabber_p::Jabber_p( const QString& jid, const QString& password, const QString& connect(m_client->connection(), SIGNAL(error(SocketError)), SLOT(onError(SocketError))); connect(m_client, SIGNAL(serverFeaturesReceived(QSet)), SLOT(onConnect())); - connect(m_client, SIGNAL(disconnected(jreen::Client::DisconnectReason)), SLOT(onDisconnect(jreen::Client::DisconnectReason))); + connect(m_client, SIGNAL(disconnected(Jreen::Client::DisconnectReason)), SLOT(onDisconnect(Jreen::Client::DisconnectReason))); connect(m_client, SIGNAL(destroyed(QObject*)), this, SLOT(onDestroy())); - connect(m_client, SIGNAL(newMessage(jreen::Message)), SLOT(onNewMessage(jreen::Message))); - connect(m_client, SIGNAL(newPresence(jreen::Presence)), SLOT(onNewPresence(jreen::Presence))); + connect(m_client, SIGNAL(newMessage(Jreen::Message)), SLOT(onNewMessage(Jreen::Message))); + connect(m_client, SIGNAL(newPresence(Jreen::Presence)), SLOT(onNewPresence(Jreen::Presence))); qDebug() << "Connecting to the XMPP server..."; m_client->connectToServer(); @@ -124,7 +124,7 @@ Jabber_p::sendMsg( const QString& to, const QString& msg ) } qDebug() << Q_FUNC_INFO << to << msg; - jreen::Message m( jreen::Message::Chat, jreen::JID(to), msg); + Jreen::Message m( Jreen::Message::Chat, Jreen::JID(to), msg); m_client->send( m ); // assuming this is threadsafe } @@ -149,7 +149,7 @@ Jabber_p::broadcastMsg( const QString &msg ) foreach( const QString& jidstr, m_peers.keys() ) { qDebug() << "Broadcasting to" << jidstr <<"..."; - jreen::Message m(jreen::Message::Chat, jreen::JID(jidstr), msg, ""); + Jreen::Message m(Jreen::Message::Chat, Jreen::JID(jidstr), msg, ""); m_client->send( m ); } } @@ -191,27 +191,27 @@ Jabber_p::onConnect() emit connected(); qDebug() << "Connected as:" << m_jid.full(); - m_client->setPresence(jreen::Presence::Available, "Tomahawk-JREEN available", 1); + m_client->setPresence(Jreen::Presence::Available, "Tomahawk-JREEN available", 1); m_client->disco()->setSoftwareVersion( "Tomahawk JREEN", "0.0.0.0", "Foobar" ); m_client->setPingInterval(60000); - m_roster = new jreen::SimpleRoster( m_client ); + m_roster = new Jreen::SimpleRoster( m_client ); m_roster->load(); // join MUC with bare jid as nickname //TODO: make the room a list of rooms and make that configurable QString bare(m_jid.bare()); - m_room = new jreen::MUCRoom(m_client, jreen::JID(QString("tomahawk@conference.qutim.org/").append(bare.replace("@", "-")))); - m_room->setHistorySeconds(0); - m_room->join(); + m_room = new Jreen::MUCRoom(m_client, Jreen::JID(QString("tomahawk@conference.qutim.org/").append(bare.replace("@", "-")))); + //m_room->setHistorySeconds(0); + //m_room->join(); // treat muc participiants like contacts - connect(m_room, SIGNAL(messageReceived(jreen::Message, bool)), this, SLOT(onNewMessage(jreen::Message))); - connect(m_room, SIGNAL(presenceReceived(jreen::Presence,const jreen::MUCRoom::Participant*)), this, SLOT(onNewPresence(jreen::Presence))); + connect(m_room, SIGNAL(messageReceived(Jreen::Message, bool)), this, SLOT(onNewMessage(Jreen::Message))); + connect(m_room, SIGNAL(presenceReceived(Jreen::Presence,const Jreen::MUCRoom::Participant*)), this, SLOT(onNewPresence(Jreen::Presence))); } void -Jabber_p::onDisconnect( jreen::Client::DisconnectReason reason ) +Jabber_p::onDisconnect( Jreen::Client::DisconnectReason reason ) { QString error; bool reconnect = false; @@ -219,39 +219,39 @@ Jabber_p::onDisconnect( jreen::Client::DisconnectReason reason ) switch( reason ) { - case jreen::Client::User: + case Jreen::Client::User: error = "User Interaction"; break; - case jreen::Client::HostUnknown: + case Jreen::Client::HostUnknown: error = "Host is unknown"; break; - case jreen::Client::ItemNotFound: + case Jreen::Client::ItemNotFound: error = "Item not found"; break; - case jreen::Client::AuthorizationError: + case Jreen::Client::AuthorizationError: error = "Authorization Error"; break; - case jreen::Client::RemoteStreamError: + case Jreen::Client::RemoteStreamError: error = "Remote Stream Error"; reconnect = true; break; - case jreen::Client::RemoteConnectionFailed: + case Jreen::Client::RemoteConnectionFailed: error = "Remote Connection failed"; break; - case jreen::Client::InternalServerError: + case Jreen::Client::InternalServerError: error = "Internal Server Error"; reconnect = true; break; - case jreen::Client::SystemShutdown: + case Jreen::Client::SystemShutdown: error = "System shutdown"; reconnect = true; reconnectInSeconds = 60; break; - case jreen::Client::Conflict: + case Jreen::Client::Conflict: error = "Conflict"; break; - case jreen::Client::Unknown: + case Jreen::Client::Unknown: error = "Unknown"; break; @@ -270,7 +270,7 @@ Jabber_p::onDisconnect( jreen::Client::DisconnectReason reason ) } void -Jabber_p::onNewMessage( const jreen::Message& m ) +Jabber_p::onNewMessage( const Jreen::Message& m ) { QString from = m.from().full(); QString msg = m.body(); @@ -283,10 +283,10 @@ Jabber_p::onNewMessage( const jreen::Message& m ) } -void Jabber_p::onNewPresence( const jreen::Presence& presence) +void Jabber_p::onNewPresence( const Jreen::Presence& presence) { - jreen::JID jid = presence.from(); + Jreen::JID jid = presence.from(); QString fulljid( jid.full() ); qDebug() << Q_FUNC_INFO << "handle presence" << fulljid << presence.subtype(); @@ -300,7 +300,7 @@ void Jabber_p::onNewPresence( const jreen::Presence& presence) } // ignore anyone not running tomahawk: - jreen::Capabilities::Ptr caps = presence.findExtension(); + Jreen::Capabilities::Ptr caps = presence.findExtension(); if ( caps && (caps->node() == TOMAHAWK_CAP_NODE_NAME )) { qDebug() << Q_FUNC_INFO << presence.from().full() << "tomahawk detected by caps"; @@ -356,13 +356,13 @@ void Jabber_p::onNewPresence( const jreen::Presence& presence) } bool -Jabber_p::presenceMeansOnline( jreen::Presence::Type p ) +Jabber_p::presenceMeansOnline( Jreen::Presence::Type p ) { switch(p) { - case jreen::Presence::Invalid: - case jreen::Presence::Unavailable: - case jreen::Presence::Error: + case Jreen::Presence::Invalid: + case Jreen::Presence::Unavailable: + case Jreen::Presence::Error: return false; break; default: diff --git a/src/sip/jreen/jabber_p.h b/src/sip/jreen/jabber_p.h index f10541c2c..ab0826f20 100644 --- a/src/sip/jreen/jabber_p.h +++ b/src/sip/jreen/jabber_p.h @@ -77,25 +77,25 @@ public slots: void addContact( const QString& jid, const QString& msg = QString() ); void disconnect(); - void onDisconnect(jreen::Client::DisconnectReason reason); + void onDisconnect(Jreen::Client::DisconnectReason reason); void onConnect(); private slots: - virtual void onNewPresence( const jreen::Presence& presence ); - virtual void onNewMessage( const jreen::Message& msg ); - virtual void onError( const jreen::Connection::SocketError& e ) + virtual void onNewPresence( const Jreen::Presence& presence ); + virtual void onNewMessage( const Jreen::Message& msg ); + virtual void onError( const Jreen::Connection::SocketError& e ) { qDebug() << e; } private: - bool presenceMeansOnline( jreen::Presence::Type p ); - jreen::Client *m_client; - jreen::MUCRoom *m_room; - jreen::SimpleRoster *m_roster; - jreen::JID m_jid; - QMap m_presences; - QMap m_peers; + bool presenceMeansOnline( Jreen::Presence::Type p ); + Jreen::Client *m_client; + Jreen::MUCRoom *m_room; + Jreen::SimpleRoster *m_roster; + Jreen::JID m_jid; + QMap m_presences; + QMap m_peers; QString m_server; }; diff --git a/thirdparty/jreen b/thirdparty/jreen index 040ca3f3c..126ef9d96 160000 --- a/thirdparty/jreen +++ b/thirdparty/jreen @@ -1 +1 @@ -Subproject commit 040ca3f3cb9b30b4845fc23054c833fda4717460 +Subproject commit 126ef9d96bf774b9808a16dd8c94001af408528b