![]() |
Mixxx
|
00001 #include <QtCore> 00002 #include <QtGui> 00003 #include <QtSql> 00004 00005 #include "library/itunes/itunestrackmodel.h" 00006 #include "library/trackcollection.h" 00007 #include "track/beatfactory.h" 00008 #include "track/beats.h" 00009 00010 ITunesTrackModel::ITunesTrackModel(QObject* parent, 00011 TrackCollection* pTrackCollection) 00012 : BaseSqlTableModel(parent, pTrackCollection, 00013 pTrackCollection->getDatabase(), 00014 "mixxx.db.model.itunes"), 00015 m_pTrackCollection(pTrackCollection), 00016 m_database(m_pTrackCollection->getDatabase()) { 00017 connect(this, SIGNAL(doSearch(const QString&)), 00018 this, SLOT(slotSearch(const QString&))); 00019 QStringList columns; 00020 columns << "id"; 00021 setTable("itunes_library", columns[0], columns, 00022 m_pTrackCollection->getTrackSource("itunes")); 00023 setDefaultSort(fieldIndex("artist"), Qt::AscendingOrder); 00024 initHeaderData(); 00025 } 00026 00027 ITunesTrackModel::~ITunesTrackModel() { 00028 } 00029 00030 TrackPointer ITunesTrackModel::getTrack(const QModelIndex& index) const { 00031 QString artist = index.sibling(index.row(), fieldIndex("artist")).data().toString(); 00032 QString title = index.sibling(index.row(), fieldIndex("title")).data().toString(); 00033 QString album = index.sibling(index.row(), fieldIndex("album")).data().toString(); 00034 QString year = index.sibling(index.row(), fieldIndex("year")).data().toString(); 00035 QString genre = index.sibling(index.row(), fieldIndex("genre")).data().toString(); 00036 float bpm = index.sibling(index.row(), fieldIndex("bpm")).data().toString().toFloat(); 00037 00038 QString location = index.sibling(index.row(), fieldIndex("location")).data().toString(); 00039 00040 if (location.isEmpty()) { 00041 // Track is lost 00042 return TrackPointer(); 00043 } 00044 00045 TrackDAO& track_dao = m_pTrackCollection->getTrackDAO(); 00046 int track_id = track_dao.getTrackId(location); 00047 bool track_already_in_library = track_id >= 0; 00048 if (track_id < 0) { 00049 // Add Track to library 00050 track_id = track_dao.addTrack(location, true); 00051 } 00052 00053 TrackPointer pTrack; 00054 00055 if (track_id < 0) { 00056 // Add Track to library failed, create a transient TrackInfoObject 00057 pTrack = TrackPointer(new TrackInfoObject(location), &QObject::deleteLater); 00058 } else { 00059 pTrack = track_dao.getTrack(track_id); 00060 } 00061 00062 // If this track was not in the Mixxx library it is now added and will be 00063 // saved with the metadata from iTunes. If it was already in the library 00064 // then we do not touch it so that we do not over-write the user's metadata. 00065 if (!track_already_in_library) { 00066 pTrack->setArtist(artist); 00067 pTrack->setTitle(title); 00068 pTrack->setAlbum(album); 00069 pTrack->setYear(year); 00070 pTrack->setGenre(genre); 00071 pTrack->setBpm(bpm); 00072 00073 // If the track has a BPM, then give it a static beatgrid. 00074 if (bpm > 0) { 00075 BeatsPointer pBeats = BeatFactory::makeBeatGrid(pTrack, bpm, 0); 00076 pTrack->setBeats(pBeats); 00077 } 00078 } 00079 return pTrack; 00080 } 00081 00082 void ITunesTrackModel::search(const QString& searchText) { 00083 // qDebug() << "ITunesTrackModel::search()" << searchText 00084 // << QThread::currentThread(); 00085 emit(doSearch(searchText)); 00086 } 00087 00088 void ITunesTrackModel::slotSearch(const QString& searchText) { 00089 BaseSqlTableModel::search(searchText); 00090 } 00091 00092 bool ITunesTrackModel::isColumnInternal(int column) { 00093 if (column == fieldIndex(LIBRARYTABLE_ID)) { 00094 return true; 00095 } 00096 return false; 00097 } 00098 00099 Qt::ItemFlags ITunesTrackModel::flags(const QModelIndex &index) const { 00100 return readOnlyFlags(index); 00101 } 00102 00103 bool ITunesTrackModel::isColumnHiddenByDefault(int column) { 00104 Q_UNUSED(column); 00105 return false; 00106 } 00107 00108 TrackModel::CapabilitiesFlags ITunesTrackModel::getCapabilities() const { 00109 // See src/library/trackmodel.h for the list of TRACKMODELCAPS 00110 return TRACKMODELCAPS_NONE 00111 | TRACKMODELCAPS_ADDTOPLAYLIST 00112 | TRACKMODELCAPS_ADDTOCRATE 00113 | TRACKMODELCAPS_ADDTOAUTODJ 00114 | TRACKMODELCAPS_LOADTODECK 00115 | TRACKMODELCAPS_LOADTOSAMPLER; 00116 }