From c71f46a8883a34f823a3b3330810470c893416d7 Mon Sep 17 00:00:00 2001 From: Nikolay Tischenko Date: Fri, 12 Nov 2010 22:15:43 +0600 Subject: [PATCH] Improvements in cover search --- src/coverfinder.cpp | 33 +++++++++++++++++++++++++++------ src/coverfinder.h | 8 ++++++-- src/playerform.cpp | 6 +++--- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/coverfinder.cpp b/src/coverfinder.cpp index 12a6996..3316f3d 100644 --- a/src/coverfinder.cpp +++ b/src/coverfinder.cpp @@ -29,6 +29,8 @@ #include #include +using namespace SomePlayer::DataObjects; + CoverFinder::CoverFinder(QObject *parent) : QObject(parent) { @@ -66,7 +68,6 @@ bool CoverFinder::_find(QString path) { } } } - emit found(_defaultCover); return false; } @@ -105,12 +106,32 @@ bool CoverFinder::_extract(QString file) { return false; } -void CoverFinder::find(QFileInfo filePath) { - QtConcurrent::run(this, &CoverFinder::_async_find, filePath); +void CoverFinder::find(Track track) { + QFileInfo filePath(track.source()); + QtConcurrent::run(this, &CoverFinder::_async_find, filePath, track.metadata().artist(), track.metadata().album()); } -bool CoverFinder::_async_find(QFileInfo filePath) { - if (!_find(filePath.absolutePath())) - return _extract(filePath.absoluteFilePath()); +bool CoverFinder::_async_find(QFileInfo filePath, QString artist, QString album) { + if (!_find(filePath.absolutePath()) && !_tfind(artist, album) && !_extract(filePath.absoluteFilePath())) { + emit found(_defaultCover); + return false; + } return true; } + +bool CoverFinder::_tfind(QString artist, QString album) { + QString aname = artist.toLower(); + aname.replace("/", ""); + QString aaname = aname+" - "+album; + aaname.replace("/", ""); + QString fname1 = QDir::homePath()+"/.covers/"+aaname+".jpg"; + QString fname2 = QDir::homePath()+"/.covers/"+aname+".jpg"; + if (QFile::exists(fname1)) { + emit found(QImage(fname1)); + return true; + } else if (QFile::exists(fname2)) { + emit found(QImage(fname2)); + return true; + } + return false; +} diff --git a/src/coverfinder.h b/src/coverfinder.h index 5338473..fbb600f 100644 --- a/src/coverfinder.h +++ b/src/coverfinder.h @@ -24,6 +24,9 @@ #include #include #include "someplayer.h" +#include "track.h" + +using SomePlayer::DataObjects::Track; class CoverFinder : public QObject { @@ -35,12 +38,13 @@ signals: void found(QImage); public slots: - void find(QFileInfo filePath); + void find(Track track); QImage &defaultCover(); private: - bool _async_find(QFileInfo filePath); + bool _async_find(QFileInfo filePath, QString artist, QString album); bool _find(QString path); bool _extract(QString file); + bool _tfind(QString artist, QString album); private: QImage _defaultCover; diff --git a/src/playerform.cpp b/src/playerform.cpp index 6309dbc..e1f9df6 100644 --- a/src/playerform.cpp +++ b/src/playerform.cpp @@ -108,7 +108,7 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : _cover->setMinimumSize(300, 300); _cover->setMaximumSize(300, 300); _cover->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - _cover->setScaledContents(true); +// _cover->setScaledContents(true); _cover->setPixmap(QPixmap::fromImage(_coverfinder->defaultCover())); connect(ui->libraryButton, SIGNAL(clicked()), this, SLOT(_library())); @@ -240,7 +240,7 @@ void PlayerForm::_display_track(Track track) { ui->seekSlider->setMinimum(0); ui->seekSlider->setMaximum(track.metadata().length()); _tick(0, track.metadata().length()); - _coverfinder->find(QFileInfo(track.source())); + _coverfinder->find(track); } void PlayerForm::_tick(int done, int all) { @@ -663,7 +663,7 @@ void PlayerForm::hideCountdown() { } void PlayerForm::_display_cover(QImage image) { - QPixmap p = QPixmap::fromImage(image); + QPixmap p = QPixmap::fromImage(image).scaled(_cover->width(), _cover->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation); _cover->setPixmap(p); } -- 1.7.9.5