From 3e20fd1f6a3e6bec4fdffb050d2112176e7306ed Mon Sep 17 00:00:00 2001
From: Dominik Schmidt <dev@dominik-schmidt.de>
Date: Thu, 21 Apr 2011 13:42:16 +0200
Subject: [PATCH] Let SipHandler set the avatar for MyCollection

---
 src/libtomahawk/sip/SipHandler.cpp | 7 +++++++
 src/libtomahawk/sip/SipHandler.h   | 7 ++++++-
 src/libtomahawk/sip/SipPlugin.h    | 5 +++++
 src/sip/jreen/jabber.cpp           | 1 +
 src/sip/jreen/jabber_p.cpp         | 7 ++++++-
 src/sip/jreen/jabber_p.h           | 1 +
 6 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/libtomahawk/sip/SipHandler.cpp b/src/libtomahawk/sip/SipHandler.cpp
index 0170bdf64..a3b7b0375 100644
--- a/src/libtomahawk/sip/SipHandler.cpp
+++ b/src/libtomahawk/sip/SipHandler.cpp
@@ -179,6 +179,7 @@ SipHandler::loadPlugin( const QString& path )
         QObject::connect( sip, SIGNAL( error( int, QString ) ), SLOT( onError( int, QString ) ) );
 
         QObject::connect( sip, SIGNAL( avatarReceived( QString, QPixmap ) ), SLOT( onAvatarReceived( QString, QPixmap ) ) );
+        QObject::connect( sip, SIGNAL( avatarReceived( QPixmap ) ), SLOT( onAvatarReceived( QPixmap ) ) );
         m_plugins << sip;
     }
 }
@@ -411,3 +412,9 @@ void SipHandler::onAvatarReceived( const QString& from, const QPixmap& avatar )
         qDebug() << Q_FUNC_INFO << from << "no control connection setup yet";
     }
 }
+
+void SipHandler::onAvatarReceived( const QPixmap& avatar )
+{
+    qDebug() << Q_FUNC_INFO << "Set own avatar on MyCollection";
+    SourceList::instance()->getLocal()->setAvatar( avatar );
+}
diff --git a/src/libtomahawk/sip/SipHandler.h b/src/libtomahawk/sip/SipHandler.h
index cbef72f5d..1c1c6f5bc 100644
--- a/src/libtomahawk/sip/SipHandler.h
+++ b/src/libtomahawk/sip/SipHandler.h
@@ -63,7 +63,12 @@ private slots:
 
     void onSettingsChanged();
 
-    void onAvatarReceived( const QString& from, const QPixmap& avatar = QPixmap());
+    // set data for local source
+    void onAvatarReceived( const QPixmap& avatar );
+
+    // set data for other sources
+    void onAvatarReceived( const QString& from, const QPixmap& avatar );
+
 
 private:
     static SipHandler *s_instance;
diff --git a/src/libtomahawk/sip/SipPlugin.h b/src/libtomahawk/sip/SipPlugin.h
index 28e19ffb2..4bd55fc31 100644
--- a/src/libtomahawk/sip/SipPlugin.h
+++ b/src/libtomahawk/sip/SipPlugin.h
@@ -58,8 +58,13 @@ signals:
     void peerOffline( const QString& );
     void msgReceived( const QString& from, const QString& msg );
 
+    // new data for own source
+    void avatarReceived ( const QPixmap& avatar );
+
+    // new data for other sources;
     void avatarReceived ( const QString& from,  const QPixmap& avatar);
 
+
     void addMenu( QMenu* menu );
     void removeMenu( QMenu* menu );
 };
diff --git a/src/sip/jreen/jabber.cpp b/src/sip/jreen/jabber.cpp
index e6982857b..7e0b1235e 100644
--- a/src/sip/jreen/jabber.cpp
+++ b/src/sip/jreen/jabber.cpp
@@ -111,6 +111,7 @@ JabberPlugin::connectPlugin( bool startup )
 
     QObject::connect( p, SIGNAL( authError( int, QString ) ), SLOT( onAuthError( int, QString ) ) );
     QObject::connect( p, SIGNAL( avatarReceived( QString, QPixmap ) ), SIGNAL( avatarReceived( QString, QPixmap ) ) );
+    QObject::connect( p, SIGNAL( avatarReceived( QPixmap ) ), SIGNAL( avatarReceived( QPixmap) ) );
 
     return true;
 }
diff --git a/src/sip/jreen/jabber_p.cpp b/src/sip/jreen/jabber_p.cpp
index ea5add54a..100ae908c 100644
--- a/src/sip/jreen/jabber_p.cpp
+++ b/src/sip/jreen/jabber_p.cpp
@@ -553,5 +553,10 @@ void Jabber_p::onNewAvatar(const QString& jid)
         }
     }
 
-    emit avatarReceived ( jid,  m_avatarManager->avatar( jid ) );
+    if( jid == m_client->jid().bare() )
+        // own avatar
+        emit avatarReceived ( m_avatarManager->avatar( jid ) );
+    else
+        // someone else's avatar
+        emit avatarReceived ( jid,  m_avatarManager->avatar( jid ) );
 }
diff --git a/src/sip/jreen/jabber_p.h b/src/sip/jreen/jabber_p.h
index 2d138b788..243e255a9 100644
--- a/src/sip/jreen/jabber_p.h
+++ b/src/sip/jreen/jabber_p.h
@@ -65,6 +65,7 @@ signals:
     void connected();
     void disconnected();
     void jidChanged( const QString& );
+    void avatarReceived( const QPixmap& avatar );
     void avatarReceived( const QString&, const QPixmap& avatar );
     void authError( int, const QString& );