![]() |
Mixxx
|
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 }