diff --git a/src/libtomahawk/sip/SipPlugin.cpp b/src/libtomahawk/sip/SipPlugin.cpp index d33fff114..66f27781d 100644 --- a/src/libtomahawk/sip/SipPlugin.cpp +++ b/src/libtomahawk/sip/SipPlugin.cpp @@ -1,2 +1,7 @@ #include +QMenu* +SipPlugin::menu() +{ + return 0; +} \ No newline at end of file diff --git a/src/libtomahawk/sip/SipPlugin.h b/src/libtomahawk/sip/SipPlugin.h index 73c127311..9c0a871fa 100644 --- a/src/libtomahawk/sip/SipPlugin.h +++ b/src/libtomahawk/sip/SipPlugin.h @@ -3,6 +3,7 @@ #include #include +#include #include "dllmacro.h" @@ -17,6 +18,8 @@ public: virtual bool isValid() = 0; virtual const QString name() = 0; + virtual const QString accountName() = 0; + virtual QMenu *menu(); public slots: virtual bool connectPlugin( bool startup = false ) = 0; diff --git a/src/sip/SipHandler.cpp b/src/sip/SipHandler.cpp index ff5ea786a..12a2f3c10 100644 --- a/src/sip/SipHandler.cpp +++ b/src/sip/SipHandler.cpp @@ -27,6 +27,12 @@ SipHandler::~SipHandler() disconnectPlugins(); } +QList< SipPlugin* > +SipHandler::plugins() const +{ + return m_plugins; +} + void SipHandler::onSettingsChanged() diff --git a/src/sip/SipHandler.h b/src/sip/SipHandler.h index becdfe0c4..47464e748 100644 --- a/src/sip/SipHandler.h +++ b/src/sip/SipHandler.h @@ -1,11 +1,11 @@ #ifndef SIPHANDLER_H #define SIPHANDLER_H +#include "sip/SipPlugin.h" + #include #include -class SipPlugin; - class SipHandler : public QObject { Q_OBJECT @@ -16,6 +16,8 @@ public: SipHandler( QObject* parent ); ~SipHandler(); + QList< SipPlugin* > plugins() const; + public slots: void addContact( const QString& id ) { qDebug() << Q_FUNC_INFO << id; } diff --git a/src/sip/jabber/jabber.cpp b/src/sip/jabber/jabber.cpp index 9d849c480..73dc70a7a 100644 --- a/src/sip/jabber/jabber.cpp +++ b/src/sip/jabber/jabber.cpp @@ -2,9 +2,22 @@ #include "tomahawksettings.h" +#include "tomahawk/tomahawkapp.h" + #include #include +#include +#include +JabberPlugin::JabberPlugin() + : p( 0 ) +{ + m_menu = new QMenu(QString("Jabber (").append(accountName()).append(")")); + m_addFriendAction = m_menu->addAction("Add Friend..."); + + connect(m_addFriendAction, SIGNAL(triggered()), + this, SLOT(showAddFriendDialog())); +} void JabberPlugin::setProxy( QNetworkProxy* proxy ) @@ -19,6 +32,17 @@ JabberPlugin::name() return QString( MYNAME ); } +const QString +JabberPlugin::accountName() +{ + return TomahawkSettings::instance()->jabberUsername(); +} + +QMenu* +JabberPlugin::menu() +{ + return m_menu; +} bool JabberPlugin::connectPlugin( bool startup ) @@ -74,4 +98,18 @@ JabberPlugin::onAuthError( int code, const QString& message ) emit error( SipPlugin::ConnectionError, message ); } +void +JabberPlugin::showAddFriendDialog() +{ + bool ok; + QString id = QInputDialog::getText( TomahawkApp::instance()->mainWindow(), tr( "Add Friend" ), + tr( "Enter Jabber ID:" ), QLineEdit::Normal, + "", &ok ); + if ( !ok ) + return; + + qDebug() << "Attempting to add jabber contact to roster:" << id; + addContact( id ); +} + Q_EXPORT_PLUGIN2( sip, JabberPlugin ) diff --git a/src/sip/jabber/jabber.h b/src/sip/jabber/jabber.h index 806c0ebc3..cea8dff4c 100644 --- a/src/sip/jabber/jabber.h +++ b/src/sip/jabber/jabber.h @@ -14,9 +14,7 @@ class SIPDLLEXPORT JabberPlugin : public SipPlugin Q_INTERFACES( SipPlugin ) public: - JabberPlugin() - : p( 0 ) - {} + JabberPlugin(); virtual ~JabberPlugin() { delete p; } @@ -24,6 +22,9 @@ public: virtual bool isValid() { return true; } virtual const QString name(); + virtual const QString accountName(); + virtual QMenu* menu(); + void setProxy( QNetworkProxy* proxy ); public slots: @@ -58,9 +59,12 @@ public slots: private slots: void onAuthError( int, const QString& ); + void showAddFriendDialog(); private: Jabber_p* p; + QMenu* m_menu; + QAction* m_addFriendAction; }; #endif diff --git a/src/sip/twitter/twitter.cpp b/src/sip/twitter/twitter.cpp index 901d84377..b8f7a707c 100644 --- a/src/sip/twitter/twitter.cpp +++ b/src/sip/twitter/twitter.cpp @@ -53,6 +53,12 @@ TwitterPlugin::name() return QString( MYNAME ); } +const QString +TwitterPlugin::accountName() +{ + return QString( TomahawkSettings::instance()->twitterScreenName() ); +} + bool TwitterPlugin::connectPlugin( bool /*startup*/ ) { diff --git a/src/sip/twitter/twitter.h b/src/sip/twitter/twitter.h index 2e1c07b84..e72b4e361 100644 --- a/src/sip/twitter/twitter.h +++ b/src/sip/twitter/twitter.h @@ -32,6 +32,7 @@ public: virtual bool isValid(); virtual const QString name(); + virtual const QString accountName(); public slots: virtual bool connectPlugin( bool startup ); diff --git a/src/sip/zeroconf/zeroconf.cpp b/src/sip/zeroconf/zeroconf.cpp index 08a8aefac..413cba7fe 100644 --- a/src/sip/zeroconf/zeroconf.cpp +++ b/src/sip/zeroconf/zeroconf.cpp @@ -8,6 +8,12 @@ ZeroconfPlugin::name() return QString( MYNAME ); } +const QString +ZeroconfPlugin::accountName() +{ + return QString(); +} + bool ZeroconfPlugin::connectPlugin( bool /*startup*/ ) { diff --git a/src/sip/zeroconf/zeroconf.h b/src/sip/zeroconf/zeroconf.h index 727bb84c0..d2322d236 100644 --- a/src/sip/zeroconf/zeroconf.h +++ b/src/sip/zeroconf/zeroconf.h @@ -24,6 +24,7 @@ public: virtual bool isValid() { return true; } virtual const QString name(); + virtual const QString accountName(); public slots: virtual bool connectPlugin( bool startup ); diff --git a/src/tomahawkwindow.cpp b/src/tomahawkwindow.cpp index d942a71d6..caaf32ae5 100644 --- a/src/tomahawkwindow.cpp +++ b/src/tomahawkwindow.cpp @@ -121,6 +121,15 @@ TomahawkWindow::TomahawkWindow( QWidget* parent ) statusBar()->addPermanentWidget( m_audioControls, 1 ); + // propagate sip menu + foreach(SipPlugin *plugin, APP->sipHandler()->plugins()) + { + if(plugin->menu()) + { + ui->menuNetwork->addMenu(plugin->menu()); + } + } + loadSettings(); setupSignals(); @@ -177,7 +186,6 @@ TomahawkWindow::setupSignals() connect( ui->actionPreferences, SIGNAL( triggered() ), SLOT( showSettingsDialog() ) ); connect( ui->actionToggleConnect, SIGNAL( triggered() ), APP->sipHandler(), SLOT( toggleConnect() ) ); connect( ui->actionAddPeerManually, SIGNAL( triggered() ), SLOT( addPeerManually() ) ); - connect( ui->actionAddFriendManually, SIGNAL( triggered() ), SLOT( addFriendManually() ) ); connect( ui->actionRescanCollection, SIGNAL( triggered() ), SLOT( updateCollectionManually() ) ); connect( ui->actionLoadXSPF, SIGNAL( triggered() ), SLOT( loadSpiff() )); connect( ui->actionCreatePlaylist, SIGNAL( triggered() ), SLOT( createPlaylist() )); @@ -277,21 +285,6 @@ TomahawkWindow::addPeerManually() } -void -TomahawkWindow::addFriendManually() -{ - bool ok; - QString id = QInputDialog::getText( this, tr( "Add Friend" ), - tr( "Enter Jabber ID:" ), QLineEdit::Normal, - "", &ok ); - if ( !ok ) - return; - - qDebug() << "Attempting to add jabber contact to roster:" << id; - APP->sipHandler()->addContact( id ); -} - - void TomahawkWindow::loadSpiff() { diff --git a/src/tomahawkwindow.h b/src/tomahawkwindow.h index 77948db38..5e6a24472 100644 --- a/src/tomahawkwindow.h +++ b/src/tomahawkwindow.h @@ -52,7 +52,6 @@ private slots: void onSipError(); void addPeerManually(); - void addFriendManually(); void onPlaybackLoading( const Tomahawk::result_ptr& result ); diff --git a/src/tomahawkwindow.ui b/src/tomahawkwindow.ui index 54db15f78..cd4692ae0 100644 --- a/src/tomahawkwindow.ui +++ b/src/tomahawkwindow.ui @@ -69,7 +69,6 @@ -