void WelcomeWidget::onPlaybackFinished( const Tomahawk::query_ptr& query ) { int count = m_tracksModel->trackCount(); unsigned int playtime = query->playedBy().second; if ( count ) { TrackModelItem* oldestItem = m_tracksModel->itemFromIndex( m_tracksModel->index( count - 1, 0, QModelIndex() ) ); if ( oldestItem->query()->playedBy().second >= playtime ) return; TrackModelItem* youngestItem = m_tracksModel->itemFromIndex( m_tracksModel->index( 0, 0, QModelIndex() ) ); if ( youngestItem->query()->playedBy().second <= playtime ) m_tracksModel->insert( query, 0 ); else { for ( int i = 0; i < count - 1; i++ ) { TrackModelItem* item1 = m_tracksModel->itemFromIndex( m_tracksModel->index( i, 0, QModelIndex() ) ); TrackModelItem* item2 = m_tracksModel->itemFromIndex( m_tracksModel->index( i + 1, 0, QModelIndex() ) ); if ( item1->query()->playedBy().second >= playtime && item2->query()->playedBy().second <= playtime ) { m_tracksModel->insert( query, i + 1 ); break; } } } } else m_tracksModel->insert( query, 0 ); if ( m_tracksModel->trackCount() > HISTORY_TRACK_ITEMS ) m_tracksModel->remove( HISTORY_TRACK_ITEMS ); if ( m_timer->isActive() ) m_timer->stop(); m_timer->start( HISTORY_RESOLVING_TIMEOUT ); }
void RecentlyPlayedModel::onPlaybackFinished( const Tomahawk::query_ptr& query ) { int count = trackCount(); unsigned int playtime = query->playedBy().second; if ( count ) { TrackModelItem* oldestItem = itemFromIndex( index( count - 1, 0, QModelIndex() ) ); if ( oldestItem->query()->playedBy().second >= playtime ) return; TrackModelItem* youngestItem = itemFromIndex( index( 0, 0, QModelIndex() ) ); if ( youngestItem->query()->playedBy().second <= playtime ) insert( query, 0 ); else { for ( int i = 0; i < count - 1; i++ ) { TrackModelItem* item1 = itemFromIndex( index( i, 0, QModelIndex() ) ); TrackModelItem* item2 = itemFromIndex( index( i + 1, 0, QModelIndex() ) ); if ( item1->query()->playedBy().second >= playtime && item2->query()->playedBy().second <= playtime ) { insert( query, i + 1 ); break; } } } } else insert( query, 0 ); if ( trackCount() > (int)m_limit ) remove( m_limit ); ensureResolved(); }