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

Added albumArtist property to Track.

This commit is contained in:
Christian Muehlhaeuser
2014-11-24 18:35:29 +01:00
parent fbec557e6e
commit cb6c901eb4
3 changed files with 55 additions and 22 deletions

View File

@@ -47,7 +47,7 @@ static QMutex s_nameCacheMutex;
inline QString inline QString
cacheKey( const QString& artist, const QString& track, const QString& album, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber ) cacheKey( const QString& artist, const QString& track, const QString& album, const QString& albumArtist, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber )
{ {
const QString durationStr = QString::number( duration ); const QString durationStr = QString::number( duration );
const QString albumposStr = QString::number( albumpos ); const QString albumposStr = QString::number( albumpos );
@@ -58,11 +58,12 @@ cacheKey( const QString& artist, const QString& track, const QString& album, int
// The "+" implementation in Qt4 differs slighty depending on compile // The "+" implementation in Qt4 differs slighty depending on compile
// options which could drastically reduce the performance. // options which could drastically reduce the performance.
str.reserve( artist.size() + track.size() + album.size() str.reserve( artist.size() + track.size() + album.size()
+ composer.size() + durationStr.size() + albumArtist.size() + composer.size() + durationStr.size()
+ albumposStr.size() + discnumberStr.size() ); + albumposStr.size() + discnumberStr.size() );
str += artist; str += artist;
str += track; str += track;
str += album; str += album;
str += albumArtist;
str += composer; str += composer;
str += durationStr; str += durationStr;
str += albumposStr; str += albumposStr;
@@ -72,7 +73,7 @@ cacheKey( const QString& artist, const QString& track, const QString& album, int
track_ptr track_ptr
Track::get( const QString& artist, const QString& track, const QString& album, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber ) Track::get( const QString& artist, const QString& track, const QString& album, const QString& albumArtist, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber )
{ {
if ( artist.trimmed().isEmpty() || track.trimmed().isEmpty() ) if ( artist.trimmed().isEmpty() || track.trimmed().isEmpty() )
{ {
@@ -82,7 +83,7 @@ Track::get( const QString& artist, const QString& track, const QString& album, i
} }
QMutexLocker lock( &s_nameCacheMutex ); QMutexLocker lock( &s_nameCacheMutex );
const QString key = cacheKey( artist, track, album, duration, composer, albumpos, discnumber ); const QString key = cacheKey( artist, track, album, albumArtist, duration, composer, albumpos, discnumber );
if ( s_tracksByName.contains( key ) ) if ( s_tracksByName.contains( key ) )
{ {
track_wptr track = s_tracksByName.value( key ); track_wptr track = s_tracksByName.value( key );
@@ -90,7 +91,7 @@ Track::get( const QString& artist, const QString& track, const QString& album, i
return track.toStrongRef(); return track.toStrongRef();
} }
track_ptr t = track_ptr( new Track( artist, track, album, duration, composer, albumpos, discnumber ), &Track::deleteLater ); track_ptr t = track_ptr( new Track( artist, track, album, albumArtist, duration, composer, albumpos, discnumber ), &Track::deleteLater );
t->setWeakRef( t.toWeakRef() ); t->setWeakRef( t.toWeakRef() );
s_tracksByName.insert( key, t ); s_tracksByName.insert( key, t );
@@ -99,10 +100,10 @@ Track::get( const QString& artist, const QString& track, const QString& album, i
track_ptr track_ptr
Track::get( unsigned int id, const QString& artist, const QString& track, const QString& album, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber ) Track::get( unsigned int id, const QString& artist, const QString& track, const QString& album, const QString& albumArtist, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber )
{ {
QMutexLocker lock( &s_nameCacheMutex ); QMutexLocker lock( &s_nameCacheMutex );
const QString key = cacheKey( artist, track, album, duration, composer, albumpos, discnumber ); const QString key = cacheKey( artist, track, album, albumArtist, duration, composer, albumpos, discnumber );
if ( s_tracksByName.contains( key ) ) if ( s_tracksByName.contains( key ) )
{ {
track_wptr track = s_tracksByName.value( key ); track_wptr track = s_tracksByName.value( key );
@@ -110,7 +111,7 @@ Track::get( unsigned int id, const QString& artist, const QString& track, const
return track; return track;
} }
track_ptr t = track_ptr( new Track( id, artist, track, album, duration, composer, albumpos, discnumber ), &Track::deleteLater ); track_ptr t = track_ptr( new Track( id, artist, track, album, albumArtist, duration, composer, albumpos, discnumber ), &Track::deleteLater );
t->setWeakRef( t.toWeakRef() ); t->setWeakRef( t.toWeakRef() );
s_tracksByName.insert( key, t ); s_tracksByName.insert( key, t );
@@ -118,8 +119,8 @@ Track::get( unsigned int id, const QString& artist, const QString& track, const
} }
Track::Track( unsigned int id, const QString& artist, const QString& track, const QString& album, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber ) Track::Track( unsigned int id, const QString& artist, const QString& track, const QString& album, const QString& albumArtist, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber )
: d_ptr( new TrackPrivate( this, album, duration, composer, albumpos, discnumber ) ) : d_ptr( new TrackPrivate( this, album, albumArtist, duration, composer, albumpos, discnumber ) )
{ {
Q_D( Track ); Q_D( Track );
d->trackData = TrackData::get( id, artist, track ); d->trackData = TrackData::get( id, artist, track );
@@ -128,8 +129,8 @@ Track::Track( unsigned int id, const QString& artist, const QString& track, cons
} }
Track::Track( const QString& artist, const QString& track, const QString& album, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber ) Track::Track( const QString& artist, const QString& track, const QString& album, const QString& albumArtist, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber )
: d_ptr( new TrackPrivate( this, album, duration, composer, albumpos, discnumber ) ) : d_ptr( new TrackPrivate( this, album, albumArtist, duration, composer, albumpos, discnumber ) )
{ {
Q_D( Track ); Q_D( Track );
d->trackData = TrackData::get( 0, artist, track ); d->trackData = TrackData::get( 0, artist, track );
@@ -232,7 +233,7 @@ Track::deleteLater()
Q_D( Track ); Q_D( Track );
QMutexLocker lock( &s_nameCacheMutex ); QMutexLocker lock( &s_nameCacheMutex );
const QString key = cacheKey( artist(), track(), d->album, d->duration, d->composer, d->albumpos, d->discnumber ); const QString key = cacheKey( artist(), track(), d->album, d->albumArtist, d->duration, d->composer, d->albumpos, d->discnumber );
if ( s_tracksByName.contains( key ) ) if ( s_tracksByName.contains( key ) )
{ {
s_tracksByName.remove( key ); s_tracksByName.remove( key );
@@ -617,13 +618,32 @@ Track::artistPtr() const
} }
artist_ptr
Track::albumArtistPtr() const
{
Q_D( const Track );
if ( !d->albumArtistPtr )
{
d->albumArtistPtr = Artist::get( albumArtist(), false );
connect( d->albumArtistPtr.data(), SIGNAL( updated() ), SIGNAL( updated() ), Qt::UniqueConnection );
connect( d->albumArtistPtr.data(), SIGNAL( coverChanged() ), SIGNAL( coverChanged() ), Qt::UniqueConnection );
}
return d->albumArtistPtr;
}
album_ptr album_ptr
Track::albumPtr() const Track::albumPtr() const
{ {
Q_D( const Track ); Q_D( const Track );
if ( !d->albumPtr ) if ( !d->albumPtr )
{ {
if ( albumArtist().isEmpty() )
d->albumPtr = Album::get( artistPtr(), album(), false ); d->albumPtr = Album::get( artistPtr(), album(), false );
else
d->albumPtr = Album::get( albumArtistPtr(), album(), false );
connect( d->albumPtr.data(), SIGNAL( updated() ), SIGNAL( updated() ), Qt::UniqueConnection ); connect( d->albumPtr.data(), SIGNAL( updated() ), SIGNAL( updated() ), Qt::UniqueConnection );
connect( d->albumPtr.data(), SIGNAL( coverChanged() ), SIGNAL( coverChanged() ), Qt::UniqueConnection ); connect( d->albumPtr.data(), SIGNAL( coverChanged() ), SIGNAL( coverChanged() ), Qt::UniqueConnection );
} }
@@ -697,6 +717,14 @@ Track::artist() const
} }
QString
Track::albumArtist() const
{
Q_D( const Track );
return d->albumArtist;
}
QString QString
Track::track() const Track::track() const
{ {

View File

@@ -1,6 +1,6 @@
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> === /* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
* *
* Copyright 2013, Christian Muehlhaeuser <muesli@tomahawk-player.org> * Copyright 2013-2014, Christian Muehlhaeuser <muesli@tomahawk-player.org>
* Copyright 2013, Teo Mrnjavac <teo@kde.org> * Copyright 2013, Teo Mrnjavac <teo@kde.org>
* Copyright 2013, Uwe L. Korn <uwelk@xhochy.com> * Copyright 2013, Uwe L. Korn <uwelk@xhochy.com>
* *
@@ -48,8 +48,8 @@ public:
enum DescriptionMode enum DescriptionMode
{ Detailed = 0, Short = 1 }; { Detailed = 0, Short = 1 };
static track_ptr get( const QString& artist, const QString& track, const QString& album = QString(), int duration = 0, const QString& composer = QString(), unsigned int albumpos = 0, unsigned int discnumber = 0 ); static track_ptr get( const QString& artist, const QString& track, const QString& album = QString(), const QString& albumArtist = QString(), int duration = 0, const QString& composer = QString(), unsigned int albumpos = 0, unsigned int discnumber = 0 );
static track_ptr get( unsigned int id, const QString& artist, const QString& track, const QString& album, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber ); static track_ptr get( unsigned int id, const QString& artist, const QString& track, const QString& album, const QString& albumArtist, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber );
virtual ~Track(); virtual ~Track();
@@ -74,6 +74,7 @@ public:
const QString& trackSortname() const; const QString& trackSortname() const;
QString artist() const; QString artist() const;
QString albumArtist() const;
QString track() const; QString track() const;
QString composer() const; QString composer() const;
QString album() const; QString album() const;
@@ -83,6 +84,7 @@ public:
unsigned int discnumber() const; unsigned int discnumber() const;
Tomahawk::artist_ptr artistPtr() const; Tomahawk::artist_ptr artistPtr() const;
Tomahawk::artist_ptr albumArtistPtr() const;
Tomahawk::album_ptr albumPtr() const; Tomahawk::album_ptr albumPtr() const;
Tomahawk::artist_ptr composerPtr() const; Tomahawk::artist_ptr composerPtr() const;
@@ -142,8 +144,8 @@ protected:
private: private:
Q_DECLARE_PRIVATE( Track ) Q_DECLARE_PRIVATE( Track )
explicit Track( unsigned int id, const QString& artist, const QString& track, const QString& album, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber ); explicit Track( unsigned int id, const QString& artist, const QString& track, const QString& album, const QString& albumArtist, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber );
explicit Track( const QString& artist, const QString& track, const QString& album, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber ); explicit Track( const QString& artist, const QString& track, const QString& album, const QString& albumArtist, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber );
void init(); void init();

View File

@@ -29,10 +29,11 @@ namespace Tomahawk {
class TrackPrivate class TrackPrivate
{ {
public: public:
TrackPrivate( Track* q, const QString& _album, int _duration, const QString& _composer, unsigned int _albumpos, unsigned int _discnumber ) TrackPrivate( Track* q, const QString& _album, const QString& _albumArtist, int _duration, const QString& _composer, unsigned int _albumpos, unsigned int _discnumber )
: q_ptr( q ) : q_ptr( q )
, composer( _composer ) , composer( _composer )
, album( _album ) , album( _album )
, albumArtist( _albumArtist )
, duration( _duration ) , duration( _duration )
, albumpos( _albumpos ) , albumpos( _albumpos )
, discnumber( _discnumber ) , discnumber( _discnumber )
@@ -45,6 +46,7 @@ public:
private: private:
QString composer; QString composer;
QString album; QString album;
QString albumArtist;
QString composerSortname; QString composerSortname;
QString albumSortname; QString albumSortname;
@@ -53,6 +55,7 @@ private:
uint discnumber; uint discnumber;
mutable Tomahawk::artist_ptr artistPtr; mutable Tomahawk::artist_ptr artistPtr;
mutable Tomahawk::artist_ptr albumArtistPtr;
mutable Tomahawk::album_ptr albumPtr; mutable Tomahawk::album_ptr albumPtr;
mutable Tomahawk::artist_ptr composerPtr; mutable Tomahawk::artist_ptr composerPtr;