5
#include "library/trackcollection.h"
6
#include "library/itunes/itunesplaylistmodel.h"
7
#include "track/beatfactory.h"
8
#include "track/beats.h"
10
ITunesPlaylistModel::ITunesPlaylistModel(QObject* parent,
11
TrackCollection* pTrackCollection)
12
: BaseSqlTableModel(parent, pTrackCollection,
13
pTrackCollection->getDatabase(),
14
"mixxx.db.model.itunes_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
ITunesPlaylistModel::~ITunesPlaylistModel() {
24
TrackPointer ITunesPlaylistModel::getTrack(const QModelIndex& index) const
26
QString artist = index.sibling(
27
index.row(), fieldIndex("artist")).data().toString();
28
QString title = index.sibling(
29
index.row(), fieldIndex("title")).data().toString();
30
QString album = index.sibling(
31
index.row(), fieldIndex("album")).data().toString();
32
QString year = index.sibling(
33
index.row(), fieldIndex("year")).data().toString();
34
QString genre = index.sibling(
35
index.row(), fieldIndex("genre")).data().toString();
36
float bpm = index.sibling(
37
index.row(), fieldIndex("bpm")).data().toString().toFloat();
38
QString location = index.sibling(
39
index.row(), fieldIndex("location")).data().toString();
41
if (location.isEmpty()) {
43
return TrackPointer();
46
TrackDAO& track_dao = m_pTrackCollection->getTrackDAO();
47
int track_id = track_dao.getTrackId(location);
48
bool track_already_in_library = track_id >= 0;
50
// Add Track to library
51
track_id = track_dao.addTrack(location, true);
57
// Add Track to library failed, create a transient TrackInfoObject
58
pTrack = TrackPointer(new TrackInfoObject(location), &QObject::deleteLater);
60
pTrack = track_dao.getTrack(track_id);
63
// If this track was not in the Mixxx library it is now added and will be
64
// saved with the metadata from iTunes. If it was already in the library
65
// then we do not touch it so that we do not over-write the user's metadata.
66
if (!track_already_in_library) {
67
pTrack->setArtist(artist);
68
pTrack->setTitle(title);
69
pTrack->setAlbum(album);
70
pTrack->setYear(year);
71
pTrack->setGenre(genre);
77
void ITunesPlaylistModel::search(const QString& searchText) {
78
// qDebug() << "ITunesPlaylistModel::search()" << searchText
79
// << QThread::currentThread();
80
emit(doSearch(searchText));
83
void ITunesPlaylistModel::slotSearch(const QString& searchText) {
84
BaseSqlTableModel::search(searchText);
87
bool ITunesPlaylistModel::isColumnInternal(int column) {
88
if (column == fieldIndex("track_id")) {
94
Qt::ItemFlags ITunesPlaylistModel::flags(const QModelIndex &index) const {
95
return readOnlyFlags(index);
98
void ITunesPlaylistModel::setPlaylist(QString playlist_path) {
100
QSqlQuery finder_query(m_database);
101
finder_query.prepare("SELECT id from itunes_playlists where name=:name");
102
finder_query.bindValue(":name", playlist_path);
104
if (!finder_query.exec()) {
105
qDebug() << "SQL Error in ITunesPlaylistModel.cpp: line" << __LINE__
106
<< " " << finder_query.lastError();
110
while (finder_query.next()) {
111
playlistId = finder_query.value(
112
finder_query.record().indexOf("id")).toInt();
115
QString playlistID = "ITunesPlaylist_" + QString("%1").arg(playlistId);
116
// Escape the playlist name
117
QSqlDriver* driver = m_pTrackCollection->getDatabase().driver();
118
QSqlField playlistNameField("name", QVariant::String);
119
playlistNameField.setValue(playlistID);
122
columns << "track_id";
123
columns << "position";
125
QSqlQuery query(m_database);
126
QString queryString = QString(
127
"CREATE TEMPORARY VIEW IF NOT EXISTS %1 AS "
128
"SELECT %2 FROM %3 WHERE playlist_id = %4")
129
.arg(driver->formatValue(playlistNameField),
131
"itunes_playlist_tracks",
132
QString::number(playlistId));
133
query.prepare(queryString);
136
qDebug() << "Error creating temporary view for itunes playlists."
137
<< "ITunesPlaylistModel --> line: " << __LINE__
138
<< query.lastError();
139
qDebug() << "Executed Query: " << query.executedQuery();
143
setTable(playlistID, columns[0], columns,
144
m_pTrackCollection->getTrackSource("itunes"));
145
setDefaultSort(fieldIndex("position"), Qt::AscendingOrder);
150
bool ITunesPlaylistModel::isColumnHiddenByDefault(int column) {
155
TrackModel::CapabilitiesFlags ITunesPlaylistModel::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;