From 8776f7a4ff9ba11cae65db07c5ea57d6cdb7223e Mon Sep 17 00:00:00 2001 From: Nikolay Tischenko Date: Sun, 28 Nov 2010 17:33:18 +0600 Subject: [PATCH] Improved cover search. Added priority filter --- src/coverfinder.cpp | 34 ++++++++++++++++++++++++++++++++-- src/coverfinder.h | 2 ++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/coverfinder.cpp b/src/coverfinder.cpp index 3316f3d..b6fb1df 100644 --- a/src/coverfinder.cpp +++ b/src/coverfinder.cpp @@ -38,6 +38,8 @@ CoverFinder::CoverFinder(QObject *parent) : SUFFIXES << "png" << "jpg" << "jpeg" << "bmp" << "gif"; NAMES << "cover" << "folder" << "album"; DIRS << "cover" << "folder" << ".cover" << ".folder"; + PRIOR_NAMES << "front" << "cover"; + UNPRIOR_NAMES << "disk" << "back" << "booklet" << "cd"; } bool CoverFinder::_find(QString path) { @@ -45,6 +47,7 @@ bool CoverFinder::_find(QString path) { QFileInfoList items = dir.entryInfoList(QDir::Files); QFileInfoList dirs = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::Hidden); QFileInfoList pics; + QFileInfoList appropriate_pics; foreach (QFileInfo item, items) { if (SUFFIXES.contains(item.suffix().toLower())) { pics << item; @@ -57,10 +60,37 @@ bool CoverFinder::_find(QString path) { foreach (QFileInfo item, pics) { QImage i(item.absoluteFilePath()); if (0.8 <= (i.width()*1.0/(i.height()+1.0)) <= 1.2) { - emit found(i); - return true; + appropriate_pics << item; } } + if (!appropriate_pics.isEmpty()) { + foreach (QString name, PRIOR_NAMES) { + foreach (QFileInfo item, appropriate_pics) { + if (item.baseName().toLower().contains(name)) { + emit found(QImage(item.absoluteFilePath())); + return true; + } + } + } + QFileInfoList unprior; + foreach (QString name, UNPRIOR_NAMES) { + foreach (QFileInfo item, appropriate_pics) { + if (item.baseName().toLower().contains(name)) { + unprior << item; + } + } + } + if (appropriate_pics.size() > unprior.size()) { + foreach (QFileInfo item, appropriate_pics) { + if (!unprior.contains(item)) { + emit found(QImage(item.absoluteFilePath())); + return true; + } + } + } + emit found(QImage(unprior.at(0).absoluteFilePath())); + return true; + } foreach(QFileInfo item, dirs) { if (DIRS.contains(item.fileName().toLower())) { if (_find(item.absoluteFilePath())) { diff --git a/src/coverfinder.h b/src/coverfinder.h index fbb600f..4b574f6 100644 --- a/src/coverfinder.h +++ b/src/coverfinder.h @@ -51,6 +51,8 @@ private: QStringList SUFFIXES; QStringList NAMES; QStringList DIRS; + QStringList PRIOR_NAMES; + QStringList UNPRIOR_NAMES; }; -- 1.7.9.5