1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-25 10:19:41 +01:00

Use the AvatarManager and show avatars in the MainWindow.

This commit is contained in:
Dominik Schmidt 2011-04-20 21:26:16 +02:00
parent ddb7e012df
commit d9a4b71414
3 changed files with 33 additions and 19 deletions

View File

@ -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;
}

View File

@ -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<Jreen::VCardUpdate>();
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 ) );
}

View File

@ -22,6 +22,8 @@
#include "../sipdllmacro.h"
#include "avatarmanager.h"
#include <jreen/client.h>
#include <jreen/disco.h>
#include <jreen/message.h>
@ -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<Jreen::JID, QString> m_contactsPhotoHashes;
QStringList m_photoHashes;
AvatarManager *m_avatarManager;
};
#endif // JABBER_H