Mixxx

/home/maxime/Projets/Mixxx/1.10/mixxx/src/library/rhythmbox/rhythmboxtrackmodel.cpp

Go to the documentation of this file.
00001 #include <QtCore>
00002 #include <QtGui>
00003 #include <QtSql>
00004 
00005 #include "library/trackcollection.h"
00006 #include "library/rhythmbox/rhythmboxtrackmodel.h"
00007 #include "track/beatfactory.h"
00008 #include "track/beats.h"
00009 
00010 RhythmboxTrackModel::RhythmboxTrackModel(QObject* parent,
00011                                    TrackCollection* pTrackCollection)
00012         : BaseSqlTableModel(parent, pTrackCollection,
00013                             pTrackCollection->getDatabase(),
00014                             "mixxx.db.model.rhythmbox"),
00015           m_pTrackCollection(pTrackCollection),
00016           m_database(m_pTrackCollection->getDatabase()) {
00017     connect(this, SIGNAL(doSearch(const QString&)), this, SLOT(slotSearch(const QString&)));
00018 
00019     QStringList columns;
00020     columns << "id";
00021     setTable("rhythmbox_library", columns[0], columns,
00022              m_pTrackCollection->getTrackSource("rhythmbox"));
00023     setDefaultSort(fieldIndex("artist"), Qt::AscendingOrder);
00024     initHeaderData();
00025 }
00026 
00027 RhythmboxTrackModel::~RhythmboxTrackModel() {
00028 }
00029 
00030 TrackPointer RhythmboxTrackModel::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 RhythmboxTrackModel::search(const QString& searchText) {
00083     // qDebug() << "RhythmboxTrackModel::search()" << searchText
00084     //          << QThread::currentThread();
00085     emit(doSearch(searchText));
00086 }
00087 
00088 void RhythmboxTrackModel::slotSearch(const QString& searchText) {
00089     BaseSqlTableModel::search(searchText);
00090 }
00091 
00092 bool RhythmboxTrackModel::isColumnInternal(int column) {
00093     if (column == fieldIndex(LIBRARYTABLE_ID)) {
00094         return true;
00095     }
00096     return false;
00097 }
00098 
00099 Qt::ItemFlags RhythmboxTrackModel::flags(const QModelIndex &index) const {
00100     return readOnlyFlags(index);
00101 }
00102 
00103 bool RhythmboxTrackModel::isColumnHiddenByDefault(int column) {
00104     Q_UNUSED(column);
00105     return false;
00106 }
00107 
00108 TrackModel::CapabilitiesFlags RhythmboxTrackModel::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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines