void MissingTableModel::setTableModel(int id) { Q_UNUSED(id); QSqlQuery query(m_database); //query.prepare("DROP VIEW " + playlistTableName); //query.exec(); QString tableName("missing_songs"); QStringList columns; columns << "library." + LIBRARYTABLE_ID; query.prepare("CREATE TEMPORARY VIEW IF NOT EXISTS " + tableName + " AS " "SELECT " + columns.join(",") + " FROM library " "INNER JOIN track_locations " "ON library.location=track_locations.id " "WHERE " + MissingTableModel::MISSINGFILTER); if (!query.exec()) { qDebug() << query.executedQuery() << query.lastError(); } //Print out any SQL error, if there was one. if (query.lastError().isValid()) { qDebug() << __FILE__ << __LINE__ << query.lastError(); } QStringList tableColumns; tableColumns << LIBRARYTABLE_ID; setTable(tableName, LIBRARYTABLE_ID, tableColumns, m_pTrackCollection->getTrackSource()); setDefaultSort(fieldIndex("artist"), Qt::AscendingOrder); setSearch(""); }
void LibraryTableModel::setTableModel(int id){ Q_UNUSED(id); QStringList columns; columns << "library."+LIBRARYTABLE_ID << "'' as preview"; QString tableName = "library_view"; QSqlQuery query(m_pTrackCollection->getDatabase()); QString queryString = "CREATE TEMPORARY VIEW IF NOT EXISTS "+tableName+" AS " "SELECT " + columns.join(", ") + " FROM library INNER JOIN track_locations " "ON library.location = track_locations.id " "WHERE (" + LibraryTableModel::DEFAULT_LIBRARYFILTER + ")"; query.prepare(queryString); if (!query.exec()) { LOG_FAILED_QUERY(query); } QStringList tableColumns; tableColumns << LIBRARYTABLE_ID; tableColumns << "preview"; setTable(tableName, LIBRARYTABLE_ID, tableColumns, m_pTrackCollection->getTrackSource("default")); // BaseSqlTabelModel will setup the header info initHeaderData(); setSearch(""); setDefaultSort(fieldIndex("artist"), Qt::AscendingOrder); }
BaseExternalTrackModel::BaseExternalTrackModel(QObject* parent, TrackCollection* pTrackCollection, const char* settingsNamespace, const QString& trackTable, QSharedPointer<BaseTrackCache> trackSource) : BaseSqlTableModel(parent, pTrackCollection, settingsNamespace) { QString viewTable = trackTable + "_view"; QStringList columns; columns << "id"; columns << "'' AS " + LIBRARYTABLE_PREVIEW; QSqlQuery query(m_database); FieldEscaper f(m_database); QString queryString = QString( "CREATE TEMPORARY VIEW IF NOT EXISTS %1 AS " "SELECT %2 FROM %3") .arg(f.escapeString(viewTable), columns.join(","), f.escapeString(trackTable)); query.prepare(queryString); if (!query.exec()) { LOG_FAILED_QUERY(query) << "Error creating temporary view for" << trackTable; return; } columns[1] = LIBRARYTABLE_PREVIEW; setTable(viewTable, columns[0], columns, trackSource); setDefaultSort(fieldIndex("artist"), Qt::AscendingOrder); }
void BaseExternalTrackModel::setTableModel(int id) { Q_UNUSED(id); QStringList columns; columns << "id"; // TODO(XXX) preview column, needs a temporary view setTable(m_trackTable, columns[0], columns, m_pTrackCollection->getTrackSource(m_trackSource)); setDefaultSort(fieldIndex("artist"), Qt::AscendingOrder); initHeaderData(); }
void BaseExternalPlaylistModel::setPlaylist(QString playlist_path) { QSqlQuery finder_query(m_database); finder_query.prepare(QString("SELECT id from %1 where name=:name").arg(m_playlistsTable)); finder_query.bindValue(":name", playlist_path); if (!finder_query.exec()) { LOG_FAILED_QUERY(finder_query) << "Error getting id for playlist:" << playlist_path; return; } // TODO(XXX): Why not last-insert id? int playlistId = -1; QSqlRecord finder_query_record = finder_query.record(); while (finder_query.next()) { playlistId = finder_query.value( finder_query_record.indexOf("id")).toInt(); } if (playlistId == -1) { qDebug() << "ERROR: Could not get the playlist ID for playlist:" << playlist_path; return; } QString playlistViewTable = QString("%1_%2").arg(m_playlistTracksTable, QString::number(playlistId)); QStringList columns; columns << "track_id"; columns << "position"; columns << "'' AS " + LIBRARYTABLE_PREVIEW; QSqlQuery query(m_database); FieldEscaper f(m_database); QString queryString = QString( "CREATE TEMPORARY VIEW IF NOT EXISTS %1 AS " "SELECT %2 FROM %3 WHERE playlist_id = %4") .arg(f.escapeString(playlistViewTable), columns.join(","), m_playlistTracksTable, QString::number(playlistId)); query.prepare(queryString); if (!query.exec()) { LOG_FAILED_QUERY(query) << "Error creating temporary view for playlist."; return; } columns[2] = LIBRARYTABLE_PREVIEW; setTable(playlistViewTable, columns[0], columns, m_trackSource); setDefaultSort(fieldIndex(ColumnCache::COLUMN_PLAYLISTTRACKSTABLE_POSITION), Qt::AscendingOrder); setSearch(""); }
void PlaylistTableModel::setTableModel(int playlistId) { //qDebug() << "PlaylistTableModel::setTableModel" << playlistId; if (m_iPlaylistId == playlistId) { qDebug() << "Already focused on playlist " << playlistId; return; } m_iPlaylistId = playlistId; QString playlistTableName = "playlist_" + QString::number(m_iPlaylistId); QSqlQuery query(m_database); FieldEscaper escaper(m_database); QStringList columns; columns << PLAYLISTTRACKSTABLE_TRACKID + " AS " + LIBRARYTABLE_ID << PLAYLISTTRACKSTABLE_POSITION << PLAYLISTTRACKSTABLE_DATETIMEADDED << "'' AS " + LIBRARYTABLE_PREVIEW // For sorting the cover art column we give LIBRARYTABLE_COVERART // the same value as the cover hash. << LIBRARYTABLE_COVERART_HASH + " AS " + LIBRARYTABLE_COVERART; // We drop files that have been explicitly deleted from mixxx // (mixxx_deleted=0) from the view. There was a bug in <= 1.9.0 where // removed files were not removed from playlists, so some users will have // libraries where this is the case. QString queryString = QString("CREATE TEMPORARY VIEW IF NOT EXISTS %1 AS " "SELECT %2 FROM PlaylistTracks " "INNER JOIN library ON library.id = PlaylistTracks.track_id " "WHERE PlaylistTracks.playlist_id = %3") .arg(escaper.escapeString(playlistTableName), columns.join(","), QString::number(playlistId)); if (!m_showAll) { queryString.append(" AND library.mixxx_deleted = 0"); } query.prepare(queryString); if (!query.exec()) { LOG_FAILED_QUERY(query); } columns[0] = LIBRARYTABLE_ID; // columns[1] = PLAYLISTTRACKSTABLE_POSITION from above // columns[2] = PLAYLISTTRACKSTABLE_DATETIMEADDED from above columns[3] = LIBRARYTABLE_PREVIEW; columns[4] = LIBRARYTABLE_COVERART; setTable(playlistTableName, LIBRARYTABLE_ID, columns, m_pTrackCollection->getTrackSource()); setSearch(""); setDefaultSort(fieldIndex(ColumnCache::COLUMN_PLAYLISTTRACKSTABLE_POSITION), Qt::AscendingOrder); setSort(defaultSortColumn(), defaultSortOrder()); connect(&m_playlistDao, SIGNAL(changed(int)), this, SLOT(playlistChanged(int))); }
BaseExternalTrackModel::BaseExternalTrackModel(QObject* parent, TrackCollection* pTrackCollection, const char* settingsNamespace, const QString& trackTable, QSharedPointer<BaseTrackCache> trackSource) : BaseSqlTableModel(parent, pTrackCollection, settingsNamespace), m_trackTable(trackTable) { QStringList columns; columns << "id"; // TODO(XXX) preview column, needs a temporary view setTable(m_trackTable, columns[0], columns, trackSource); setDefaultSort(fieldIndex("artist"), Qt::AscendingOrder); }
void CrateTableModel::setTableModel(int crateId) { //qDebug() << "CrateTableModel::setCrate()" << crateId; if (crateId == m_iCrateId) { qDebug() << "Already focused on crate " << crateId; return; } m_iCrateId = crateId; QString tableName = QString("crate_%1").arg(m_iCrateId); QSqlQuery query(m_database); FieldEscaper escaper(m_database); QString filter = "library.mixxx_deleted = 0"; QStringList columns; columns << "crate_tracks." + CRATETRACKSTABLE_TRACKID + " AS " + LIBRARYTABLE_ID << "'' AS " + LIBRARYTABLE_PREVIEW // For sorting the cover art column we give LIBRARYTABLE_COVERART // the same value as the cover hash. << LIBRARYTABLE_COVERART_HASH + " AS " + LIBRARYTABLE_COVERART; // We drop files that have been explicitly deleted from mixxx // (mixxx_deleted=0) from the view. There was a bug in <= 1.9.0 where // removed files were not removed from crates, so some users will have // libraries where this is the case. QString queryString = QString("CREATE TEMPORARY VIEW IF NOT EXISTS %1 AS " "SELECT %2 FROM %3 " "INNER JOIN library ON library.id = %3.%4 " "WHERE %3.%5 = %6 AND %7") .arg(escaper.escapeString(tableName), columns.join(","), CRATE_TRACKS_TABLE, CRATETRACKSTABLE_TRACKID, CRATETRACKSTABLE_CRATEID, QString::number(crateId), filter); query.prepare(queryString); if (!query.exec()) { LOG_FAILED_QUERY(query); } columns[0] = LIBRARYTABLE_ID; columns[1] = LIBRARYTABLE_PREVIEW; columns[2] = LIBRARYTABLE_COVERART; setTable(tableName, columns[0], columns, m_pTrackCollection->getTrackSource()); setSearch(""); setDefaultSort(fieldIndex("artist"), Qt::AscendingOrder); }
BrowseTableModel::BrowseTableModel(QObject* parent, TrackCollection* pTrackCollection, RecordingManager* pRecordingManager) : TrackModel(pTrackCollection->database(), "mixxx.db.model.browse"), QStandardItemModel(parent), m_pTrackCollection(pTrackCollection), m_pRecordingManager(pRecordingManager), m_previewDeckGroup(PlayerManager::groupForPreviewDeck(0)) { QStringList header_data; header_data.insert(COLUMN_PREVIEW, tr("Preview")); header_data.insert(COLUMN_FILENAME, tr("Filename")); header_data.insert(COLUMN_ARTIST, tr("Artist")); header_data.insert(COLUMN_TITLE, tr("Title")); header_data.insert(COLUMN_ALBUM, tr("Album")); header_data.insert(COLUMN_TRACK_NUMBER, tr("Track #")); header_data.insert(COLUMN_YEAR, tr("Year")); header_data.insert(COLUMN_GENRE, tr("Genre")); header_data.insert(COLUMN_COMPOSER, tr("Composer")); header_data.insert(COLUMN_COMMENT, tr("Comment")); header_data.insert(COLUMN_DURATION, tr("Duration")); header_data.insert(COLUMN_BPM, tr("BPM")); header_data.insert(COLUMN_KEY, tr("Key")); header_data.insert(COLUMN_TYPE, tr("Type")); header_data.insert(COLUMN_BITRATE, tr("Bitrate")); header_data.insert(COLUMN_REPLAYGAIN, tr("ReplayGain")); header_data.insert(COLUMN_LOCATION, tr("Location")); header_data.insert(COLUMN_ALBUMARTIST, tr("Album Artist")); header_data.insert(COLUMN_GROUPING, tr("Grouping")); header_data.insert(COLUMN_FILE_MODIFIED_TIME, tr("File Modified")); header_data.insert(COLUMN_FILE_CREATION_TIME, tr("File Created")); addSearchColumn(COLUMN_FILENAME); addSearchColumn(COLUMN_ARTIST); addSearchColumn(COLUMN_ALBUM); addSearchColumn(COLUMN_TITLE); addSearchColumn(COLUMN_GENRE); addSearchColumn(COLUMN_COMPOSER); addSearchColumn(COLUMN_KEY); addSearchColumn(COLUMN_COMMENT); addSearchColumn(COLUMN_ALBUMARTIST); addSearchColumn(COLUMN_GROUPING); addSearchColumn(COLUMN_FILE_MODIFIED_TIME); addSearchColumn(COLUMN_FILE_CREATION_TIME); setDefaultSort(COLUMN_FILENAME, Qt::AscendingOrder); setHorizontalHeaderLabels(header_data); // register the QList<T> as a metatype since we use QueuedConnection below qRegisterMetaType< QList< QList<QStandardItem*> > >( "QList< QList<QStandardItem*> >"); qRegisterMetaType<BrowseTableModel*>("BrowseTableModel*"); m_pBrowseThread = BrowseThread::getInstanceRef(); connect(m_pBrowseThread.data(), SIGNAL(clearModel(BrowseTableModel*)), this, SLOT(slotClear(BrowseTableModel*)), Qt::QueuedConnection); connect(m_pBrowseThread.data(), SIGNAL(rowsAppended(const QList< QList<QStandardItem*> >&, BrowseTableModel*)), this, SLOT(slotInsert(const QList< QList<QStandardItem*> >&, BrowseTableModel*)), Qt::QueuedConnection); connect(&PlayerInfo::instance(), SIGNAL(trackLoaded(QString, TrackPointer)), this, SLOT(trackLoaded(QString, TrackPointer))); trackLoaded(m_previewDeckGroup, PlayerInfo::instance().getTrackInfo(m_previewDeckGroup)); }