5
#include "library/trackcollection.h"
6
#include "library/rhythmbox/rhythmboxplaylistmodel.h"
7
#include "track/beatfactory.h"
8
#include "track/beats.h"
10
RhythmboxPlaylistModel::RhythmboxPlaylistModel(QObject* parent,
11
TrackCollection* pTrackCollection)
12
: BaseSqlTableModel(parent, pTrackCollection,
13
pTrackCollection->getDatabase(),
14
"mixxx.db.model.rhythmbox_playlist"),
15
m_pTrackCollection(pTrackCollection),
16
m_database(m_pTrackCollection->getDatabase()) {
17
connect(this, SIGNAL(doSearch(const QString&)),
18
this, SLOT(slotSearch(const QString&)));
21
RhythmboxPlaylistModel::~RhythmboxPlaylistModel() {
24
TrackPointer RhythmboxPlaylistModel::getTrack(const QModelIndex& index) const {
25
QString artist = index.sibling(
26
index.row(), fieldIndex("artist")).data().toString();
27
QString title = index.sibling(
28
index.row(), fieldIndex("title")).data().toString();
29
QString album = index.sibling(
30
index.row(), fieldIndex("album")).data().toString();
31
QString year = index.sibling(
32
index.row(), fieldIndex("year")).data().toString();
33
QString genre = index.sibling(
34
index.row(), fieldIndex("genre")).data().toString();
35
float bpm = index.sibling(
36
index.row(), fieldIndex("bpm")).data().toString().toFloat();
37
QString location = index.sibling(
38
index.row(), fieldIndex("location")).data().toString();
40
if (location.isEmpty()) {
42
return TrackPointer();
45
TrackDAO& track_dao = m_pTrackCollection->getTrackDAO();
46
int track_id = track_dao.getTrackId(location);
47
bool track_already_in_library = track_id >= 0;
49
// Add Track to library
50
track_id = track_dao.addTrack(location, true);
56
// Add Track to library failed, create a transient TrackInfoObject
57
pTrack = TrackPointer(new TrackInfoObject(location), &QObject::deleteLater);
59
pTrack = track_dao.getTrack(track_id);
62
// If this track was not in the Mixxx library it is now added and will be
63
// saved with the metadata from iTunes. If it was already in the library
64
// then we do not touch it so that we do not over-write the user's metadata.
65
if (!track_already_in_library) {
66
pTrack->setArtist(artist);
67
pTrack->setTitle(title);
68
pTrack->setAlbum(album);
69
pTrack->setYear(year);
70
pTrack->setGenre(genre);
76
void RhythmboxPlaylistModel::search(const QString& searchText) {
77
// qDebug() << "RhythmboxPlaylistModel::search()" << searchText
78
// << QThread::currentThread();
79
emit(doSearch(searchText));
82
void RhythmboxPlaylistModel::slotSearch(const QString& searchText) {
83
BaseSqlTableModel::search(searchText);
86
bool RhythmboxPlaylistModel::isColumnInternal(int column) {
87
if (column == fieldIndex("track_id")) {
93
Qt::ItemFlags RhythmboxPlaylistModel::flags(const QModelIndex &index) const {
94
return readOnlyFlags(index);
97
void RhythmboxPlaylistModel::setPlaylist(QString playlist_path) {
99
QSqlQuery finder_query(m_database);
100
finder_query.prepare("SELECT id from rhythmbox_playlists where name=:name");
101
finder_query.bindValue(":name", playlist_path);
103
if (!finder_query.exec()) {
104
qDebug() << "SQL Error in RhythmboxPlaylistModel.cpp: line"
105
<< __LINE__ << " " << finder_query.lastError();
109
while (finder_query.next()) {
110
playlistId = finder_query.value(
111
finder_query.record().indexOf("id")).toInt();
114
QString playlistID = "Rhythmboxplaylist_" + QString("%1").arg(playlistId);
115
// Escape the playlist name
116
QSqlDriver* driver = m_pTrackCollection->getDatabase().driver();
117
QSqlField playlistNameField("name", QVariant::String);
118
playlistNameField.setValue(playlistID);
121
columns << "track_id";
122
columns << "position";
124
QSqlQuery query(m_database);
125
QString queryString = QString(
126
"CREATE TEMPORARY VIEW IF NOT EXISTS %1 AS "
127
"SELECT %2 FROM %3 WHERE playlist_id = %4")
128
.arg(driver->formatValue(playlistNameField),
130
"rhythmbox_playlist_tracks",
131
QString::number(playlistId));
132
query.prepare(queryString);
135
qDebug() << "Error creating temporary view for rhythmbox playlists. "
136
<< "RhythmboxPlaylistModel --> line: "
137
<< __LINE__ << " " << query.lastError();
138
qDebug() << "Executed Query: " << query.executedQuery();
142
setTable(playlistID, columns[0], columns,
143
m_pTrackCollection->getTrackSource("rhythmbox"));
144
setDefaultSort(fieldIndex("position"), Qt::AscendingOrder);
149
bool RhythmboxPlaylistModel::isColumnHiddenByDefault(int column) {
155
TrackModel::CapabilitiesFlags RhythmboxPlaylistModel::getCapabilities() const {
156
// See src/library/trackmodel.h for the list of TRACKMODELCAPS
157
return TRACKMODELCAPS_NONE
158
| TRACKMODELCAPS_ADDTOPLAYLIST
159
| TRACKMODELCAPS_ADDTOCRATE
160
| TRACKMODELCAPS_ADDTOAUTODJ
161
| TRACKMODELCAPS_LOADTODECK
162
| TRACKMODELCAPS_LOADTOSAMPLER;