1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-16 11:04:01 +02:00

* Fixed avatar creation in wrong thread and start-up slow down.

This commit is contained in:
Christian Muehlhaeuser
2013-03-30 09:07:24 +01:00
parent a4689a1850
commit 70fdf2b0ea
2 changed files with 30 additions and 25 deletions

View File

@@ -33,12 +33,14 @@ namespace Tomahawk
QHash< QString, peerinfo_ptr > PeerInfo::s_peersByCacheKey = QHash< QString, peerinfo_ptr >(); QHash< QString, peerinfo_ptr > PeerInfo::s_peersByCacheKey = QHash< QString, peerinfo_ptr >();
QHash< SipPlugin*, peerinfo_ptr > PeerInfo::s_selfPeersBySipPlugin = QHash< SipPlugin*, peerinfo_ptr >(); QHash< SipPlugin*, peerinfo_ptr > PeerInfo::s_selfPeersBySipPlugin = QHash< SipPlugin*, peerinfo_ptr >();
inline QString inline QString
peerCacheKey( SipPlugin* plugin, const QString& peerId ) peerCacheKey( SipPlugin* plugin, const QString& peerId )
{ {
return QString( "%1\t\t%2" ).arg( (quintptr) plugin ).arg( peerId ); return QString( "%1\t\t%2" ).arg( (quintptr) plugin ).arg( peerId );
} }
Tomahawk::peerinfo_ptr Tomahawk::peerinfo_ptr
PeerInfo::getSelf( SipPlugin* parent, PeerInfo::GetOptions options ) PeerInfo::getSelf( SipPlugin* parent, PeerInfo::GetOptions options )
{ {
@@ -48,7 +50,7 @@ PeerInfo::getSelf( SipPlugin* parent, PeerInfo::GetOptions options )
} }
// if AutoCreate isn't enabled nothing to do here // if AutoCreate isn't enabled nothing to do here
if( ! ( options & AutoCreate ) ) if ( ! ( options & AutoCreate ) )
{ {
return peerinfo_ptr(); return peerinfo_ptr();
} }
@@ -80,7 +82,7 @@ PeerInfo::get( SipPlugin* parent, const QString& id, GetOptions options )
} }
// if AutoCreate isn't enabled nothing to do here // if AutoCreate isn't enabled nothing to do here
if( ! ( options & AutoCreate ) ) if ( ! ( options & AutoCreate ) )
{ {
return peerinfo_ptr(); return peerinfo_ptr();
} }
@@ -99,6 +101,7 @@ PeerInfo::getAll()
return s_peersByCacheKey.values(); return s_peersByCacheKey.values();
} }
PeerInfo::PeerInfo( SipPlugin* parent, const QString& id ) PeerInfo::PeerInfo( SipPlugin* parent, const QString& id )
: QObject( parent ) : QObject( parent )
, m_type( External ) , m_type( External )
@@ -106,12 +109,10 @@ PeerInfo::PeerInfo( SipPlugin* parent, const QString& id )
, m_status( Offline ) , m_status( Offline )
, m_avatar( 0 ) , m_avatar( 0 )
, m_fancyAvatar( 0 ) , m_fancyAvatar( 0 )
, m_avatarUpdated( true )
{ {
} }
PeerInfo::~PeerInfo() PeerInfo::~PeerInfo()
{ {
tDebug() << Q_FUNC_INFO; tDebug() << Q_FUNC_INFO;
@@ -147,31 +148,34 @@ PeerInfo::setControlConnection( ControlConnection* controlConnection )
m_controlConnection = controlConnection; m_controlConnection = controlConnection;
} }
ControlConnection* ControlConnection*
PeerInfo::controlConnection() const PeerInfo::controlConnection() const
{ {
return m_controlConnection; return m_controlConnection;
} }
bool PeerInfo::hasControlConnection() bool PeerInfo::hasControlConnection()
{ {
return !m_controlConnection.isNull(); return !m_controlConnection.isNull();
} }
void void
PeerInfo::setType( Tomahawk::PeerInfo::Type type ) PeerInfo::setType( Tomahawk::PeerInfo::Type type )
{ {
m_type = type; m_type = type;
} }
PeerInfo::Type PeerInfo::Type
PeerInfo::type() const PeerInfo::type() const
{ {
return m_type; return m_type;
} }
const const
QString PeerInfo::id() const QString PeerInfo::id() const
{ {
@@ -179,7 +183,6 @@ QString PeerInfo::id() const
} }
SipPlugin* SipPlugin*
PeerInfo::sipPlugin() const PeerInfo::sipPlugin() const
{ {
@@ -215,17 +218,16 @@ PeerInfo::contactId() const
} }
void void
PeerInfo::setStatus( PeerInfo::Status status ) PeerInfo::setStatus( PeerInfo::Status status )
{ {
m_status = status; m_status = status;
if( status == Online ) if ( status == Online )
{ {
announce(); announce();
} }
else if( status == Offline && controlConnection() ) else if ( status == Offline && controlConnection() )
{ {
controlConnection()->removePeerInfo( weakRef().toStrongRef() ); controlConnection()->removePeerInfo( weakRef().toStrongRef() );
} }
@@ -248,7 +250,7 @@ PeerInfo::status() const
void void
PeerInfo::setSipInfo( const SipInfo& sipInfo ) PeerInfo::setSipInfo( const SipInfo& sipInfo )
{ {
if(sipInfo == m_sipInfo) if ( sipInfo == m_sipInfo )
return; return;
m_sipInfo = sipInfo; m_sipInfo = sipInfo;
@@ -291,37 +293,38 @@ PeerInfo::setAvatar( const QPixmap& avatar )
const QByteArray hash = QCryptographicHash::hash( ba.left( 4096 ), QCryptographicHash::Sha1 ); const QByteArray hash = QCryptographicHash::hash( ba.left( 4096 ), QCryptographicHash::Sha1 );
if ( m_avatarHash == hash ) if ( m_avatarHash == hash )
return; return;
else
m_avatarHash = hash;
m_avatarHash = hash;
m_avatarBuffer = ba;
delete m_avatar; delete m_avatar;
m_avatar = new QPixmap( avatar ); delete m_fancyAvatar;
m_avatar = 0;
m_fancyAvatar = 0; m_fancyAvatar = 0;
TomahawkUtils::Cache::instance()->putData( "Sources", 7776000000 /* 90 days */, id(), ba ); TomahawkUtils::Cache::instance()->putData( "Sources", 7776000000 /* 90 days */, id(), ba );
m_avatarUpdated = true;
} }
const QPixmap const QPixmap
PeerInfo::avatar( TomahawkUtils::ImageMode style, const QSize& size ) const PeerInfo::avatar( TomahawkUtils::ImageMode style, const QSize& size ) const
{ {
// tLog() << "*****************************************" << Q_FUNC_INFO << id(); if ( !m_avatar )
if ( !m_avatar && m_avatarUpdated )
{ {
m_avatar = new QPixmap(); if ( m_avatarBuffer.isEmpty() )
QByteArray ba = TomahawkUtils::Cache::instance()->getData( "Sources", id() ).toByteArray(); m_avatarBuffer = TomahawkUtils::Cache::instance()->getData( "Sources", id() ).toByteArray();
if ( ba.count() ) m_avatar = new QPixmap();
m_avatar->loadFromData( ba ); if ( !m_avatarBuffer.isEmpty() )
m_avatar->loadFromData( m_avatarBuffer );
if ( m_avatar->isNull() ) if ( m_avatar->isNull() )
{ {
delete m_avatar; delete m_avatar;
m_avatar = 0; m_avatar = 0;
} }
m_avatarUpdated = false;
m_avatarBuffer.clear();
} }
if ( style == TomahawkUtils::RoundedCorners && m_avatar && !m_avatar->isNull() && !m_fancyAvatar ) if ( style == TomahawkUtils::RoundedCorners && m_avatar && !m_avatar->isNull() && !m_fancyAvatar )
@@ -357,8 +360,9 @@ PeerInfo::avatar( TomahawkUtils::ImageMode style, const QSize& size ) const
return pixmap; return pixmap;
} }
void void
PeerInfo::setVersionString(const QString& versionString) PeerInfo::setVersionString( const QString& versionString )
{ {
m_versionString = versionString; m_versionString = versionString;
} }
@@ -372,7 +376,7 @@ PeerInfo::versionString() const
void void
PeerInfo::setData(const QVariant& data) PeerInfo::setData( const QVariant& data )
{ {
m_data = data; m_data = data;
} }

View File

@@ -137,8 +137,9 @@ private:
mutable QPixmap* m_avatar; mutable QPixmap* m_avatar;
mutable QPixmap* m_fancyAvatar; mutable QPixmap* m_fancyAvatar;
mutable QByteArray m_avatarBuffer;
mutable QByteArray m_avatarHash; mutable QByteArray m_avatarHash;
mutable bool m_avatarUpdated;
mutable QHash< TomahawkUtils::ImageMode, QHash< int, QPixmap > > m_coverCache; mutable QHash< TomahawkUtils::ImageMode, QHash< int, QPixmap > > m_coverCache;
}; };