summaryrefslogtreecommitdiffstats
path: root/src/library
diff options
context:
space:
mode:
authorPavel Potocek <pavelpotocek@gmail.com>2017-01-31 16:22:58 +0100
committerPavel Potocek <pavelpotocek@gmail.com>2017-01-31 16:22:58 +0100
commit9241ba67b3369eeb23b0dce962011795b0f6b466 (patch)
tree964928a2ad77ffb3db164d88b4fe296a75d41d8e /src/library
parent60b30896ac570bea52de7a0050433acd477d556d (diff)
Add an option to replace the autoDJ queue with the selected tracks
Diffstat (limited to 'src/library')
-rw-r--r--src/library/dao/playlistdao.cpp47
-rw-r--r--src/library/dao/playlistdao.h11
-rw-r--r--src/library/dlganalysis.cpp8
-rw-r--r--src/library/dlganalysis.h3
-rw-r--r--src/library/librarycontrol.cpp2
-rw-r--r--src/library/libraryview.h3
-rw-r--r--src/library/recording/dlgrecording.cpp8
-rw-r--r--src/library/recording/dlgrecording.h3
8 files changed, 66 insertions, 19 deletions
diff --git a/src/library/dao/playlistdao.cpp b/src/library/dao/playlistdao.cpp
index 50aa06c9c8..f3dc6ed6b7 100644
--- a/src/library/dao/playlistdao.cpp
+++ b/src/library/dao/playlistdao.cpp
@@ -246,6 +246,25 @@ bool PlaylistDAO::isPlaylistLocked(const int playlistId) const {
return false;
}
+bool PlaylistDAO::clearPlaylist(const int playlistId) {
+ ScopedTransaction transaction(m_database);
+ QSqlQuery query(m_database);
+ query.prepare("DELETE FROM PlaylistTracks WHERE playlist_id = :id");
+ query.bindValue(":id", playlistId);
+ if (!query.exec()) {
+ LOG_FAILED_QUERY(query);
+ return false;
+ }
+ transaction.commit();
+ emit(changed(playlistId));
+ return true;
+}
+
+bool PlaylistDAO::replaceTracksInPlaylist(const QList<TrackId>& trackIds, const int playlistId) {
+ return clearPlaylist(playlistId)
+ && appendTracksToPlaylist(trackIds, playlistId);
+}
+
bool PlaylistDAO::appendTracksToPlaylist(const QList<TrackId>& trackIds, const int playlistId) {
// qDebug() << "PlaylistDAO::appendTracksToPlaylist"
// << QThread::currentThread() << m_database.connectionName();
@@ -1011,21 +1030,29 @@ void PlaylistDAO::setAutoDJProcessor(AutoDJProcessor* pAutoDJProcessor) {
m_pAutoDJProcessor = pAutoDJProcessor;
}
-void PlaylistDAO::sendToAutoDJ(const QList<TrackId>& trackIds, bool bTop) {
+void PlaylistDAO::sendToAutoDJ(const QList<TrackId>& trackIds, AutoDJSendLoc loc) {
int iAutoDJPlaylistId = getPlaylistIdFromName(AUTODJ_TABLE);
if (iAutoDJPlaylistId == -1) {
return;
}
- if (bTop) {
- int position = 1;
- if (m_pAutoDJProcessor && m_pAutoDJProcessor->nextTrackLoaded()) {
- // Load track to position two because position one is
- // already loaded to the player
- position = 2;
+
+ switch (loc) {
+ case AutoDJSendLoc::TOP: {
+ int position = 1;
+ if (m_pAutoDJProcessor && m_pAutoDJProcessor->nextTrackLoaded()) {
+ // Load track to position two because position one is
+ // already loaded to the player
+ position = 2;
+ }
+ insertTracksIntoPlaylist(trackIds, iAutoDJPlaylistId, position);
+ break;
}
- insertTracksIntoPlaylist(trackIds, iAutoDJPlaylistId, position);
- } else {
- appendTracksToPlaylist(trackIds, iAutoDJPlaylistId);
+ case AutoDJSendLoc::BOTTOM:
+ appendTracksToPlaylist(trackIds, iAutoDJPlaylistId);
+ break;
+ case AutoDJSendLoc::REPLACE:
+ replaceTracksInPlaylist(trackIds, iAutoDJPlaylistId);
+ break;
}
}
diff --git a/src/library/dao/playlistdao.h b/src/library/dao/playlistdao.h
index dd5a221493..caeb014f6d 100644
--- a/src/library/dao/playlistdao.h
+++ b/src/library/dao/playlistdao.h
@@ -40,6 +40,12 @@ class PlaylistDAO : public QObject, public virtual DAO {
PLHT_UNKNOWN = -1
};
+ enum class AutoDJSendLoc {
+ TOP,
+ BOTTOM,
+ REPLACE,
+ };
+
PlaylistDAO(QSqlDatabase& database);
virtual ~PlaylistDAO();
@@ -57,6 +63,8 @@ class PlaylistDAO : public QObject, public virtual DAO {
bool setPlaylistLocked(const int playlistId, const bool locked);
// Find out the state of a playlist lock
bool isPlaylistLocked(const int playlistId) const;
+ // Replace all tracks in a playlist by a new list of tracks
+ bool replaceTracksInPlaylist(const QList<TrackId>& trackIds, const int playlistId);
// Append a list of tracks to a playlist
bool appendTracksToPlaylist(const QList<TrackId>& trackIds, const int playlistId);
// Append a track to a playlist
@@ -108,7 +116,7 @@ class PlaylistDAO : public QObject, public virtual DAO {
void getPlaylistsTrackIsIn(TrackId trackId, QSet<int>* playlistSet) const;
void setAutoDJProcessor(AutoDJProcessor* pAutoDJProcessor);
- void sendToAutoDJ(const QList<TrackId>& trackIds, bool bTop);
+ void sendToAutoDJ(const QList<TrackId>& trackIds, AutoDJSendLoc loc);
signals:
void added(int playlistId);
@@ -120,6 +128,7 @@ class PlaylistDAO : public QObject, public virtual DAO {
void lockChanged(int playlistId);
private:
+ bool clearPlaylist(const int playlistId);
void removeTracksFromPlaylistsInner(const QStringList& idList);
void searchForDuplicateTrack(const int fromPosition,
const int toPosition,
diff --git a/src/library/dlganalysis.cpp b/src/library/dlganalysis.cpp
index 4c07e30a42..b1762357b9 100644
--- a/src/library/dlganalysis.cpp
+++ b/src/library/dlganalysis.cpp
@@ -88,15 +88,19 @@ void DlgAnalysis::loadSelectedTrackToGroup(QString group, bool play) {
m_pAnalysisLibraryTableView->loadSelectedTrackToGroup(group, play);
}
-void DlgAnalysis::slotSendToAutoDJ() {
+void DlgAnalysis::slotSendToAutoDJBottom() {
// append to auto DJ
- m_pAnalysisLibraryTableView->slotSendToAutoDJ();
+ m_pAnalysisLibraryTableView->slotSendToAutoDJBottom();
}
void DlgAnalysis::slotSendToAutoDJTop() {
m_pAnalysisLibraryTableView->slotSendToAutoDJTop();
}
+void DlgAnalysis::slotSendToAutoDJReplace() {
+ m_pAnalysisLibraryTableView->slotSendToAutoDJReplace();
+}
+
void DlgAnalysis::moveSelection(int delta) {
m_pAnalysisLibraryTableView->moveSelection(delta);
}
diff --git a/src/library/dlganalysis.h b/src/library/dlganalysis.h
index 012fadaffa..67c4a67664 100644
--- a/src/library/dlganalysis.h
+++ b/src/library/dlganalysis.h
@@ -25,8 +25,9 @@ class DlgAnalysis : public QWidget, public Ui::DlgAnalysis, public virtual Libra
bool hasFocus() const override;
void loadSelectedTrack() override;
void loadSelectedTrackToGroup(QString group, bool play) override;
- void slotSendToAutoDJ() override;
+ void slotSendToAutoDJBottom() override;
void slotSendToAutoDJTop() override;
+ void slotSendToAutoDJReplace() override;
void moveSelection(int delta) override;
inline const QString currentSearch() {
return m_pAnalysisLibraryTableModel->currentSearch();
diff --git a/src/library/librarycontrol.cpp b/src/library/librarycontrol.cpp
index 2a0c239272..d3d13e3472 100644
--- a/src/library/librarycontrol.cpp
+++ b/src/library/librarycontrol.cpp
@@ -285,7 +285,7 @@ void LibraryControl::slotAutoDjAddBottom(double v) {
if (!activeView) {
return;
}
- activeView->slotSendToAutoDJ();
+ activeView->slotSendToAutoDJBottom();
}
}
diff --git a/src/library/libraryview.h b/src/library/libraryview.h
index 1e5a5c03a2..7be3d9d1e5 100644
--- a/src/library/libraryview.h
+++ b/src/library/libraryview.h
@@ -22,8 +22,9 @@ class LibraryView {
// track. Does nothing otherwise.
virtual void loadSelectedTrack() {};
- virtual void slotSendToAutoDJ() {};
+ virtual void slotSendToAutoDJBottom() {};
virtual void slotSendToAutoDJTop() {};
+ virtual void slotSendToAutoDJReplace() {};
// If applicable, requests that the LibraryView load the selected track to
// the specified group. Does nothing otherwise.
diff --git a/src/library/recording/dlgrecording.cpp b/src/library/recording/dlgrecording.cpp
index d55326b90c..e23af25779 100644
--- a/src/library/recording/dlgrecording.cpp
+++ b/src/library/recording/dlgrecording.cpp
@@ -89,14 +89,18 @@ void DlgRecording::loadSelectedTrack() {
m_pTrackTableView->loadSelectedTrack();
}
-void DlgRecording::slotSendToAutoDJ() {
- m_pTrackTableView->slotSendToAutoDJ();
+void DlgRecording::slotSendToAutoDJBottom() {
+ m_pTrackTableView->slotSendToAutoDJBottom();
}
void DlgRecording::slotSendToAutoDJTop() {
m_pTrackTableView->slotSendToAutoDJTop();
}
+void DlgRecording::slotSendToAutoDJReplace() {
+ m_pTrackTableView->slotSendToAutoDJReplace();
+}
+
void DlgRecording::loadSelectedTrackToGroup(QString group, bool play) {
m_pTrackTableView->loadSelectedTrackToGroup(group, play);
}
diff --git a/src/library/recording/dlgrecording.h b/src/library/recording/dlgrecording.h
index caf8fd0547..56c8d9e4aa 100644
--- a/src/library/recording/dlgrecording.h
+++ b/src/library/recording/dlgrecording.h
@@ -28,8 +28,9 @@ class DlgRecording : public QWidget, public Ui::DlgRecording, public virtual Lib
void onShow() override;
bool hasFocus() const override;
void loadSelectedTrack() override;
- void slotSendToAutoDJ() override;
+ void slotSendToAutoDJBottom() override;
void slotSendToAutoDJTop() override;
+ void slotSendToAutoDJReplace() override;
void loadSelectedTrackToGroup(QString group, bool play) override;
void moveSelection(int delta) override;
inline const QString currentSearch() { return m_proxyModel.currentSearch(); }