From 057825bf970dbb9021d2ae46866dcfd49bde532d Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 28 Mar 2011 03:31:10 +0200 Subject: [PATCH] * Fixed SIP plugins always reconnecting when the SettingsDialog was closed. --- src/sip/SipHandler.cpp | 28 ++++++++++-------------- src/sip/SipHandler.h | 1 + src/sip/jabber/jabber.cpp | 43 +++++++++++++++++++++++++++++++------ src/sip/jabber/jabber.h | 11 ++++++++-- src/sip/jabber/jabber_p.cpp | 2 +- src/sip/twitter/twitter.cpp | 23 +++++++++----------- src/sip/twitter/twitter.h | 3 +-- src/sip/zeroconf/zeroconf.h | 2 +- 8 files changed, 70 insertions(+), 43 deletions(-) diff --git a/src/sip/SipHandler.cpp b/src/sip/SipHandler.cpp index d09fe9d7e..7d77b5fc7 100644 --- a/src/sip/SipHandler.cpp +++ b/src/sip/SipHandler.cpp @@ -28,7 +28,6 @@ #include "network/controlconnection.h" #include "sourcelist.h" #include "tomahawksettings.h" -#include "tomahawk/tomahawkapp.h" #include "config.h" @@ -59,8 +58,7 @@ SipHandler::plugins() const void SipHandler::onSettingsChanged() { - disconnectPlugins(); - connectPlugins(); + checkSettings(); } @@ -166,23 +164,19 @@ SipHandler::pluginLoaded( const QString& name ) const } +void +SipHandler::checkSettings() +{ + foreach( SipPlugin* sip, m_plugins ) + { + sip->checkSettings(); + } +} + + void SipHandler::connectPlugins( bool startup, const QString &pluginName ) { -#ifndef TOMAHAWK_HEADLESS - if ( !TomahawkSettings::instance()->acceptedLegalWarning() ) - { - int result = QMessageBox::question( - TomahawkApp::instance()->mainWindow(), "Legal Warning", - "By pressing OK below, you agree that your use of Tomahawk will be in accordance with any applicable laws, including copyright and intellectual property laws, in effect in your country of residence, and indemify the Tomahawk developers and project from liability should you choose to break those laws.\n\nFor more information, please see http://gettomahawk.com/legal", - "I Do Not Agree", "I Agree" - ); - if ( result != 1 ) - return; - else - TomahawkSettings::instance()->setAcceptedLegalWarning( true ); - } -#endif foreach( SipPlugin* sip, m_plugins ) { if ( pluginName.isEmpty() || ( !pluginName.isEmpty() && sip->name() == pluginName ) ) diff --git a/src/sip/SipHandler.h b/src/sip/SipHandler.h index f127dcc16..0d3dcfa63 100644 --- a/src/sip/SipHandler.h +++ b/src/sip/SipHandler.h @@ -39,6 +39,7 @@ public: public slots: void addContact( const QString& id ) { qDebug() << Q_FUNC_INFO << id; } + void checkSettings(); void connectPlugins( bool startup = false, const QString &pluginName = QString() ); void disconnectPlugins( const QString &pluginName = QString() ); void toggleConnect(); diff --git a/src/sip/jabber/jabber.cpp b/src/sip/jabber/jabber.cpp index 761335d5f..05a49141e 100644 --- a/src/sip/jabber/jabber.cpp +++ b/src/sip/jabber/jabber.cpp @@ -76,12 +76,14 @@ 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(); + m_currentUsername = TomahawkSettings::instance()->jabberUsername(); + m_currentPassword = TomahawkSettings::instance()->jabberPassword(); + m_currentServer = TomahawkSettings::instance()->jabberServer(); + m_currentPort = TomahawkSettings::instance()->jabberPort(); - QStringList splitJid = jid.split( '@', QString::SkipEmptyParts ); + QString server = m_currentServer; + + QStringList splitJid = m_currentUsername.split( '@', QString::SkipEmptyParts ); if ( splitJid.size() < 2 ) { qDebug() << "JID did not have an @ in it, could not find a server part"; @@ -91,14 +93,14 @@ JabberPlugin::connectPlugin( bool startup ) if ( server.isEmpty() ) server = splitJid[1]; - if ( port < 1 || port > 65535 || jid.isEmpty() || password.isEmpty() ) + if ( m_currentPort < 1 || m_currentPort > 65535 || m_currentUsername.isEmpty() || m_currentPassword.isEmpty() ) { qDebug() << "Jabber credentials look wrong, not connecting"; return false; } delete p; - p = new Jabber_p( jid, password, server, port ); + p = new Jabber_p( m_currentUsername, m_currentPassword, server, m_currentPort ); QObject::connect( p, SIGNAL( peerOnline( QString ) ), SIGNAL( peerOnline( QString ) ) ); QObject::connect( p, SIGNAL( peerOffline( QString ) ), SIGNAL( peerOffline( QString ) ) ); @@ -174,4 +176,31 @@ 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/jabber/jabber.h b/src/sip/jabber/jabber.h index c702fed71..a5bd18a9b 100644 --- a/src/sip/jabber/jabber.h +++ b/src/sip/jabber/jabber.h @@ -51,7 +51,7 @@ public slots: void disconnectPlugin() { onDisconnected(); - + if ( p ) p->disconnect(); @@ -59,6 +59,8 @@ public slots: p = 0; } + void checkSettings(); + void sendMsg( const QString& to, const QString& msg ) { if ( p ) @@ -82,11 +84,16 @@ private slots: void showAddFriendDialog(); void onConnected(); void onDisconnected(); - + private: Jabber_p* p; QMenu* m_menu; QAction* m_addFriendAction; + + QString m_currentServer; + QString m_currentUsername; + QString m_currentPassword; + unsigned int m_currentPort; }; #endif diff --git a/src/sip/jabber/jabber_p.cpp b/src/sip/jabber/jabber_p.cpp index 4425b1a93..8513ef144 100644 --- a/src/sip/jabber/jabber_p.cpp +++ b/src/sip/jabber/jabber_p.cpp @@ -27,8 +27,8 @@ #include #include #include -#include #include +#include using namespace gloox; using namespace std; diff --git a/src/sip/twitter/twitter.cpp b/src/sip/twitter/twitter.cpp index ba8b3f1ef..d7e0d8464 100644 --- a/src/sip/twitter/twitter.cpp +++ b/src/sip/twitter/twitter.cpp @@ -168,7 +168,6 @@ TwitterPlugin::disconnectPlugin() m_twitterAuth.data()->deleteLater(); m_cachedPeers.empty(); - m_attemptedConnects.empty(); delete m_twitterAuth.data(); m_isOnline = false; } @@ -584,16 +583,14 @@ TwitterPlugin::registerOffer( const QString &screenName, const QHash< QString, Q qDebug() << "TwitterPlugin did not send offer because external address is " << Servent::instance()->externalAddress() << " and external port is " << Servent::instance()->externalPort(); } + if ( m_isOnline && _peerData.contains( "host" ) && _peerData.contains( "port" ) && _peerData.contains( "pkey" ) ) + QMetaObject::invokeMethod( this, "makeConnection", Q_ARG( QString, screenName ), QGenericArgument( "QHash< QString, QVariant >", (const void*)&_peerData ) ); + if ( peersChanged ) { m_cachedPeers[screenName] = QVariant::fromValue< QHash< QString, QVariant > >( _peerData ); TomahawkSettings::instance()->setTwitterCachedPeers( m_cachedPeers ); - m_attemptedConnects[screenName] = false; } - - if ( m_isOnline && _peerData.contains( "host" ) && _peerData.contains( "port" ) && _peerData.contains( "pkey" ) ) - QMetaObject::invokeMethod( this, "makeConnection", Q_ARG( QString, screenName ), QGenericArgument( "QHash< QString, QVariant >", (const void*)&_peerData ) ); - } void @@ -614,11 +611,6 @@ void TwitterPlugin::makeConnection( const QString &screenName, const QHash< QString, QVariant > &peerData ) { qDebug() << Q_FUNC_INFO; - if ( m_attemptedConnects.contains( screenName ) && m_attemptedConnects[screenName] ) - { - qDebug() << "Already attempted to connect to this peer with no change in their status, not trying again for now"; - return; - } if ( !peerData.contains( "host" ) || !peerData.contains( "port" ) || !peerData.contains( "pkey" ) || !peerData.contains( "node" ) ) { qDebug() << "TwitterPlugin could not find host and/or port and/or pkey for peer " << screenName; @@ -631,7 +623,6 @@ TwitterPlugin::makeConnection( const QString &screenName, const QHash< QString, peerData["pkey"].toString(), friendlyName, peerData["node"].toString() ); - m_attemptedConnects[screenName] = true; } void @@ -639,7 +630,6 @@ TwitterPlugin::directMessagePosted( const QTweetDMStatus& message ) { qDebug() << Q_FUNC_INFO; qDebug() << "TwitterPlugin sent message to " << message.recipientScreenName() << " containing: " << message.text(); - } void @@ -656,4 +646,11 @@ TwitterPlugin::directMessageDestroyed( const QTweetDMStatus& message ) qDebug() << "TwitterPlugin destroyed message " << message.text(); } +void +TwitterPlugin::checkSettings() +{ + disconnectPlugin(); + connectPlugin( false ); +} + Q_EXPORT_PLUGIN2( sip, TwitterPlugin ) diff --git a/src/sip/twitter/twitter.h b/src/sip/twitter/twitter.h index b0dc213b3..c0da00d7f 100644 --- a/src/sip/twitter/twitter.h +++ b/src/sip/twitter/twitter.h @@ -59,8 +59,8 @@ public: public slots: virtual bool connectPlugin( bool startup ); - void disconnectPlugin(); + void checkSettings(); void sendMsg( const QString& to, const QString& msg ) { @@ -108,7 +108,6 @@ private: qint64 m_cachedMentionsSinceId; qint64 m_cachedDirectMessagesSinceId; QHash< QString, QVariant > m_cachedPeers; - QHash< QString, bool > m_attemptedConnects; QSet m_keyCache; bool m_finishedFriends; bool m_finishedMentions; diff --git a/src/sip/zeroconf/zeroconf.h b/src/sip/zeroconf/zeroconf.h index 8c04fa507..d538f9a67 100644 --- a/src/sip/zeroconf/zeroconf.h +++ b/src/sip/zeroconf/zeroconf.h @@ -52,8 +52,8 @@ public: public slots: virtual bool connectPlugin( bool startup ); - void disconnectPlugin(); + void checkSettings() {} void sendMsg( const QString& to, const QString& msg ) {