diff --git a/src/library/autodj/autodjprocessor.h b/src/library/autodj/autodjprocessor.h index f5c82e23be8..a23f1ae9fe7 100644 --- a/src/library/autodj/autodjprocessor.h +++ b/src/library/autodj/autodjprocessor.h @@ -207,9 +207,6 @@ class AutoDJProcessor : public QObject { void transitionTimeChanged(int time); void randomTrackRequested(int tracksToAdd); - public slots: - void playlistFirstTrackChanged(); - private slots: void crossfaderChanged(double value); void playerPositionChanged(DeckAttributes* pDeck, double position); @@ -222,6 +219,7 @@ class AutoDJProcessor : public QObject { void playerLoadingTrack(DeckAttributes* pDeck, TrackPointer pNewTrack, TrackPointer pOldTrack); void playerEmpty(DeckAttributes* pDeck); void playerRateChanged(DeckAttributes* pDeck); + void playlistFirstTrackChanged(); void controlEnableChangeRequest(double value); void controlFadeNow(double value); diff --git a/src/library/dao/playlistdao.cpp b/src/library/dao/playlistdao.cpp index 5735b61b363..c9b9d24265f 100644 --- a/src/library/dao/playlistdao.cpp +++ b/src/library/dao/playlistdao.cpp @@ -1278,18 +1278,21 @@ void PlaylistDAO::addTracksToAutoDJQueue(const QList& trackIds, AutoDJS return; } + // If the first track is already loaded to the player, + // alter the playlist only below the first track + int position = + (m_pAutoDJProcessor && m_pAutoDJProcessor->nextTrackLoaded()) ? 2 : 1; + switch (loc) { case AutoDJSendLoc::TOP: - insertTracksIntoPlaylist(trackIds, iAutoDJPlaylistId, 1); - m_pAutoDJProcessor->playlistFirstTrackChanged(); + insertTracksIntoPlaylist(trackIds, iAutoDJPlaylistId, position); break; case AutoDJSendLoc::BOTTOM: appendTracksToPlaylist(trackIds, iAutoDJPlaylistId); break; case AutoDJSendLoc::REPLACE: - if (removeTracksFromPlaylist(iAutoDJPlaylistId, 1)) { + if (removeTracksFromPlaylist(iAutoDJPlaylistId, position)) { appendTracksToPlaylist(trackIds, iAutoDJPlaylistId); - m_pAutoDJProcessor->playlistFirstTrackChanged(); } break; }