From d9a4b71414c86264d3ca8639f5ebf104b09b9c32 Mon Sep 17 00:00:00 2001 From: Dominik Schmidt Date: Wed, 20 Apr 2011 21:26:16 +0200 Subject: [PATCH] Use the AvatarManager and show avatars in the MainWindow. --- src/sip/jreen/jabber.cpp | 1 + src/sip/jreen/jabber_p.cpp | 42 ++++++++++++++++++++++++-------------- src/sip/jreen/jabber_p.h | 9 ++++---- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/sip/jreen/jabber.cpp b/src/sip/jreen/jabber.cpp index a4b0f1aab..e6982857b 100644 --- a/src/sip/jreen/jabber.cpp +++ b/src/sip/jreen/jabber.cpp @@ -110,6 +110,7 @@ JabberPlugin::connectPlugin( bool startup ) QObject::connect( p, SIGNAL( disconnected() ), SLOT( onDisconnected() ) ); QObject::connect( p, SIGNAL( authError( int, QString ) ), SLOT( onAuthError( int, QString ) ) ); + QObject::connect( p, SIGNAL( avatarReceived( QString, QPixmap ) ), SIGNAL( avatarReceived( QString, QPixmap ) ) ); return true; } diff --git a/src/sip/jreen/jabber_p.cpp b/src/sip/jreen/jabber_p.cpp index 93efa5a06..ea5add54a 100644 --- a/src/sip/jreen/jabber_p.cpp +++ b/src/sip/jreen/jabber_p.cpp @@ -70,8 +70,8 @@ Jabber_p::Jabber_p( const QString& jid, const QString& password, const QString& // add VCardUpdate extension to own presence m_client->presence().addExtension( new Jreen::VCardUpdate() ); - // read cached avatars - m_photoHashes = QDir("/home/domme/jreen/").entryList(); + // initialize the AvatarManager + m_avatarManager = new AvatarManager(m_client); // setup disco m_client->disco()->setSoftwareVersion( "Tomahawk Player", TOMAHAWK_VERSION, CMAKE_SYSTEM ); @@ -96,6 +96,8 @@ Jabber_p::Jabber_p( const QString& jid, const QString& password, const QString& connect(m_client, SIGNAL(newPresence(Jreen::Presence)), SLOT(onNewPresence(Jreen::Presence))); connect(m_client, SIGNAL(newIQ(Jreen::IQ)), SLOT(onNewIq(Jreen::IQ))); + connect(m_avatarManager, SIGNAL(newAvatar(QString)), SLOT(onNewAvatar(QString))); + // connect qDebug() << "Connecting to the XMPP server..."; @@ -226,9 +228,6 @@ Jabber_p::onConnect() // set presence to least valid value m_client->setPresence(Jreen::Presence::XA, "Got Tomahawk? http://gettomahawk.com", -127); - // request own vcard - fetchVCard( m_jid.bare() ); - // set ping timeout to 15 secs (TODO: verify if this works) m_client->setPingInterval(15000); @@ -351,16 +350,6 @@ void Jabber_p::onNewPresence( const Jreen::Presence& presence) qDebug() << Q_FUNC_INFO << "* New presence: " << fulljid << presence.subtype(); - Jreen::VCardUpdate::Ptr update = presence.findExtension(); - if(update) - { - qDebug() << "vcard: found update for " << fulljid; - if(!m_photoHashes.contains(update->photoHash())) - { - fetchVCard( jid.bare() ); - } - } - if( jid == m_jid ) return; @@ -536,10 +525,33 @@ Jabber_p::handlePeerStatus( const Jreen::JID& jid, Jreen::Presence::Type presenc { m_peers[ fulljid ] = presenceType; qDebug() << Q_FUNC_INFO << "* Peer goes online:" << fulljid; + emit peerOnline( fulljid ); + + if(!m_avatarManager->avatar(jid.bare()).isNull()) + onNewAvatar( jid.bare() ); + return; } //qDebug() << "Updating presence data for" << fulljid; m_peers[ fulljid ] = presenceType; } + +void Jabber_p::onNewAvatar(const QString& jid) +{ + qDebug() << Q_FUNC_INFO << jid; + Q_ASSERT(!m_avatarManager->avatar( jid ).isNull()); + + // find peers for the jid + QStringList peers = m_peers.keys(); + foreach(const QString &peer, peers) + { + if( peer.startsWith(jid) ) + { + emit avatarReceived ( peer, m_avatarManager->avatar( jid ) ); + } + } + + emit avatarReceived ( jid, m_avatarManager->avatar( jid ) ); +} diff --git a/src/sip/jreen/jabber_p.h b/src/sip/jreen/jabber_p.h index 0fd354467..2d138b788 100644 --- a/src/sip/jreen/jabber_p.h +++ b/src/sip/jreen/jabber_p.h @@ -22,6 +22,8 @@ #include "../sipdllmacro.h" +#include "avatarmanager.h" + #include #include #include @@ -63,6 +65,7 @@ signals: void connected(); void disconnected(); void jidChanged( const QString& ); + void avatarReceived( const QString&, const QPixmap& avatar ); void authError( int, const QString& ); public slots: @@ -82,6 +85,7 @@ private slots: qDebug() << e; } virtual void onNewIq( const Jreen::IQ &iq, int context = NoContext ); + virtual void onNewAvatar( const QString &jid ); private: bool presenceMeansOnline( Jreen::Presence::Type p ); @@ -99,10 +103,7 @@ private: QStringList m_legacy_peers; - - //sort out - //QHash m_contactsPhotoHashes; - QStringList m_photoHashes; + AvatarManager *m_avatarManager; }; #endif // JABBER_H