diff --git a/autotests/filescannertest.cpp b/autotests/filescannertest.cpp --- a/autotests/filescannertest.cpp +++ b/autotests/filescannertest.cpp @@ -40,21 +40,21 @@ } QList mTestTracksForDirectory = { - createTrackUrl(QStringLiteral("/artist1/album1/not_existing.ogg")), - createTrackUrl(QStringLiteral("/artist1/album2/not_existing.ogg")), - createTrackUrl(QStringLiteral("/artist1/album3/not_existing.ogg")), - createTrackUrl(QStringLiteral("/artist2/album1/not_existing.ogg")), - createTrackUrl(QStringLiteral("/artist2/album2/not_existing.ogg")), - createTrackUrl(QStringLiteral("/artist2/album3/not_existing.ogg")), - createTrackUrl(QStringLiteral("/artist3/album1/not_existing.ogg")), - createTrackUrl(QStringLiteral("/artist3/album2/not_existing.ogg")), - createTrackUrl(QStringLiteral("/artist3/album3/not_existing.ogg")), + createTrackUrl(QStringLiteral("/artist1/album1/not_existing.ogg")), + createTrackUrl(QStringLiteral("/artist1/album2/not_existing.ogg")), + createTrackUrl(QStringLiteral("/artist1/album3/not_existing.ogg")), + createTrackUrl(QStringLiteral("/artist2/album1/not_existing.ogg")), + createTrackUrl(QStringLiteral("/artist2/album2/not_existing.ogg")), + createTrackUrl(QStringLiteral("/artist2/album3/not_existing.ogg")), + createTrackUrl(QStringLiteral("/artist3/album1/not_existing.ogg")), + createTrackUrl(QStringLiteral("/artist3/album2/not_existing.ogg")), + createTrackUrl(QStringLiteral("/artist3/album3/not_existing.ogg")), }; QList mTestTracksForMetaData = { - createTrackUrl(QStringLiteral("/artist4/test.ogg")), - createTrackUrl(QStringLiteral("/artist4/test.flac")), - createTrackUrl(QStringLiteral("/artist4/test.mp3")), + createTrackUrl(QStringLiteral("/artist4/test.ogg")), + createTrackUrl(QStringLiteral("/artist4/test.flac")), + createTrackUrl(QStringLiteral("/artist4/test.mp3")), }; private Q_SLOTS: diff --git a/src/filescanner.cpp b/src/filescanner.cpp --- a/src/filescanner.cpp +++ b/src/filescanner.cpp @@ -43,7 +43,7 @@ class FileScannerPrivate { public: - + static const QStringList constSearchStrings; #if defined KF5FileMetaData_FOUND && KF5FileMetaData_FOUND KFileMetaData::ExtractorCollection mAllExtractors; @@ -56,6 +56,15 @@ }; +const QStringList FileScannerPrivate::constSearchStrings = { + QStringLiteral("*[Cc]over*.jpg"), + QStringLiteral("*[Cc]over*.png"), + QStringLiteral("*[Ff]older*.jpg"), + QStringLiteral("*[Ff]older*.png"), + QStringLiteral("*[Ff]ront*.jpg"), + QStringLiteral("*[Ff]ront*.png") +}; + FileScanner::FileScanner() : d(std::make_unique()) { } @@ -270,23 +279,26 @@ { QFileInfo trackFilePath(localFileName); QDir trackFileDir = trackFilePath.absoluteDir(); - QString dirNamePattern = QStringLiteral("*") + trackFileDir.dirName() + QStringLiteral("*"); - QStringList filters; - filters << QStringLiteral("*[Cc]over*.jpg") << QStringLiteral("*[Cc]over*.png") - << QStringLiteral("*[Ff]older*.jpg") << QStringLiteral("*[Ff]older*.png") - << QStringLiteral("*[Ff]ront*.jpg") << QStringLiteral("*[Ff]ront*.png") - << dirNamePattern + QStringLiteral(".jpg") << dirNamePattern + QStringLiteral(".png") - << dirNamePattern.toLower() + QStringLiteral(".jpg") << dirNamePattern.toLower() + QStringLiteral(".png"); - dirNamePattern.remove(QLatin1Char(' ')); - filters << dirNamePattern + QStringLiteral(".jpg") << dirNamePattern + QStringLiteral(".png") - << dirNamePattern.toLower() + QStringLiteral(".jpg") << dirNamePattern.toLower() + QStringLiteral(".png"); - trackFileDir.setNameFilters(filters); + trackFileDir.setFilter(QDir::Files); + trackFileDir.setNameFilters(d->constSearchStrings); QFileInfoList coverFiles = trackFileDir.entryInfoList(); + if (coverFiles.isEmpty()) { + QString dirNamePattern = QStringLiteral("*") + trackFileDir.dirName() + QStringLiteral("*"); + QString dirNameNoSpaces = dirNamePattern.remove(QLatin1Char(' ')); + QStringList filters = { + dirNamePattern + QStringLiteral(".jpg"), + dirNamePattern + QStringLiteral(".png"), + + dirNameNoSpaces + QStringLiteral(".jpg"), + dirNameNoSpaces + QStringLiteral(".png") + }; + trackFileDir.setNameFilters(filters); + coverFiles = trackFileDir.entryInfoList(); + } if (coverFiles.isEmpty()) { return QUrl(); - } else { - return QUrl::fromLocalFile(coverFiles.at(0).absoluteFilePath()); } + return QUrl::fromLocalFile(coverFiles.first().absoluteFilePath()); } bool FileScanner::checkEmbeddedCoverImage(const QString &localFileName)