Improvements in cover search
authorNikolay Tischenko <niktischenko@gmail.com>
Fri, 12 Nov 2010 16:15:43 +0000 (22:15 +0600)
committerNikolay Tischenko <niktischenko@gmail.com>
Fri, 12 Nov 2010 16:15:43 +0000 (22:15 +0600)
src/coverfinder.cpp
src/coverfinder.h
src/playerform.cpp

index 12a6996..3316f3d 100644 (file)
@@ -29,6 +29,8 @@
 #include <id3v2tag.h>
 #include <mpeg/id3v2/frames/attachedpictureframe.h>
 
+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;
+}
index 5338473..fbb600f 100644 (file)
@@ -24,6 +24,9 @@
 #include <QImage>
 #include <QFileInfo>
 #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;
index 6309dbc..e1f9df6 100644 (file)
@@ -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);
 }