1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-14 01:54:07 +02:00

* Added coverID() related methods to Artist, Album, Track.

This commit is contained in:
Christian Muehlhaeuser
2013-05-18 22:54:42 +02:00
committed by Michael Zanetti
parent d03cb674c9
commit c47d52b144
6 changed files with 83 additions and 1 deletions

View File

@@ -37,6 +37,7 @@ using namespace Tomahawk;
QHash< QString, album_wptr > Album::s_albumsByName = QHash< QString, album_wptr >();
QHash< unsigned int, album_wptr > Album::s_albumsById = QHash< unsigned int, album_wptr >();
QHash< QString, album_ptr > Album::s_albumsByCoverId = QHash< QString, album_ptr >();
static QMutex s_nameCacheMutex;
static QReadWriteLock s_idMutex;
@@ -79,6 +80,7 @@ Album::get( const Tomahawk::artist_ptr& artist, const QString& name, bool autoCr
album->setWeakRef( album.toWeakRef() );
album->loadId( autoCreate );
s_albumsByName.insert( key, album );
s_albumsByCoverId.insert( album->coverId(), album );
return album;
}
@@ -110,6 +112,7 @@ Album::get( unsigned int id, const QString& name, const Tomahawk::artist_ptr& ar
album_ptr a = album_ptr( new Album( id, name, artist ), &Album::deleteLater );
a->setWeakRef( a.toWeakRef() );
s_albumsByName.insert( key, a );
s_albumsByCoverId.insert( a->coverId(), a );
if ( id > 0 )
{
@@ -122,6 +125,18 @@ Album::get( unsigned int id, const QString& name, const Tomahawk::artist_ptr& ar
}
album_ptr
Album::getByCoverId( const QString& uuid )
{
QMutexLocker lock( &s_nameCacheMutex );
if ( s_albumsByCoverId.contains( uuid ) )
return s_albumsByCoverId.value( uuid );
return album_ptr();
}
Album::Album( unsigned int id, const QString& name, const Tomahawk::artist_ptr& artist )
: QObject()
, m_waitingForId( false )
@@ -327,6 +342,10 @@ Album::infoSystemInfo( const Tomahawk::InfoSystem::InfoRequestData& requestData,
m_coverBuffer = ba;
}
s_albumsByCoverId.remove( coverId() );
m_coverId = uuid();
s_albumsByCoverId.insert( m_coverId, m_ownRef.toStrongRef() );
m_coverLoaded = true;
emit coverChanged();
}
@@ -383,3 +402,13 @@ Album::infoid() const
return m_uuid;
}
QString
Album::coverId() const
{
if ( m_coverId.isEmpty() )
m_coverId = uuid();
return m_coverId;
}

View File

@@ -45,12 +45,14 @@ Q_OBJECT
public:
static album_ptr get( const Tomahawk::artist_ptr& artist, const QString& name, bool autoCreate = false );
static album_ptr get( unsigned int id, const QString& name, const Tomahawk::artist_ptr& artist );
static album_ptr getByCoverId( const QString& uuid );
Album( unsigned int id, const QString& name, const Tomahawk::artist_ptr& artist );
Album( const QString& name, const Tomahawk::artist_ptr& artist );
virtual ~Album();
unsigned int id() const;
QString coverId() const;
QString name() const { return m_name; }
QString sortname() const { return m_sortname; }
@@ -98,6 +100,7 @@ private:
mutable bool m_coverLoaded;
mutable bool m_coverLoading;
mutable QString m_uuid;
mutable QString m_coverId;
mutable QByteArray m_coverBuffer;
#ifndef ENABLE_HEADLESS
@@ -110,6 +113,7 @@ private:
static QHash< QString, album_wptr > s_albumsByName;
static QHash< unsigned int, album_wptr > s_albumsById;
static QHash< QString, album_ptr > s_albumsByCoverId;
friend class ::IdThreadWorker;
};

View File

