void QSpotifyAlbumBrowse::processData() { if (m_sp_albumbrowse) { if (sp_albumbrowse_error(m_sp_albumbrowse) != SP_ERROR_OK) return; m_albumTracks = new QSpotifyTrackList; int c = sp_albumbrowse_num_tracks(m_sp_albumbrowse); for (int i = 0; i < c; ++i) { sp_track *track = sp_albumbrowse_track(m_sp_albumbrowse, i); QSpotifyTrack *qtrack = new QSpotifyTrack(track, m_albumTracks); m_albumTracks->m_tracks.append(qtrack); connect(qtrack, SIGNAL(isStarredChanged()), this, SIGNAL(isStarredChanged())); connect(QSpotifySession::instance()->user()->starredList(), SIGNAL(tracksAdded(QVector<sp_track*>)), qtrack, SLOT(onStarredListTracksAdded(QVector<sp_track*>))); connect(QSpotifySession::instance()->user()->starredList(), SIGNAL(tracksRemoved(QVector<sp_track*>)), qtrack, SLOT(onStarredListTracksRemoved(QVector<sp_track*>))); if (qtrack->artists() != m_album->artist()) m_hasMultipleArtists = true; } m_review = QString::fromUtf8(sp_albumbrowse_review(m_sp_albumbrowse)).split(QLatin1Char('\n'), QString::SkipEmptyParts); if (m_review.isEmpty()) m_review << QLatin1String("No review available"); m_busy = false; emit busyChanged(); emit tracksChanged(); } }
void QSpotifySearch::populateTracks(sp_search *search) { m_trackResults->clear(); if (m_enablePreview) m_trackResultsPreview->clear(); auto sourceList = QSpotifySession::instance()->playQueue()->m_sourceTrackList; if(sourceList == m_trackResults || sourceList == m_trackResultsPreview) { QSpotifySession::instance()->playQueue()->m_sourceTrackList = nullptr; } if (search) { int c = sp_search_num_tracks(search); for (int i = 0; i < c; ++i) { if (auto strack = sp_search_track(search, i)) { auto track = QSpotifyCacheManager::instance().getTrack(strack); if(m_enablePreview && i < m_numPreviewItems) m_trackResultsPreview->appendRow(track); m_trackResults->appendRow(track); connect(QSpotifySession::instance()->user()->starredList(), SIGNAL(tracksAdded(QVector<sp_track*>)), track.get(), SLOT(onStarredListTracksAdded(QVector<sp_track*>))); connect(QSpotifySession::instance()->user()->starredList(), SIGNAL(tracksRemoved(QVector<sp_track*>)), track.get(), SLOT(onStarredListTracksRemoved(QVector<sp_track*>))); } } } }
MixxxLibraryFeature::MixxxLibraryFeature(QObject* parent, TrackCollection* pTrackCollection, ConfigObject<ConfigValue>* pConfig) : LibraryFeature(parent), kMissingTitle(tr("Missing Tracks")), kHiddenTitle(tr("Hidden Tracks")), m_pMissingView(NULL), m_pHiddenView(NULL), m_trackDao(pTrackCollection->getTrackDAO()), m_pConfig(pConfig), m_pTrackCollection(pTrackCollection) { QStringList columns; columns << "library." + LIBRARYTABLE_ID << "library." + LIBRARYTABLE_PLAYED << "library." + LIBRARYTABLE_TIMESPLAYED //has to be up here otherwise Played and TimesPlayed are not show << "library." + LIBRARYTABLE_ARTIST << "library." + LIBRARYTABLE_TITLE << "library." + LIBRARYTABLE_ALBUM << "library." + LIBRARYTABLE_ALBUMARTIST << "library." + LIBRARYTABLE_YEAR << "library." + LIBRARYTABLE_DURATION << "library." + LIBRARYTABLE_RATING << "library." + LIBRARYTABLE_GENRE << "library." + LIBRARYTABLE_COMPOSER << "library." + LIBRARYTABLE_GROUPING << "library." + LIBRARYTABLE_FILETYPE << "library." + LIBRARYTABLE_TRACKNUMBER << "library." + LIBRARYTABLE_KEY << "library." + LIBRARYTABLE_KEY_ID << "library." + LIBRARYTABLE_DATETIMEADDED << "library." + LIBRARYTABLE_BPM << "library." + LIBRARYTABLE_BPM_LOCK << "library." + LIBRARYTABLE_BITRATE << "track_locations.location" << "track_locations.fs_deleted" << "library." + LIBRARYTABLE_COMMENT << "library." + LIBRARYTABLE_MIXXXDELETED; QSqlQuery query(pTrackCollection->getDatabase()); QString tableName = "library_cache_view"; QString queryString = QString( "CREATE TEMPORARY VIEW IF NOT EXISTS %1 AS " "SELECT %2 FROM library " "INNER JOIN track_locations ON library.location = track_locations.id") .arg(tableName, columns.join(",")); query.prepare(queryString); if (!query.exec()) { LOG_FAILED_QUERY(query); } // Strip out library. and track_locations. for (QStringList::iterator it = columns.begin(); it != columns.end(); ++it) { if (it->startsWith("library.")) { *it = it->replace("library.", ""); } else if (it->startsWith("track_locations.")) { *it = it->replace("track_locations.", ""); } } BaseTrackCache* pBaseTrackCache = new BaseTrackCache( pTrackCollection, tableName, LIBRARYTABLE_ID, columns, true); connect(&m_trackDao, SIGNAL(trackDirty(int)), pBaseTrackCache, SLOT(slotTrackDirty(int))); connect(&m_trackDao, SIGNAL(trackClean(int)), pBaseTrackCache, SLOT(slotTrackClean(int))); connect(&m_trackDao, SIGNAL(trackChanged(int)), pBaseTrackCache, SLOT(slotTrackChanged(int))); connect(&m_trackDao, SIGNAL(tracksAdded(QSet<int>)), pBaseTrackCache, SLOT(slotTracksAdded(QSet<int>))); connect(&m_trackDao, SIGNAL(tracksRemoved(QSet<int>)), pBaseTrackCache, SLOT(slotTracksRemoved(QSet<int>))); connect(&m_trackDao, SIGNAL(dbTrackAdded(TrackPointer)), pBaseTrackCache, SLOT(slotDbTrackAdded(TrackPointer))); m_pBaseTrackCache = QSharedPointer<BaseTrackCache>(pBaseTrackCache); pTrackCollection->addTrackSource(QString("default"), m_pBaseTrackCache); // These rely on the 'default' track source being present. m_pLibraryTableModel = new LibraryTableModel(this, pTrackCollection); TreeItem* pRootItem = new TreeItem(); TreeItem* pmissingChildItem = new TreeItem(kMissingTitle, kMissingTitle, this, pRootItem); TreeItem* phiddenChildItem = new TreeItem(kHiddenTitle, kHiddenTitle, this, pRootItem); pRootItem->appendChild(pmissingChildItem); pRootItem->appendChild(phiddenChildItem); m_childModel.setRootItem(pRootItem); }