diff --git a/src/libtomahawk/PlaylistInterface.cpp b/src/libtomahawk/PlaylistInterface.cpp index fcda5e13b..eb2eec2ba 100644 --- a/src/libtomahawk/PlaylistInterface.cpp +++ b/src/libtomahawk/PlaylistInterface.cpp @@ -162,12 +162,12 @@ PlaylistInterface::filterTracks( const QList& queries ) bool PlaylistInterface::hasNextResult() const { - return !( siblingResult( 1 ).isNull() ); + return ( siblingResult( 1 ) ); } bool PlaylistInterface::hasPreviousResult() const { - return !( siblingResult( -1 ).isNull() ); + return ( siblingResult( -1 ) ); } diff --git a/src/libtomahawk/audio/AudioEngine.cpp b/src/libtomahawk/audio/AudioEngine.cpp index 51d95b7e6..ebdd2fce8 100644 --- a/src/libtomahawk/audio/AudioEngine.cpp +++ b/src/libtomahawk/audio/AudioEngine.cpp @@ -141,7 +141,14 @@ AudioEngine::play() sendNowPlayingNotification( Tomahawk::InfoSystem::InfoNowResumed ); } else - next(); + { + if ( !m_currentTrack && m_playlist && m_playlist->nextResult() ) + { + loadNextTrack(); + } + else + next(); + } } @@ -220,11 +227,13 @@ AudioEngine::canGoNext() return false; if ( m_playlist.data()->skipRestrictions() == PlaylistModes::NoSkip || - m_playlist.data()->skipRestrictions() == PlaylistModes::NoSkipForwards ) + m_playlist.data()->skipRestrictions() == PlaylistModes::NoSkipForwards ) + { return false; + } if ( !m_currentTrack.isNull() && !m_playlist->hasNextResult() && - ( m_playlist->currentItem().isNull() || ( m_currentTrack->id() == m_playlist->currentItem()->id() ) ) ) + ( m_playlist->currentItem().isNull() || ( m_currentTrack->id() == m_playlist->currentItem()->id() ) ) ) { //For instance, when doing a catch-up while listening along, but the person //you're following hasn't started a new track yet...don't do anything @@ -232,7 +241,7 @@ AudioEngine::canGoNext() return false; } - return ( m_playlist.data()->hasNextResult() && m_playlist.data()->nextResult()->isOnline() ); + return ( m_currentTrack && m_playlist.data()->hasNextResult() && m_playlist.data()->nextResult()->isOnline() ); } @@ -246,7 +255,7 @@ AudioEngine::canGoPrevious() m_playlist.data()->skipRestrictions() == PlaylistModes::NoSkipBackwards ) return false; - return ( m_playlist.data()->hasPreviousResult() && m_playlist.data()->previousResult()->isOnline() ); + return ( m_currentTrack && m_playlist.data()->hasPreviousResult() && m_playlist.data()->previousResult()->isOnline() ); } @@ -520,7 +529,7 @@ AudioEngine::loadPreviousTrack() } Tomahawk::result_ptr result; - if ( m_playlist.data()->hasPreviousResult() ) + if ( m_playlist.data()->previousResult() ) { result = m_playlist.data()->previousResult(); m_currentTrackPlaylist = m_playlist; @@ -561,7 +570,7 @@ AudioEngine::loadNextTrack() { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Loading playlist's next item" << m_playlist.data() << m_playlist->shuffled(); - if ( m_playlist.data()->hasNextResult() ) + if ( m_playlist.data()->nextResult() ) { result = m_playlist.data()->nextResult(); m_currentTrackPlaylist = m_playlist; diff --git a/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.cpp b/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.cpp index 9951bb6e5..a5303fd26 100644 --- a/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.cpp +++ b/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.cpp @@ -195,9 +195,6 @@ PlayableProxyModelPlaylistInterface::siblingIndex( int itemsAway, qint64 rootInd } else { - if ( !proxyModel->currentIndex().isValid() ) - return -1; - // random mode is enabled if ( m_shuffleCache.isValid() ) { @@ -251,17 +248,13 @@ PlayableProxyModelPlaylistInterface::siblingIndex( int itemsAway, qint64 rootInd idx = proxyModel->mapFromSource( pitem->index ); } - if ( idx.isValid() ) - idx = proxyModel->index( idx.row() + itemsAway, 0 ); + idx = proxyModel->index( idx.row() + itemsAway, 0 ); } } } if ( !idx.isValid() && m_repeatMode == PlaylistModes::RepeatAll ) { - if ( !proxyModel->currentIndex().isValid() ) - return -1; - // repeat all tracks if ( itemsAway > 0 ) {