Skip to content

Commit

Permalink
Added albumArtist property to Track.
Browse files Browse the repository at this point in the history
  • Loading branch information
muesli committed Nov 24, 2014
1 parent fbec557 commit cb6c901
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 22 deletions.
56 changes: 42 additions & 14 deletions src/libtomahawk/Track.cpp
Expand Up @@ -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 );
Expand All @@ -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;
Expand All @@ -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() )
{
Expand All @@ -82,15 +83,15 @@ 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 );
if ( track )
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 );

Expand All @@ -99,27 +100,27 @@ 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 );
if ( 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() );
s_tracksByName.insert( key, t );

return t;
}


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 );
Expand All @@ -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 );
Expand Down Expand Up @@ -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 );
Expand Down Expand Up @@ -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 );
}
Expand Down Expand Up @@ -697,6 +717,14 @@ Track::artist() const
}


QString
Track::albumArtist() const
{
Q_D( const Track );
return d->albumArtist;
}


QString
Track::track() const
{
Expand Down
16 changes: 9 additions & 7 deletions src/libtomahawk/Track.h
@@ -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
Expand Down Expand Up @@ -48,8 +48,8 @@ friend class DatabaseCommand_LoadInboxEntries; // for setAllSocialActions
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();

Expand All @@ -74,6 +74,7 @@ friend class DatabaseCommand_LoadInboxEntries; // for setAllSocialActions
const QString& trackSortname() const;

QString artist() const;
QString albumArtist() const;
QString track() const;
QString composer() const;
QString album() const;
Expand All @@ -83,6 +84,7 @@ friend class DatabaseCommand_LoadInboxEntries; // for setAllSocialActions
unsigned int discnumber() const;

Tomahawk::artist_ptr artistPtr() const;
Tomahawk::artist_ptr albumArtistPtr() const;
Tomahawk::album_ptr albumPtr() const;
Tomahawk::artist_ptr composerPtr() const;

Expand Down Expand Up @@ -142,8 +144,8 @@ public slots:

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();

Expand Down
5 changes: 4 additions & 1 deletion src/libtomahawk/Track_p.h
Expand Up @@ -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 )
Expand All @@ -45,6 +46,7 @@ class TrackPrivate
private:
QString composer;
QString album;
QString albumArtist;
QString composerSortname;
QString albumSortname;

Expand All @@ -53,6 +55,7 @@ class TrackPrivate
uint discnumber;

mutable Tomahawk::artist_ptr artistPtr;
mutable Tomahawk::artist_ptr albumArtistPtr;
mutable Tomahawk::album_ptr albumPtr;
mutable Tomahawk::artist_ptr composerPtr;

Expand Down

0 comments on commit cb6c901

Please sign in to comment.