1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-20 15:59:42 +01: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
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 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
// options which could drastically reduce the performance.
str.reserve( artist.size() + track.size() + album.size()
+ composer.size() + durationStr.size()
+ albumArtist.size() + composer.size() + durationStr.size()
+ albumposStr.size() + discnumberStr.size() );
str += artist;
str += track;
str += album;
str += albumArtist;
str += composer;
str += durationStr;
str += albumposStr;
@ -72,7 +73,7 @@ cacheKey( const QString& artist, const QString& track, const QString& album, int
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() )
{
@ -82,7 +83,7 @@ Track::get( const QString& artist, const QString& track, const QString& album, i
}
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 ) )
{
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();
}
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() );
s_tracksByName.insert( key, t );
@ -99,10 +100,10 @@ Track::get( const QString& artist, const QString& track, const QString& album, i
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 );
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 ) )
{
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;
}
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() );
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 )
: d_ptr( new TrackPrivate( this, album, duration, composer, albumpos, 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, albumArtist, duration, composer, albumpos, discnumber ) )
{
Q_D( 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 )
: d_ptr( new TrackPrivate( this, album, duration, composer, albumpos, 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, albumArtist, duration, composer, albumpos, discnumber ) )
{
Q_D( Track );
d->trackData = TrackData::get( 0, artist, track );
@ -232,7 +233,7 @@ Track::deleteLater()
Q_D( Track );
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 ) )
{
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
Track::albumPtr() const
{
Q_D( const Track );
if ( !d->albumPtr )
{
d->albumPtr = Album::get( artistPtr(), album(), false );
if ( albumArtist().isEmpty() )
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( coverChanged() ), SIGNAL( coverChanged() ), Qt::UniqueConnection );
}
@ -697,6 +717,14 @@ Track::artist() const
}
QString
Track::albumArtist() const
{
Q_D( const Track );
return d->albumArtist;
}
QString
Track::track() const
{

View File

@ -1,8 +1,8 @@
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
*
* Copyright 2013, Christian Muehlhaeuser <muesli@tomahawk-player.org>
* Copyright 2013, Teo Mrnjavac <teo@kde.org>
* Copyright 2013, Uwe L. Korn <uwelk@xhochy.com>
* Copyright 2013-2014, Christian Muehlhaeuser <muesli@tomahawk-player.org>
* Copyright 2013, Teo Mrnjavac <teo@kde.org>
* Copyright 2013, Uwe L. Korn <uwelk@xhochy.com>
*
* Tomahawk is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -48,8 +48,8 @@ public:
enum DescriptionMode
{ 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( 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( 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, const QString& albumArtist, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber );
virtual ~Track();
@ -74,6 +74,7 @@ public:
const QString& trackSortname() const;
QString artist() const;
QString albumArtist() const;
QString track() const;
QString composer() const;
QString album() const;
@ -83,6 +84,7 @@ public:
unsigned int discnumber() const;
Tomahawk::artist_ptr artistPtr() const;
Tomahawk::artist_ptr albumArtistPtr() const;
Tomahawk::album_ptr albumPtr() const;
Tomahawk::artist_ptr composerPtr() const;
@ -142,8 +144,8 @@ protected:
private:
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( 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, const QString& albumArtist, int duration, const QString& composer, unsigned int albumpos, unsigned int discnumber );
void init();

View File

@ -29,10 +29,11 @@ namespace Tomahawk {
class TrackPrivate
{
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 )
, composer( _composer )
, album( _album )
, albumArtist( _albumArtist )
, duration( _duration )
, albumpos( _albumpos )
, discnumber( _discnumber )
@ -45,6 +46,7 @@ public:
private:
QString composer;
QString album;
QString albumArtist;
QString composerSortname;
QString albumSortname;
@ -53,6 +55,7 @@ private:
uint discnumber;
mutable Tomahawk::artist_ptr artistPtr;
mutable Tomahawk::artist_ptr albumArtistPtr;
mutable Tomahawk::album_ptr albumPtr;
mutable Tomahawk::artist_ptr composerPtr;