From 5ed65cafce99532fbe0009ca0e4d83b0b8c136fe Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sun, 20 May 2012 10:39:05 +0200 Subject: [PATCH] * Introduced Query::displayQuery(). Returns (if available) the first result as a query_ptr, otherwise returns the Query's own query_ptr. Use this whenever you wanna display Query stuff in the GUI. Also, reduce numResults() usage. --- src/libtomahawk/Album.cpp | 1 + src/libtomahawk/Album.h | 4 + src/libtomahawk/GlobalActionManager.cpp | 23 +----- src/libtomahawk/Playlist.cpp | 6 +- src/libtomahawk/Query.cpp | 10 +++ src/libtomahawk/Query.h | 4 +- src/libtomahawk/Result.cpp | 14 ++-- src/libtomahawk/playlist/AlbumView.cpp | 4 +- .../playlist/PlaylistChartItemDelegate.cpp | 19 ++--- .../playlist/PlaylistItemDelegate.cpp | 16 +--- .../playlist/PlaylistLargeItemDelegate.cpp | 19 ++--- src/libtomahawk/playlist/PlaylistModel.cpp | 6 +- src/libtomahawk/playlist/TrackModel.cpp | 82 ++++++++----------- src/libtomahawk/playlist/TrackProxyModel.cpp | 50 ++++------- src/libtomahawk/playlist/TrackView.cpp | 9 +- src/libtomahawk/playlist/TreeModel.cpp | 6 +- src/libtomahawk/playlist/TreeModelItem.cpp | 3 +- src/libtomahawk/utils/TomahawkUtilsGui.cpp | 2 +- 18 files changed, 104 insertions(+), 174 deletions(-) diff --git a/src/libtomahawk/Album.cpp b/src/libtomahawk/Album.cpp index dc765460e..4dcad4ac3 100644 --- a/src/libtomahawk/Album.cpp +++ b/src/libtomahawk/Album.cpp @@ -88,6 +88,7 @@ Album::Album( unsigned int id, const QString& name, const Tomahawk::artist_ptr& , m_cover( 0 ) #endif { + m_sortname = DatabaseImpl::sortname( name ); } diff --git a/src/libtomahawk/Album.h b/src/libtomahawk/Album.h index bda5036c5..a0fa52dd9 100644 --- a/src/libtomahawk/Album.h +++ b/src/libtomahawk/Album.h @@ -50,6 +50,8 @@ public: unsigned int id() const { return m_id; } QString name() const { return m_name; } + QString sortname() const { return m_sortname; } + artist_ptr artist() const; #ifndef ENABLE_HEADLESS QPixmap cover( const QSize& size, bool forceLoad = true ) const; @@ -78,6 +80,8 @@ private: unsigned int m_id; QString m_name; + QString m_sortname; + artist_ptr m_artist; QByteArray m_coverBuffer; diff --git a/src/libtomahawk/GlobalActionManager.cpp b/src/libtomahawk/GlobalActionManager.cpp index d7c6cfbe2..a35d4d77c 100644 --- a/src/libtomahawk/GlobalActionManager.cpp +++ b/src/libtomahawk/GlobalActionManager.cpp @@ -87,20 +87,9 @@ GlobalActionManager::~GlobalActionManager() QUrl GlobalActionManager::openLinkFromQuery( const query_ptr& query ) const { - QString title, artist, album; - - if ( !query->results().isEmpty() && !query->results().first().isNull() ) - { - title = query->results().first()->track(); - artist = query->results().first()->artist().isNull() ? QString() : query->results().first()->artist()->name(); - album = query->results().first()->album().isNull() ? QString() : query->results().first()->album()->name(); - } - else - { - title = query->track(); - artist = query->artist(); - album = query->album(); - } + QString title = query->displayQuery()->track(); + QString artist = query->displayQuery()->artist(); + QString album = query->displayQuery()->album(); return openLink( title, artist, album ); } @@ -1166,11 +1155,7 @@ GlobalActionManager::doBookmark( const playlist_ptr& pl, const query_ptr& q ) plentry_ptr e( new PlaylistEntry ); e->setGuid( uuid() ); - if ( q->results().count() ) - e->setDuration( q->results().at( 0 )->duration() ); - else - e->setDuration( 0 ); - + e->setDuration( q->displayQuery()->duration() ); e->setLastmodified( 0 ); QString annotation = ""; if ( !q->property( "annotation" ).toString().isEmpty() ) diff --git a/src/libtomahawk/Playlist.cpp b/src/libtomahawk/Playlist.cpp index bbda7ed5f..88b6868f1 100644 --- a/src/libtomahawk/Playlist.cpp +++ b/src/libtomahawk/Playlist.cpp @@ -622,11 +622,7 @@ Playlist::entriesFromQueries( const QList& queries, bool cl plentry_ptr e( new PlaylistEntry() ); e->setGuid( uuid() ); - if ( query->results().count() ) - e->setDuration( query->results().at( 0 )->duration() ); - else - e->setDuration( 0 ); - + e->setDuration( query->displayQuery()->duration() ); e->setLastmodified( 0 ); QString annotation = ""; if ( !query->property( "annotation" ).toString().isEmpty() ) diff --git a/src/libtomahawk/Query.cpp b/src/libtomahawk/Query.cpp index 8b1e6872d..576a3d462 100644 --- a/src/libtomahawk/Query.cpp +++ b/src/libtomahawk/Query.cpp @@ -182,6 +182,16 @@ Query::updateSortNames() } +query_ptr +Query::displayQuery() const +{ + if ( !results().isEmpty() ) + return results().first()->toQuery(); + + return m_ownRef.toStrongRef(); +} + + void Query::addResults( const QList< Tomahawk::result_ptr >& newresults ) { diff --git a/src/libtomahawk/Query.h b/src/libtomahawk/Query.h index f0e6bfc18..78ff182f8 100644 --- a/src/libtomahawk/Query.h +++ b/src/libtomahawk/Query.h @@ -131,14 +131,16 @@ public: QString artistSortname() const { return m_artistSortname; } QString albumSortname() const { return m_albumSortname; } QString trackSortname() const { return m_trackSortname; } + QString artist() const { return m_artist; } QString composer() const { return m_composer; } QString album() const { return m_album; } QString track() const { return m_track; } - int duration() const { return m_duration; } unsigned int albumpos() const { return m_albumpos; } unsigned int discnumber() const { return m_discnumber; } + + query_ptr displayQuery() const; #ifndef ENABLE_HEADLESS QPixmap cover( const QSize& size, bool forceLoad = true ) const; diff --git a/src/libtomahawk/Result.cpp b/src/libtomahawk/Result.cpp index ffe79d1e2..be508d0a2 100644 --- a/src/libtomahawk/Result.cpp +++ b/src/libtomahawk/Result.cpp @@ -163,12 +163,7 @@ Result::toVariant() const m.insert( "artist", artist()->name() ); m.insert( "album", album()->name() ); m.insert( "track", track() ); - - if ( !collection().isNull() ) - m.insert( "source", collection()->source()->friendlyName() ); - else - m.insert( "source", friendlySource() ); - + m.insert( "source", friendlySource() ); m.insert( "mimetype", mimetype() ); m.insert( "size", size() ); m.insert( "bitrate", bitrate() ); @@ -176,6 +171,7 @@ Result::toVariant() const m.insert( "score", score() ); m.insert( "sid", id() ); m.insert( "discnumber", discnumber() ); + m.insert( "albumpos", albumpos() ); if ( !composer().isNull() ) m.insert( "composer", composer()->name() ); @@ -197,6 +193,12 @@ Result::toQuery() if ( m_query.isNull() ) { m_query = Tomahawk::Query::get( artist()->name(), track(), album()->name() ); + m_query->setAlbumPos( albumpos() ); + m_query->setDiscNumber( discnumber() ); + m_query->setDuration( duration() ); + if ( !composer().isNull() ) + m_query->setComposer( composer()->name() ); + QList rl; rl << Result::get( m_url ); diff --git a/src/libtomahawk/playlist/AlbumView.cpp b/src/libtomahawk/playlist/AlbumView.cpp index 602e52edc..740b8ead1 100644 --- a/src/libtomahawk/playlist/AlbumView.cpp +++ b/src/libtomahawk/playlist/AlbumView.cpp @@ -151,8 +151,8 @@ AlbumView::onItemActivated( const QModelIndex& index ) ViewManager::instance()->show( item->album() ); else if ( !item->artist().isNull() ) ViewManager::instance()->show( item->artist() ); - else if ( item->query()->numResults() ) - AudioEngine::instance()->playItem( playlistinterface_ptr(), item->query()->results().first() ); + else if ( !item->query().isNull() ) + AudioEngine::instance()->playItem( playlistinterface_ptr(), item->query() ); } } diff --git a/src/libtomahawk/playlist/PlaylistChartItemDelegate.cpp b/src/libtomahawk/playlist/PlaylistChartItemDelegate.cpp index c01dab9e0..e30de7a5b 100644 --- a/src/libtomahawk/playlist/PlaylistChartItemDelegate.cpp +++ b/src/libtomahawk/playlist/PlaylistChartItemDelegate.cpp @@ -135,21 +135,12 @@ PlaylistChartItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& if ( m_view->header()->visualIndex( index.column() ) > 0 ) return; + const query_ptr q = item->query()->displayQuery(); + unsigned int duration = q->duration(); + QString artist = q->artist(); + QString track = q->track(); QPixmap avatar; - QString artist, track, upperText, lowerText; - unsigned int duration = 0; - - if ( item->query()->results().count() ) - { - artist = item->query()->results().first()->artist()->name(); - track = item->query()->results().first()->track(); - duration = item->query()->results().first()->duration(); - } - else - { - artist = item->query()->artist(); - track = item->query()->track(); - } + QString upperText, lowerText; painter->save(); { diff --git a/src/libtomahawk/playlist/PlaylistItemDelegate.cpp b/src/libtomahawk/playlist/PlaylistItemDelegate.cpp index d324e1dab..70a6e0962 100644 --- a/src/libtomahawk/playlist/PlaylistItemDelegate.cpp +++ b/src/libtomahawk/playlist/PlaylistItemDelegate.cpp @@ -133,21 +133,13 @@ PlaylistItemDelegate::paintShort( QPainter* painter, const QStyleOptionViewItem& if ( m_view->header()->visualIndex( index.column() ) > 0 ) return; + const query_ptr q = item->query()->displayQuery(); + QString artist = q->artist(); + QString track = q->track(); QPixmap pixmap; - QString artist, track, upperText, lowerText; + QString upperText, lowerText; source_ptr source = item->query()->playedBy().first; - if ( item->query()->results().count() ) - { - artist = item->query()->results().first()->artist()->name(); - track = item->query()->results().first()->track(); - } - else - { - artist = item->query()->artist(); - track = item->query()->track(); - } - if ( source.isNull() ) { upperText = track; diff --git a/src/libtomahawk/playlist/PlaylistLargeItemDelegate.cpp b/src/libtomahawk/playlist/PlaylistLargeItemDelegate.cpp index 85fcd62f4..e8c269419 100644 --- a/src/libtomahawk/playlist/PlaylistLargeItemDelegate.cpp +++ b/src/libtomahawk/playlist/PlaylistLargeItemDelegate.cpp @@ -136,21 +136,12 @@ PlaylistLargeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& if ( m_view->header()->visualIndex( index.column() ) > 0 ) return; + const query_ptr q = item->query()->displayQuery(); + QString artist = q->artist(); + QString track = q->track(); + unsigned int duration = q->duration(); QPixmap avatar; - QString artist, track, lowerText; - unsigned int duration = 0; - - if ( item->query()->results().count() ) - { - artist = item->query()->results().first()->artist()->name(); - track = item->query()->results().first()->track(); - duration = item->query()->results().first()->duration(); - } - else - { - artist = item->query()->artist(); - track = item->query()->track(); - } + QString lowerText; QSize avatarSize( 32, 32 ); source_ptr source = item->query()->playedBy().first; diff --git a/src/libtomahawk/playlist/PlaylistModel.cpp b/src/libtomahawk/playlist/PlaylistModel.cpp index a5aeef5b4..b550fbbca 100644 --- a/src/libtomahawk/playlist/PlaylistModel.cpp +++ b/src/libtomahawk/playlist/PlaylistModel.cpp @@ -187,11 +187,7 @@ PlaylistModel::insert( const QList< Tomahawk::query_ptr >& queries, int row ) { plentry_ptr entry = plentry_ptr( new PlaylistEntry() ); - if ( query->results().count() ) - entry->setDuration( query->results().at( 0 )->duration() ); - else - entry->setDuration( 0 ); - + entry->setDuration( query->displayQuery()->duration() ); entry->setLastmodified( 0 ); QString annotation = ""; if ( !query->property( "annotation" ).toString().isEmpty() ) diff --git a/src/libtomahawk/playlist/TrackModel.cpp b/src/libtomahawk/playlist/TrackModel.cpp index b4688e584..1d84bdb2e 100644 --- a/src/libtomahawk/playlist/TrackModel.cpp +++ b/src/libtomahawk/playlist/TrackModel.cpp @@ -152,49 +152,46 @@ TrackModel::data( const QModelIndex& index, int role ) const if ( role != Qt::DisplayRole ) // && role != Qt::ToolTipRole ) return QVariant(); - const query_ptr& query = entry->query(); - if ( !query->numResults() ) + const query_ptr& query = entry->query()->displayQuery(); + switch( index.column() ) { - switch( index.column() ) - { - case Artist: - return query->artist(); - break; + case Artist: + return query->artist(); + break; - case Track: - return query->track(); - break; + case Track: + return query->track(); + break; - case Album: - return query->album(); - break; - } + case Album: + return query->album(); + break; + + case Composer: + return query->composer(); + break; + + case Duration: + return TomahawkUtils::timeToString( query->duration() ); + break; + + case AlbumPos: + QString tPos; + if ( query->albumpos() != 0 ) + { + tPos = QString::number( query->albumpos() ); + if( query->discnumber() == 0 ) + return tPos; + else + return QString( "%1.%2" ).arg( QString::number( query->discnumber() ) ) + .arg( tPos ); + } + break; } - else + if ( query->numResults() ) { switch( index.column() ) { - case Artist: - return query->results().first()->artist()->name(); - break; - - case Track: - return query->results().first()->track(); - break; - - case Album: - return query->results().first()->album()->name(); - break; - - case Composer: - if ( !query->results().first()->composer().isNull() ) - return query->results().first()->composer()->name(); - break; - - case Duration: - return TomahawkUtils::timeToString( query->results().first()->duration() ); - break; - case Bitrate: if ( query->results().first()->bitrate() > 0 ) return query->results().first()->bitrate(); @@ -220,19 +217,6 @@ TrackModel::data( const QModelIndex& index, int role ) const case Score: return query->results().first()->score(); break; - - case AlbumPos: - QString tPos; - if ( query->results().first()->albumpos() != 0 ) - { - tPos = QString::number( query->results().first()->albumpos() ); - if( query->results().first()->discnumber() == 0 ) - return tPos; - else - return QString( "%1.%2" ).arg( QString::number( query->results().first()->discnumber() ) ) - .arg( tPos ); - } - break; } } diff --git a/src/libtomahawk/playlist/TrackProxyModel.cpp b/src/libtomahawk/playlist/TrackProxyModel.cpp index 2d1b30ab1..8f6c57503 100644 --- a/src/libtomahawk/playlist/TrackProxyModel.cpp +++ b/src/libtomahawk/playlist/TrackProxyModel.cpp @@ -70,7 +70,7 @@ TrackProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParen if ( !pi ) return false; - const Tomahawk::query_ptr& q = pi->query(); + const Tomahawk::query_ptr& q = pi->query()->displayQuery(); if ( q.isNull() ) // uh oh? filter out invalid queries i guess return false; @@ -88,23 +88,11 @@ TrackProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParen foreach( QString s, sl ) { s = s.toLower(); - if ( !r.isNull() ) + if ( !q->artist().toLower().contains( s ) && + !q->album().toLower().contains( s ) && + !q->track().toLower().contains( s ) ) { - if ( !r->artist()->name().toLower().contains( s ) && - !r->album()->name().toLower().contains( s ) && - !r->track().toLower().contains( s ) ) - { - return false; - } - } - else - { - if ( !q->artist().toLower().contains( s ) && - !q->album().toLower().contains( s ) && - !q->track().toLower().contains( s ) ) - { - return false; - } + return false; } } @@ -169,17 +157,19 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c if ( !p2 ) return false; - const Tomahawk::query_ptr& q1 = p1->query(); - const Tomahawk::query_ptr& q2 = p2->query(); + const Tomahawk::query_ptr& q1 = p1->query()->displayQuery(); + const Tomahawk::query_ptr& q2 = p2->query()->displayQuery(); QString artist1 = q1->artistSortname(); QString artist2 = q2->artistSortname(); - QString album1 = q1->album(); - QString album2 = q2->album(); - QString track1 = q1->track(); - QString track2 = q2->track(); - unsigned int albumpos1 = 0, albumpos2 = 0; - unsigned int discnumber1 = 0, discnumber2 = 0; + QString album1 = q1->albumSortname(); + QString album2 = q2->albumSortname(); + QString track1 = q1->trackSortname(); + QString track2 = q2->trackSortname(); + unsigned int albumpos1 = q1->albumpos(); + unsigned int albumpos2 = q2->albumpos(); + unsigned int discnumber1 = q1->discnumber(); + unsigned int discnumber2 = q2->discnumber(); unsigned int bitrate1 = 0, bitrate2 = 0; unsigned int mtime1 = 0, mtime2 = 0; unsigned int size1 = 0, size2 = 0; @@ -188,11 +178,6 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c if ( q1->numResults() ) { const Tomahawk::result_ptr& r = q1->results().at( 0 ); - artist1 = r->artist()->sortname(); - album1 = r->album()->name(); - track1 = r->track(); - albumpos1 = r->albumpos(); - discnumber1 = qMax( 1, (int)r->discnumber() ); bitrate1 = r->bitrate(); mtime1 = r->modificationTime(); id1 = r->trackId(); @@ -201,11 +186,6 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c if ( q2->numResults() ) { const Tomahawk::result_ptr& r = q2->results().at( 0 ); - artist2 = r->artist()->sortname(); - album2 = r->album()->name(); - track2 = r->track(); - albumpos2 = r->albumpos(); - discnumber2 = qMax( 1, (int)r->discnumber() ); bitrate2 = r->bitrate(); mtime2 = r->modificationTime(); id2 = r->trackId(); diff --git a/src/libtomahawk/playlist/TrackView.cpp b/src/libtomahawk/playlist/TrackView.cpp index a49f5cc4c..6f3f3d99b 100644 --- a/src/libtomahawk/playlist/TrackView.cpp +++ b/src/libtomahawk/playlist/TrackView.cpp @@ -295,11 +295,10 @@ bool TrackView::tryToPlayItem( const QModelIndex& index ) { TrackModelItem* item = m_model->itemFromIndex( m_proxyModel->mapToSource( index ) ); - if ( item && !item->query().isNull() && item->query()->numResults() ) + if ( item && !item->query().isNull() ) { - tDebug() << "Result activated:" << item->query()->toString() << item->query()->results().first()->url(); m_proxyModel->setCurrentIndex( index ); - AudioEngine::instance()->playItem( m_proxyModel->playlistInterface(), item->query()->results().first() ); + AudioEngine::instance()->playItem( m_proxyModel->playlistInterface(), item->query() ); return true; } @@ -661,7 +660,7 @@ TrackView::mousePressEvent( QMouseEvent* event ) { case TrackModel::Artist: { - if ( item->query()->results().count() ) + if ( item->query()->numResults() ) { ViewManager::instance()->show( item->query()->results().first()->artist() ); } @@ -674,7 +673,7 @@ TrackView::mousePressEvent( QMouseEvent* event ) case TrackModel::Album: { - if ( item->query()->results().count() ) + if ( item->query()->numResults() ) { ViewManager::instance()->show( item->query()->results().first()->album() ); } diff --git a/src/libtomahawk/playlist/TreeModel.cpp b/src/libtomahawk/playlist/TreeModel.cpp index e142c6b0e..1eea1e44f 100644 --- a/src/libtomahawk/playlist/TreeModel.cpp +++ b/src/libtomahawk/playlist/TreeModel.cpp @@ -798,11 +798,7 @@ TreeModel::onTracksAdded( const QList& tracks, const QModel TreeModelItem* item = 0; foreach( const query_ptr& query, tracks ) { - if ( query->numResults() ) - item = new TreeModelItem( query->results().first(), parentItem ); - else - item = new TreeModelItem( query, parentItem ); - + item = new TreeModelItem( query, parentItem ); item->index = createIndex( parentItem->children.count() - 1, 0, item ); connect( item, SIGNAL( dataChanged() ), SLOT( onDataChanged() ) ); diff --git a/src/libtomahawk/playlist/TreeModelItem.cpp b/src/libtomahawk/playlist/TreeModelItem.cpp index 566539f28..f54a68670 100644 --- a/src/libtomahawk/playlist/TreeModelItem.cpp +++ b/src/libtomahawk/playlist/TreeModelItem.cpp @@ -168,6 +168,7 @@ TreeModelItem::TreeModelItem( const Tomahawk::query_ptr& query, TreeModelItem* p } toberemoved = false; + onResultsChanged(); connect( query.data(), SIGNAL( resultsAdded( QList ) ), SLOT( onResultsChanged() ) ); @@ -254,7 +255,7 @@ TreeModelItem::result() const { if ( m_result.isNull() && !m_query.isNull() ) { - if ( m_query->results().count() ) + if ( m_query->numResults() ) return m_query->results().first(); } diff --git a/src/libtomahawk/utils/TomahawkUtilsGui.cpp b/src/libtomahawk/utils/TomahawkUtilsGui.cpp index 8d2017dc2..1672f44d6 100644 --- a/src/libtomahawk/utils/TomahawkUtilsGui.cpp +++ b/src/libtomahawk/utils/TomahawkUtilsGui.cpp @@ -410,7 +410,7 @@ prepareStyleOption( QStyleOptionViewItemV4* option, const QModelIndex& index, Tr else { float opacity = 0.0; - if ( item->query()->results().count() ) + if ( !item->query()->results().isEmpty() ) opacity = item->query()->results().first()->score(); opacity = qMax( (float)0.3, opacity );