bool PlayableProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent ) const { PlayableItem* pi = itemFromIndex( sourceModel()->index( sourceRow, 0, sourceParent ) ); if ( !pi ) return false; if ( m_maxVisibleItems >= 0 && sourceRow > m_maxVisibleItems - 1 ) return false; if ( m_hideDupeItems ) { for ( int i = 0; i < sourceRow; i++ ) { PlayableItem* di = itemFromIndex( sourceModel()->index( i, 0, sourceParent ) ); if ( !di ) continue; bool b = ( pi->query() && pi->query()->equals( di->query() ) ) || ( pi->album() && pi->album() == di->album() ) || ( pi->artist() && pi->artist()->name() == di->artist()->name() ); if ( b && filterAcceptsRow( i, sourceParent ) ) return false; } } if ( pi->query() ) { const Tomahawk::query_ptr& q = pi->query()->displayQuery(); if ( q.isNull() ) // uh oh? filter out invalid queries i guess return false; Tomahawk::result_ptr r; if ( q->numResults() ) r = q->results().first(); if ( !m_showOfflineResults && ( r.isNull() || !r->isOnline() ) ) return false; if ( filterRegExp().isEmpty() ) return true; QStringList sl = filterRegExp().pattern().split( " ", QString::SkipEmptyParts ); foreach( QString s, sl ) { s = s.toLower(); if ( !q->artist().toLower().contains( s ) && !q->album().toLower().contains( s ) && !q->track().toLower().contains( s ) ) { return false; } } }
bool TrackProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent ) const { TrackModelItem* pi = itemFromIndex( sourceModel()->index( sourceRow, 0, sourceParent ) ); if ( !pi ) return false; const Tomahawk::query_ptr& q = pi->query(); if( q.isNull() ) // uh oh? filter out invalid queries i guess return false; Tomahawk::result_ptr r; if ( q->numResults() ) r = q->results().first(); if ( !m_showOfflineResults && !r.isNull() && !r->isOnline() ) return false; if ( filterRegExp().isEmpty() ) return true; QStringList sl = filterRegExp().pattern().split( " ", QString::SkipEmptyParts ); foreach( QString s, sl ) { s = s.toLower(); if ( !r.isNull() ) { 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; } } }
bool PlaylistInterface::hasPreviousResult() const { Tomahawk::result_ptr r = siblingResult( -1 ); return ( r && r->isOnline() ); }
bool PlayableProxyModel::nameFilterAcceptsRow( int sourceRow, PlayableItem* pi, const QModelIndex& sourceParent ) const { if ( m_hideEmptyParents && pi->source() ) { if ( !sourceModel()->rowCount( sourceModel()->index( sourceRow, 0, sourceParent ) ) ) { return false; } } const Tomahawk::query_ptr& query = pi->query(); if ( query ) { Tomahawk::result_ptr r; if ( query->numResults() ) r = query->results().first(); if ( !m_showOfflineResults && ( r.isNull() || !r->isOnline() ) ) return false; const QRegExp regexp = filterRegExp(); if ( regexp.isEmpty() ) return true; QStringList sl = regexp.pattern().split( " ", QString::SkipEmptyParts ); foreach( const QString& s, sl ) { const Tomahawk::track_ptr& track = query->track(); if ( !track->artist().contains( s, Qt::CaseInsensitive ) && !track->album().contains( s, Qt::CaseInsensitive ) && !track->track().contains( s, Qt::CaseInsensitive ) ) { return false; } } } const Tomahawk::album_ptr& al = pi->album(); if ( al ) { QStringList sl = filterRegExp().pattern().split( " ", QString::SkipEmptyParts ); foreach( const QString& s, sl ) { if ( !al->name().contains( s, Qt::CaseInsensitive ) && !al->artist()->name().contains( s, Qt::CaseInsensitive ) ) { return false; } } return true; } const Tomahawk::artist_ptr& ar = pi->artist(); if ( ar ) { QStringList sl = filterRegExp().pattern().split( " ", QString::SkipEmptyParts ); foreach( const QString& s, sl ) { if ( !ar->name().contains( s, Qt::CaseInsensitive ) ) { return false; } } return true; } return true; }