void MainWindow::setupMusicsView() { QStringList headers; auto app = (Application*) qApp; headers << "Musica" << "Artista" << "Album" << "Tempo" << "Genero"; ui->musicsView->setColumnCount(5); ui->musicsView->setRowCount(app->library->count()); ui->musicsView->setHorizontalHeaderLabels(headers); // Lista todas as músicas da biblioteca. for (int i = 0; i < app->library->count(); ++i) { auto music = app->library->music(i); ui->musicsView->setItem(i, 0, new QTableWidgetItem(music.getName())); ui->musicsView->setItem(i, 1, new QTableWidgetItem(music.getArtist())); ui->musicsView->setItem(i, 2, new QTableWidgetItem(music.getAlbum())); ui->musicsView->setItem(i, 3, new QTableWidgetItem(music.getDuration().toString())); ui->musicsView->setItem(i, 4, new QTableWidgetItem(music.getGenre())); } }
HRESULT PlaybackControls::LoadFile() { mMediaObject.stop(); // Phonon::State state = mMediaObject.state(); QPixmap picture; picture = getPicture(mFile); if (!picture.isNull()) { mpParentWindow->id3Art->setPixmap(picture.scaledToHeight(128)); } QString metadata = getArtist(mFile); mpParentWindow->artistLabel->setText("Artist : " + metadata); metadata = getAlbum(mFile); mpParentWindow->albumLabel->setText("Album : " + metadata); metadata = getTitle(mFile); mpParentWindow->titleLabel->setText("Title : " + metadata); mMediaObject.setCurrentSource(mFile); QStringList list = mMediaObject.metaData(Phonon::TitleMetaData); // bool test = list.isEmpty(); mAudioOutput.setVolume(mVolume / 100.0); volumeChanged(mVolume); return 0; }
/** Redefined from MiamSortFilterProxyModel. */ bool UniqueLibraryFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { QStandardItem *item = _model->itemFromIndex(_model->index(sourceRow, 1, sourceParent)); if (!item) { return false; } bool result = false; switch (item->type()) { case Miam::IT_Artist: if (MiamSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent)) { result = true; } else { SqlDatabase db; db.open(); QSqlQuery getArtist(db); getArtist.setForwardOnly(true); getArtist.prepare("SELECT * FROM tracks WHERE title LIKE ? AND artistId = ?"); getArtist.addBindValue("%" + filterRegExp().pattern() + "%"); getArtist.addBindValue(item->data(Miam::DF_ID).toUInt()); result = getArtist.exec() && getArtist.next(); } break; case Miam::IT_Album: if (MiamSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent)) { result = true; } else if (filterRegExp().indexIn(item->data(Miam::DF_Artist).toString()) != -1) { result = true; } else { SqlDatabase db; db.open(); QSqlQuery getAlbum(db); getAlbum.setForwardOnly(true); getAlbum.prepare("SELECT * FROM tracks WHERE title LIKE ? AND albumId = ?"); getAlbum.addBindValue("%" + filterRegExp().pattern() + "%"); getAlbum.addBindValue(item->data(Miam::DF_ID).toUInt()); result = getAlbum.exec() && getAlbum.next(); } break; case Miam::IT_Disc: if (filterRegExp().indexIn(item->data(Miam::DF_Artist).toString()) != -1) { result = true; } else { SqlDatabase db; db.open(); QSqlQuery getDiscAlbum(db); getDiscAlbum.setForwardOnly(true); getDiscAlbum.prepare("SELECT * FROM tracks WHERE disc > 0 AND title LIKE ? AND albumId = ?"); getDiscAlbum.addBindValue("%" + filterRegExp().pattern() + "%"); getDiscAlbum.addBindValue(item->data(Miam::DF_ID).toUInt()); result = getDiscAlbum.exec() && getDiscAlbum.next(); } break; case Miam::IT_Track: if (MiamSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent)) { result = true; } else { result = filterRegExp().indexIn(item->data(Miam::DF_Artist).toString()) != -1 || filterRegExp().indexIn(item->data(Miam::DF_Album).toString()) != -1; } break; case Miam::IT_Separator: for (QModelIndex index : _topLevelItems.values(static_cast<SeparatorItem*>(item))) { if (filterAcceptsRow(index.row(), sourceParent)) { result = true; } } break; default: break; } return result; }
void squeezeboxHelper::anslyzeSearch(QString text,QList<SqueezeSearchAlbum> *Album,QList<SqueezeSearchTrack> *Track,QList<SqueezeSearchContributor> *Contributor) { qDebug()<<"Searching command found"; qDebug()<<text; int numberOfAlbums,count; int album1,album2,albumCount,id1,id2; QString album,id; numberOfAlbums=text.count("album_id%3A",Qt::CaseSensitive); count=0; album1=0; id1=0; albumCount=0; Album->clear(); while (albumCount<numberOfAlbums) { album1=text.indexOf("album%3A",album1+albumCount); album2=text.indexOf(" ",album1+3); id1=text.indexOf("album_id%3A",id1+albumCount); id2=text.indexOf(" ",id1+3); album=text.mid(album1,(album2-album1)); id=text.mid(id1+11,(id2-(id1+11))); album_Search.albumName=getAlbumName(album); album_Search.albumId=id; qDebug()<<"Album Name="<<album_Search.albumName; qDebug()<<"Album ID="<<album_Search.albumId; Album->append(album_Search); albumCount++; } numberOfAlbums=text.count("contributor_id%3A",Qt::CaseSensitive); count=0; album1=0; id1=0; albumCount=0; Contributor->clear(); while (albumCount<numberOfAlbums) { album1=text.indexOf("contributor%3A",album1+albumCount); album2=text.indexOf(" ",album1+3); if (album2==-1)album2=text.count(); id1=text.indexOf("contributor_id%3A",id1+albumCount); id2=text.indexOf(" ",id1+3); if (id2==-1)id2=text.count(); album=text.mid(album1,(album2-album1)); id=text.mid(id1+17,(id2-(id1+17))); contributor_Search.ContributorName=getAlbum(album,"contributor%3A"); contributor_Search.ContributorId=id; qDebug()<<"Contributor Name="<<contributor_Search.ContributorName; qDebug()<<"Contributor ID="<<contributor_Search.ContributorId; Contributor->append(contributor_Search); albumCount++; } numberOfAlbums=text.count("track_id%3A",Qt::CaseSensitive); count=0; album1=0; id1=0; albumCount=0; Track->clear(); while (albumCount<numberOfAlbums) { album1=text.indexOf("track%3A",album1+albumCount); album2=text.indexOf(" ",album1+3); if (album2==-1)album2=text.count(); id1=text.indexOf("track_id%3A",id1+albumCount); id2=text.indexOf(" ",id1+3); if (id2==-1)id2=text.count(); album=text.mid(album1,(album2-album1)); id=text.mid(id1+11,(id2-(id1+11))); track_Search.trackName=getAlbum(album,"track%3A"); track_Search.trackId=id; qDebug()<<"Track Name="<<track_Search.trackName; qDebug()<<"Track ID="<<track_Search.trackId; Track->append(track_Search); albumCount++; } }
MusicLibraryItemAlbum * MusicLibraryItemArtist::album(const Song &s, bool create) { MusicLibraryItemAlbum *albumItem=getAlbum(s.albumId()); return albumItem ? albumItem : (create ? createAlbum(s) : 0); }
void BrowseThread::populateModel() { m_path_mutex.lock(); MDir thisPath = m_path; BrowseTableModel* thisModelObserver = m_model_observer; m_path_mutex.unlock(); // Refresh the name filters in case we loaded new SoundSource plugins. QStringList nameFilters(SoundSourceProxy::getSupportedFileNamePatterns()); QDirIterator fileIt(thisPath.dir().absolutePath(), nameFilters, QDir::Files | QDir::NoDotAndDotDot); // remove all rows // This is a blocking operation // see signal/slot connection in BrowseTableModel emit(clearModel(thisModelObserver)); QList< QList<QStandardItem*> > rows; int row = 0; // Iterate over the files while (fileIt.hasNext()) { // If a user quickly jumps through the folders // the current task becomes "dirty" m_path_mutex.lock(); MDir newPath = m_path; m_path_mutex.unlock(); if (thisPath.dir() != newPath.dir()) { qDebug() << "Abort populateModel()"; return populateModel(); } QString filepath = fileIt.next(); auto pTrack = Track::newTemporary(filepath, thisPath.token()); SoundSourceProxy(pTrack).updateTrackFromSource(); QList<QStandardItem*> row_data; QStandardItem* item = new QStandardItem("0"); item->setData("0", Qt::UserRole); row_data.insert(COLUMN_PREVIEW, item); item = new QStandardItem(pTrack->getFileName()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_FILENAME, item); item = new QStandardItem(pTrack->getArtist()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_ARTIST, item); item = new QStandardItem(pTrack->getTitle()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_TITLE, item); item = new QStandardItem(pTrack->getAlbum()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_ALBUM, item); item = new QStandardItem(pTrack->getAlbumArtist()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_ALBUMARTIST, item); item = new QStandardItem(pTrack->getTrackNumber()); item->setToolTip(item->text()); item->setData(item->text().toInt(), Qt::UserRole); row_data.insert(COLUMN_TRACK_NUMBER, item); const QString year(pTrack->getYear()); item = new YearItem(year); item->setToolTip(year); // The year column is sorted according to the numeric calendar year item->setData(mixxx::TrackMetadata::parseCalendarYear(year), Qt::UserRole); row_data.insert(COLUMN_YEAR, item); item = new QStandardItem(pTrack->getGenre()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_GENRE, item); item = new QStandardItem(pTrack->getComposer()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_COMPOSER, item); item = new QStandardItem(pTrack->getGrouping()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_GROUPING, item); item = new QStandardItem(pTrack->getComment()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_COMMENT, item); QString duration = pTrack->getDurationText(mixxx::Duration::Precision::SECONDS); item = new QStandardItem(duration); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_DURATION, item); item = new QStandardItem(pTrack->getBpmText()); item->setToolTip(item->text()); item->setData(pTrack->getBpm(), Qt::UserRole); row_data.insert(COLUMN_BPM, item); item = new QStandardItem(pTrack->getKeyText()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_KEY, item); item = new QStandardItem(pTrack->getType()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_TYPE, item); item = new QStandardItem(pTrack->getBitrateText()); item->setToolTip(item->text()); item->setData(pTrack->getBitrate(), Qt::UserRole); row_data.insert(COLUMN_BITRATE, item); QString location = pTrack->getLocation(); QString nativeLocation = QDir::toNativeSeparators(location); item = new QStandardItem(nativeLocation); item->setToolTip(nativeLocation); item->setData(location, Qt::UserRole); row_data.insert(COLUMN_NATIVELOCATION, item); QDateTime modifiedTime = pTrack->getFileModifiedTime().toLocalTime(); item = new QStandardItem(modifiedTime.toString(Qt::DefaultLocaleShortDate)); item->setToolTip(item->text()); item->setData(modifiedTime, Qt::UserRole); row_data.insert(COLUMN_FILE_MODIFIED_TIME, item); QDateTime creationTime = pTrack->getFileCreationTime().toLocalTime(); item = new QStandardItem(creationTime.toString(Qt::DefaultLocaleShortDate)); item->setToolTip(item->text()); item->setData(creationTime, Qt::UserRole); row_data.insert(COLUMN_FILE_CREATION_TIME, item); const mixxx::ReplayGain replayGain(pTrack->getReplayGain()); item = new QStandardItem( mixxx::ReplayGain::ratioToString(replayGain.getRatio())); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_REPLAYGAIN, item); rows.append(row_data); ++row; // If 10 tracks have been analyzed, send it to GUI // Will limit GUI freezing if (row % 10 == 0) { // this is a blocking operation emit(rowsAppended(rows, thisModelObserver)); qDebug() << "Append " << rows.count() << " from " << filepath; rows.clear(); } // Sleep additionally for 10ms which prevents us from GUI freezes msleep(20); } emit(rowsAppended(rows, thisModelObserver)); qDebug() << "Append last " << rows.count(); }