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