summaryrefslogtreecommitdiffstats
path: root/src/library/banshee
diff options
context:
space:
mode:
authorUwe Klotz <uklotz@mixxx.org>2018-11-10 23:13:11 +0100
committerUwe Klotz <uklotz@mixxx.org>2018-11-10 23:13:11 +0100
commiteb6b8095922ac53f91db583c7d996218bf93f667 (patch)
tree45259d5551dfe35dc40209d4a4f3e9f48ac4a8bf /src/library/banshee
parentfaf1a67bf1c39510b3dfa2840e98280cf38572eb (diff)
parent0f5e3b9fd640c5a83fe68527383bf0e41c1f7923 (diff)
Merge branch '2.1' of git@github.com:mixxxdj/mixxx.git into 2.2
# Conflicts: # src/library/crate/cratetablemodel.cpp # src/library/playlisttablemodel.cpp # src/library/trackmodel.h # src/widget/wtracktableview.cpp
Diffstat (limited to 'src/library/banshee')
-rw-r--r--src/library/banshee/bansheefeature.cpp1
-rw-r--r--src/library/banshee/bansheeplaylistmodel.cpp73
-rw-r--r--src/library/banshee/bansheeplaylistmodel.h4
3 files changed, 57 insertions, 21 deletions
diff --git a/src/library/banshee/bansheefeature.cpp b/src/library/banshee/bansheefeature.cpp
index e0a6b4c75a..bdb16b58e1 100644
--- a/src/library/banshee/bansheefeature.cpp
+++ b/src/library/banshee/bansheefeature.cpp
@@ -139,6 +139,7 @@ void BansheeFeature::appendTrackIdsFromRightClickIndex(QList<TrackId>* trackIds,
if (playlistID > 0) {
BansheePlaylistModel* pPlaylistModelToAdd = new BansheePlaylistModel(this, m_pTrackCollection, &m_connection);
pPlaylistModelToAdd->setTableModel(playlistID);
+ pPlaylistModelToAdd->select();
// Copy Tracks
int rows = pPlaylistModelToAdd->rowCount();
diff --git a/src/library/banshee/bansheeplaylistmodel.cpp b/src/library/banshee/bansheeplaylistmodel.cpp
index c871095bd3..d46661b965 100644
--- a/src/library/banshee/bansheeplaylistmodel.cpp
+++ b/src/library/banshee/bansheeplaylistmodel.cpp
@@ -11,6 +11,7 @@
#include "mixer/playermanager.h"
#define BANSHEE_TABLE "banshee"
+#define CLM_TRACK_ID "track_id"
#define CLM_VIEW_ORDER "position"
#define CLM_ARTIST "artist"
#define CLM_TITLE "title"
@@ -31,39 +32,50 @@
#define CLM_COMPOSER "composer"
#define CLM_PREVIEW "preview"
+namespace {
+QAtomicInt sTableNumber;
+}
+
BansheePlaylistModel::BansheePlaylistModel(QObject* pParent, TrackCollection* pTrackCollection, BansheeDbConnection* pConnection)
: BaseSqlTableModel(pParent, pTrackCollection, "mixxx.db.model.banshee_playlist"),
m_pConnection(pConnection),
m_playlistId(-1) {
+ m_tempTableName = BANSHEE_TABLE + QString::number(sTableNumber.fetchAndAddAcquire(1));
}
BansheePlaylistModel::~BansheePlaylistModel() {
+ dropTempTable();
}
-void BansheePlaylistModel::setTableModel(int playlistId) {
- //qDebug() << "BansheePlaylistModel::setTableModel" << playlistId;
- if (m_playlistId == playlistId) {
- qDebug() << "Already focused on playlist " << playlistId;
- return;
- }
-
+void BansheePlaylistModel::dropTempTable() {
if (m_playlistId >= 0) {
// Clear old playlist
m_playlistId = -1;
QSqlQuery query(m_pTrackCollection->database());
- QString strQuery("DELETE FROM " BANSHEE_TABLE);
- if (!query.exec(strQuery)) {
+ QString strQuery("DROP TABLE IF EXISTS %1");
+ if (!query.exec(strQuery.arg(m_tempTableName))) {
LOG_FAILED_QUERY(query);
}
}
+}
+
+void BansheePlaylistModel::setTableModel(int playlistId) {
+ //qDebug() << "BansheePlaylistModel::setTableModel" << this << playlistId;
+ if (m_playlistId == playlistId) {
+ qDebug() << "Already focused on playlist " << playlistId;
+ return;
+ }
+
+ dropTempTable();
if (playlistId >= 0) {
// setup new playlist
m_playlistId = playlistId;
QSqlQuery query(m_pTrackCollection->database());
- QString strQuery("CREATE TEMP TABLE IF NOT EXISTS " BANSHEE_TABLE
- " (" CLM_VIEW_ORDER " INTEGER, "
+ QString strQuery("CREATE TEMP TABLE IF NOT EXISTS %1"
+ " (" CLM_TRACK_ID " INTEGER, "
+ CLM_VIEW_ORDER " INTEGER, "
CLM_ARTIST " TEXT, "
CLM_TITLE " TEXT, "
CLM_DURATION " INTEGER, "
@@ -82,12 +94,13 @@ void BansheePlaylistModel::setTableModel(int playlistId) {
CLM_PLAYCOUNT" INTEGER, "
CLM_COMPOSER " TEXT, "
CLM_PREVIEW " TEXT)");
- if (!query.exec(strQuery)) {
+ if (!query.exec(strQuery.arg(m_tempTableName))) {
LOG_FAILED_QUERY(query);
}
- query.prepare("INSERT INTO " BANSHEE_TABLE
- " (" CLM_VIEW_ORDER ", "
+ QString strQuery2("INSERT INTO %1"
+ " (" CLM_TRACK_ID ", "
+ CLM_VIEW_ORDER ", "
CLM_ARTIST ", "
CLM_TITLE ", "
CLM_DURATION ", "
@@ -106,6 +119,7 @@ void BansheePlaylistModel::setTableModel(int playlistId) {
CLM_PLAYCOUNT ", "
CLM_COMPOSER ") "
"VALUES (:"
+ CLM_TRACK_ID ", :"
CLM_VIEW_ORDER ", :"
CLM_ARTIST ", :"
CLM_TITLE ", :"
@@ -125,6 +139,7 @@ void BansheePlaylistModel::setTableModel(int playlistId) {
CLM_PLAYCOUNT ", :"
CLM_COMPOSER ") ");
+ query.prepare(strQuery2.arg(m_tempTableName));
QList<struct BansheeDbConnection::PlaylistEntry> list =
m_pConnection->getPlaylistEntries(playlistId);
@@ -133,6 +148,9 @@ void BansheePlaylistModel::setTableModel(int playlistId) {
beginInsertRows(QModelIndex(), 0, list.size() - 1);
foreach (struct BansheeDbConnection::PlaylistEntry entry, list) {
+ query.bindValue(":" CLM_TRACK_ID, entry.trackId);
+ // Note: entry.viewOrder is 0 for all tracks if they have
+ // never been sorted by the user
query.bindValue(":" CLM_VIEW_ORDER, entry.viewOrder + 1);
query.bindValue(":" CLM_ARTIST, entry.pArtist->name);
query.bindValue(":" CLM_TITLE, entry.pTrack->title);
@@ -165,11 +183,14 @@ void BansheePlaylistModel::setTableModel(int playlistId) {
}
QStringList tableColumns;
- tableColumns << CLM_VIEW_ORDER // 0
- << CLM_PREVIEW;
+ tableColumns
+ << CLM_TRACK_ID // 0
+ << CLM_VIEW_ORDER
+ << CLM_PREVIEW; // 3
QStringList trackSourceColumns;
- trackSourceColumns << CLM_VIEW_ORDER // 0
+ trackSourceColumns
+ << CLM_TRACK_ID // 0
<< CLM_ARTIST
<< CLM_TITLE
<< CLM_DURATION
@@ -189,10 +210,10 @@ void BansheePlaylistModel::setTableModel(int playlistId) {
<< CLM_COMPOSER;
QSharedPointer<BaseTrackCache> trackSource(
- new BaseTrackCache(m_pTrackCollection, BANSHEE_TABLE, CLM_VIEW_ORDER,
+ new BaseTrackCache(m_pTrackCollection, m_tempTableName, CLM_TRACK_ID,
trackSourceColumns, false));
- setTable(BANSHEE_TABLE, CLM_VIEW_ORDER, tableColumns, trackSource);
+ setTable(m_tempTableName, CLM_TRACK_ID, tableColumns, trackSource);
setSearch("");
setDefaultSort(fieldIndex(PLAYLISTTRACKSTABLE_POSITION), Qt::AscendingOrder);
setSort(defaultSortColumn(), defaultSortOrder());
@@ -327,6 +348,15 @@ TrackPointer BansheePlaylistModel::getTrack(const QModelIndex& index) const {
return pTrack;
}
+TrackId BansheePlaylistModel::getTrackId(const QModelIndex& index) const {
+ const auto track = getTrack(index);
+ if (track) {
+ return track->getId();
+ } else {
+ return TrackId();
+ }
+}
+
// Gets the on-disk location of the track at the given location.
QString BansheePlaylistModel::getTrackLocation(const QModelIndex& index) const {
if (!index.isValid()) {
@@ -365,6 +395,7 @@ QString BansheePlaylistModel::getTrackLocation(const QModelIndex& index) const {
}
bool BansheePlaylistModel::isColumnInternal(int column) {
- Q_UNUSED(column);
- return false;
+ return (column == fieldIndex(ColumnCache::COLUMN_PLAYLISTTRACKSTABLE_TRACKID) ||
+ (PlayerManager::numPreviewDecks() == 0 &&
+ column == fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_PREVIEW)));
}
diff --git a/src/library/banshee/bansheeplaylistmodel.h b/src/library/banshee/bansheeplaylistmodel.h
index efda77a878..d89fc20a8a 100644
--- a/src/library/banshee/bansheeplaylistmodel.h
+++ b/src/library/banshee/bansheeplaylistmodel.h
@@ -20,6 +20,8 @@ class BansheePlaylistModel : public BaseSqlTableModel {
void setTableModel(int playlistId);
TrackPointer getTrack(const QModelIndex& index) const final;
+ TrackId getTrackId(const QModelIndex& index) const final;
+
QString getTrackLocation(const QModelIndex& index) const final;
bool isColumnInternal(int column) final;
@@ -41,9 +43,11 @@ class BansheePlaylistModel : public BaseSqlTableModel {
private:
QString getFieldString(const QModelIndex& index, const QString& fieldName) const;
QVariant getFieldVariant(const QModelIndex& index, const QString& fieldName) const;
+ void dropTempTable();
BansheeDbConnection* m_pConnection;
int m_playlistId;
+ QString m_tempTableName;
};
#endif // BANSHEEPLAYLISTMODEL_H