Mixxx

/home/maxime/Projets/Mixxx/1.10/mixxx/src/library/missingtablemodel.cpp

Go to the documentation of this file.
00001 #include <QtCore>
00002 #include <QtGui>
00003 #include <QtSql>
00004 #include "library/trackcollection.h"
00005 #include "library/missingtablemodel.h"
00006 #include "library/librarytablemodel.h"
00007 
00008 #include "mixxxutils.cpp"
00009 
00010 const QString MissingTableModel::MISSINGFILTER = "mixxx_deleted=0 AND fs_deleted=1";
00011 
00012 MissingTableModel::MissingTableModel(QObject* parent,
00013                                      TrackCollection* pTrackCollection)
00014         : BaseSqlTableModel(parent, pTrackCollection,
00015                             pTrackCollection->getDatabase(),
00016                             "mixxx.db.model.missing"),
00017           m_pTrackCollection(pTrackCollection),
00018           m_trackDao(m_pTrackCollection->getTrackDAO()) {
00019 
00020     QSqlQuery query;
00021     //query.prepare("DROP VIEW " + playlistTableName);
00022     //query.exec();
00023     QString tableName("missing_songs");
00024 
00025     QStringList columns;
00026     columns << "library." + LIBRARYTABLE_ID;
00027 
00028     query.prepare("CREATE TEMPORARY VIEW IF NOT EXISTS " + tableName + " AS "
00029                   "SELECT "
00030                   + columns.join(",") +
00031                   " FROM library "
00032                   "INNER JOIN track_locations "
00033                   "ON library.location=track_locations.id "
00034                   "WHERE " + MissingTableModel::MISSINGFILTER);
00035     if (!query.exec()) {
00036         qDebug() << query.executedQuery() << query.lastError();
00037     }
00038 
00039     //Print out any SQL error, if there was one.
00040     if (query.lastError().isValid()) {
00041         qDebug() << __FILE__ << __LINE__ << query.lastError();
00042     }
00043 
00044     QStringList tableColumns;
00045     tableColumns << LIBRARYTABLE_ID;
00046     setTable(tableName, LIBRARYTABLE_ID, tableColumns,
00047              m_pTrackCollection->getTrackSource("default"));
00048 
00049     initHeaderData();
00050     setDefaultSort(fieldIndex("artist"), Qt::AscendingOrder);
00051     setSearch("");
00052 
00053     connect(this, SIGNAL(doSearch(const QString&)),
00054             this, SLOT(slotSearch(const QString&)));
00055 }
00056 
00057 MissingTableModel::~MissingTableModel() {
00058 }
00059 
00060 bool MissingTableModel::addTrack(const QModelIndex& index, QString location) {
00061     Q_UNUSED(index);
00062     Q_UNUSED(location);
00063     return false;
00064 }
00065 
00066 TrackPointer MissingTableModel::getTrack(const QModelIndex& index) const {
00067     //FIXME: use position instead of location for playlist tracks?
00068 
00069     //const int locationColumnIndex = this->fieldIndex(LIBRARYTABLE_LOCATION);
00070     //QString location = index.sibling(index.row(), locationColumnIndex).data().toString();
00071     int trackId = getTrackId(index);
00072     return m_trackDao.getTrack(trackId);
00073 }
00074 
00075 void MissingTableModel::removeTrack(const QModelIndex& index) {
00076     int trackId = getTrackId(index);
00077 
00078     m_trackDao.removeTrack(trackId);
00079 
00080     // TODO(rryan) : do not select, instead route event to BTC and notify from
00081     // there.
00082     select(); //Repopulate the data model.
00083 }
00084 
00085 void MissingTableModel::removeTracks(const QModelIndexList& indices) {
00086     QList<int> trackIds;
00087 
00088     foreach (QModelIndex index, indices) {
00089         int trackId = getTrackId(index);
00090         trackIds.append(trackId);
00091     }
00092 
00093     m_trackDao.removeTracks(trackIds);
00094 
00095     // TODO(rryan) : do not select, instead route event to BTC and notify from
00096     // there.
00097     select(); //Repopulate the data model.
00098 }
00099 
00100 void MissingTableModel::moveTrack(const QModelIndex& sourceIndex,
00101                                   const QModelIndex& destIndex) {
00102     Q_UNUSED(sourceIndex);
00103     Q_UNUSED(destIndex);
00104 }
00105 
00106 void MissingTableModel::search(const QString& searchText) {
00107     // qDebug() << "MissingTableModel::search()" << searchText
00108     //          << QThread::currentThread();
00109     emit(doSearch(searchText));
00110 }
00111 
00112 void MissingTableModel::slotSearch(const QString& searchText) {
00113     BaseSqlTableModel::search(searchText);
00114 }
00115 
00116 bool MissingTableModel::isColumnInternal(int column) {
00117     if (column == fieldIndex(LIBRARYTABLE_ID) ||
00118         column == fieldIndex(LIBRARYTABLE_PLAYED) ||
00119         column == fieldIndex(LIBRARYTABLE_MIXXXDELETED) ||
00120         column == fieldIndex(TRACKLOCATIONSTABLE_FSDELETED)) {
00121         return true;
00122     }
00123     return false;
00124 }
00125 bool MissingTableModel::isColumnHiddenByDefault(int column) {
00126     if (column == fieldIndex(LIBRARYTABLE_KEY)) {
00127         return true;
00128     }
00129     return false;
00130 }
00131 
00133 Qt::ItemFlags MissingTableModel::flags(const QModelIndex &index) const {
00134     return readOnlyFlags(index);
00135 }
00136 
00137 QItemDelegate* MissingTableModel::delegateForColumn(const int i) {
00138     Q_UNUSED(i);
00139     return NULL;
00140 }
00141 
00142 TrackModel::CapabilitiesFlags MissingTableModel::getCapabilities() const {
00143     return TRACKMODELCAPS_NONE
00144             | TRACKMODELCAPS_REMOVE;
00145 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines