diff --git a/ChangeLog b/ChangeLog index 6fb3e7b88..ade8e454c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ Version 0.1.0: + * Twitter peer profile pictures are shown * Initial SOCKS5 proxy support. * Fix issue where track resolving spinner never stopped if tracks were removed from playlist while resolving. diff --git a/src/libtomahawk/utils/tomahawkutils.cpp b/src/libtomahawk/utils/tomahawkutils.cpp index 6344c2fe3..48b92af31 100644 --- a/src/libtomahawk/utils/tomahawkutils.cpp +++ b/src/libtomahawk/utils/tomahawkutils.cpp @@ -372,6 +372,7 @@ void setProxy( QNetworkProxy* proxy ) { s_proxy = proxy; + s_nam.data()->setProxy( *proxy ); qDebug() << Q_FUNC_INFO << " setting proxy to use proxy DNS? " << (TomahawkSettings::instance()->proxyDns() ? "true" : "false"); if ( !TomahawkSettings::instance()->proxyDns() ) s_proxy->setCapabilities( QNetworkProxy::TunnelingCapability | QNetworkProxy::ListeningCapability | QNetworkProxy::UdpTunnelingCapability ); diff --git a/src/sip/twitter/twitter.cpp b/src/sip/twitter/twitter.cpp index 35f85a827..8d4dc5b43 100644 --- a/src/sip/twitter/twitter.cpp +++ b/src/sip/twitter/twitter.cpp @@ -22,17 +22,22 @@ #include #include +#include +#include +#include #include #include #include #include +#include #include #include #include #include + static QString s_gotTomahawkRegex = QString( "^(@[a-zA-Z0-9]+ )?(Got Tomahawk\\?) (\\{[a-fA-F0-9\\-]+\\}) (.*)$" ); SipPlugin* @@ -325,6 +330,7 @@ TwitterPlugin::connectTimerFired() { qDebug() << "Aging peer " << screenName << " out of cache"; m_cachedPeers.remove( screenName ); + m_cachedAvatars.remove( screenName ); continue; } @@ -576,6 +582,9 @@ TwitterPlugin::registerOffer( const QString &screenName, const QHash< QString, Q QString friendlyName = QString( '@' + screenName ); + if ( !m_cachedAvatars.contains( screenName ) ) + QMetaObject::invokeMethod( this, "fetchAvatar", Q_ARG( QString, screenName ) ); + QHash< QString, QVariant > _peerData( peerData ); if ( _peerData.contains( "dirty" ) ) @@ -700,6 +709,56 @@ TwitterPlugin::directMessageDestroyed( const QTweetDMStatus& message ) qDebug() << "TwitterPlugin destroyed message " << message.text(); } +void +TwitterPlugin::fetchAvatar( const QString& screenName ) +{ + qDebug() << Q_FUNC_INFO; + QTweetUserShow *userShowFetch = new QTweetUserShow( m_twitterAuth.data(), this ); + connect( userShowFetch, SIGNAL( parsedUserInfo( QTweetUser ) ), SLOT( avatarUserDataSlot( QTweetUser ) ) ); + userShowFetch->fetch( screenName ); +} + +void +TwitterPlugin::avatarUserDataSlot( const QTweetUser &user ) +{ + qDebug() << Q_FUNC_INFO; + if ( user.profileImageUrl().isEmpty() || m_twitterAuth.isNull() ) + return; + + QNetworkRequest request( user.profileImageUrl() ); + QNetworkReply *reply = m_twitterAuth.data()->networkAccessManager()->get( request ); + reply->setProperty( "screenname", user.screenName() ); + connect( reply, SIGNAL( finished() ), this, SLOT( profilePicReply() ) ); +} + +void +TwitterPlugin::setProxy( const QNetworkProxy& proxy ) +{ + Q_UNUSED( proxy ); + if ( !m_twitterAuth.isNull() ) + m_twitterAuth.data()->setNetworkAccessManager( TomahawkUtils::nam() ); +} + +void +TwitterPlugin::profilePicReply() +{ + qDebug() << Q_FUNC_INFO; + QNetworkReply *reply = qobject_cast< QNetworkReply* >( sender() ); + if ( !reply || reply->error() != QNetworkReply::NoError || !reply->property( "screenname" ).isValid() ) + { + qDebug() << Q_FUNC_INFO << " reply not valid or came back with error"; + return; + } + QString screenName = reply->property( "screenname" ).toString(); + QString friendlyName = '@' + screenName; + QByteArray rawData = reply->readAll(); + QImage image; + image.loadFromData( rawData, "PNG" ); + QPixmap pixmap = QPixmap::fromImage( image ); + m_cachedAvatars[screenName] = pixmap; + emit avatarReceived( friendlyName, QPixmap::fromImage( image ) ); +} + void TwitterPlugin::checkSettings() { @@ -707,7 +766,6 @@ TwitterPlugin::checkSettings() connectPlugin( false ); } - QString TwitterPlugin::twitterScreenName() const { diff --git a/src/sip/twitter/twitter.h b/src/sip/twitter/twitter.h index 38ff7457b..8785a93f3 100644 --- a/src/sip/twitter/twitter.h +++ b/src/sip/twitter/twitter.h @@ -72,10 +72,14 @@ public: virtual QIcon icon() const; virtual QWidget* configWidget(); +signals: + void avatarReceived( QString, QPixmap ); + public slots: virtual bool connectPlugin( bool startup ); void disconnectPlugin(); void checkSettings(); + void setProxy( const QNetworkProxy &proxy ); void sendMsg( const QString& to, const QString& msg ) { @@ -109,6 +113,9 @@ private slots: void registerOffer( const QString &screenName, const QHash< QString, QVariant > &peerdata ); void sendOffer( const QString &screenName, const QHash< QString, QVariant > &peerdata ); void makeConnection( const QString &screenName, const QHash< QString, QVariant > &peerdata ); + void fetchAvatar( const QString &screenName ); + void avatarUserDataSlot( const QTweetUser &user ); + void profilePicReply(); private: bool refreshTwitterAuth(); @@ -145,6 +152,7 @@ private: qint64 m_cachedMentionsSinceId; qint64 m_cachedDirectMessagesSinceId; QHash< QString, QVariant > m_cachedPeers; + QHash< QString, QPixmap > m_cachedAvatars; QSet m_keyCache; bool m_finishedFriends; bool m_finishedMentions;