@@ -39,6 +39,7 @@ using namespace Tomahawk;
QHash< QString, artist_wptr > Artist::s_artistsByName = QHash< QString, artist_wptr >();
QHash< unsigned int, artist_wptr > Artist::s_artistsById = QHash< unsigned int, artist_wptr >();
QHash< QString, artist_ptr > Artist::s_artistsByCoverId = QHash< QString, artist_ptr >();
static QMutex s_nameCacheMutex;
static QReadWriteLock s_idMutex;
@@ -77,6 +78,7 @@ Artist::get( const QString& name, bool autoCreate )
artist->setWeakRef( artist.toWeakRef() );
artist->loadId( autoCreate );
s_artistsByName.insert( key, artist );
s_artistsByCoverId.insert( artist->coverId(), artist );
return artist;
}
@@ -110,6 +112,7 @@ Artist::get( unsigned int id, const QString& name )
artist_ptr a = artist_ptr( new Artist( id, name ), &Artist::deleteLater );
a->setWeakRef( a.toWeakRef() );
s_artistsByName.insert( key, a );
s_artistsByCoverId.insert( a->coverId(), a );
if ( id > 0 )
{
@@ -122,6 +125,18 @@ Artist::get( unsigned int id, const QString& name )
}
artist_ptr
Artist::getByCoverId( const QString& uuid )
{
QMutexLocker lock( &s_nameCacheMutex );
if ( s_artistsByCoverId.contains( uuid ) )
return s_artistsByCoverId.value( uuid );
return artist_ptr();
}
Artist::Artist( unsigned int id, const QString& name )
: QObject()
, m_waitingForFuture( false )
@@ -481,6 +496,10 @@ Artist::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVari
m_coverBuffer = ba;
}
s_artistsByCoverId.remove( coverId() );
m_coverId = uuid();
s_artistsByCoverId.insert( m_coverId, m_ownRef.toStrongRef() );
m_coverLoaded = true;
emit coverChanged();
}
@@ -642,3 +661,13 @@ Artist::infoid() const
return m_uuid;
}
QString
Artist::coverId() const
{
if ( m_coverId.isEmpty() )
m_coverId = uuid();
return m_coverId;
}

View File

@@ -43,12 +43,14 @@ Q_OBJECT
public:
static artist_ptr get( const QString& name, bool autoCreate = false );
static artist_ptr get( unsigned int id, const QString& name );
static artist_ptr getByCoverId( const QString& uuid );
Artist( unsigned int id, const QString& name );
explicit Artist( const QString& name );
virtual ~Artist();
unsigned int id() const;
QString coverId() const;
QString name() const { return m_name; }
QString sortname() const { return m_sortname; }
@@ -117,6 +119,7 @@ private:
bool m_biographyLoaded;
mutable QString m_uuid;
mutable QString m_coverId;
mutable int m_infoJobs;
QList<Tomahawk::album_ptr> m_databaseAlbums;
@@ -138,6 +141,7 @@ private:
static QHash< QString, artist_wptr > s_artistsByName;
static QHash< unsigned int, artist_wptr > s_artistsById;
static QHash< QString, artist_ptr > s_artistsByCoverId;
friend class ::IdThreadWorker;
};

View File

@@ -494,10 +494,25 @@ Track::coverLoaded() const
return m_artistPtr->coverLoaded();
}
#endif
QString
Track::coverId() const
{
if ( m_albumPtr && m_albumPtr->coverLoaded() && !m_albumPtr->cover( QSize( 0, 0 ) ).isNull() )
{
return m_albumPtr->coverId();
}
else if ( m_artistPtr )
{
return m_artistPtr->coverId();
}
return QString();
}
QList<Tomahawk::query_ptr>
Track::similarTracks() const
{

View File

@@ -84,6 +84,7 @@ public:
QPixmap cover( const QSize& size, bool forceLoad = true ) const;
#endif
bool coverLoaded() const;
QString coverId() const;
void setLoved( bool loved, bool postToInfoSystem = true );
bool loved();