From 2c5c30de15a3bc39da46a5f188559b72eb089a96 Mon Sep 17 00:00:00 2001 From: dmdmdm Date: Tue, 7 Jul 2020 11:56:51 -0400 Subject: [PATCH] Guess album name from folder name --- ext/libclementine-tagreader/tagreader.cpp | 18 ++++++++++++++++++ ext/libclementine-tagreader/tagreader.h | 2 ++ 2 files changed, 20 insertions(+) diff --git a/ext/libclementine-tagreader/tagreader.cpp b/ext/libclementine-tagreader/tagreader.cpp index 2888266f9..828a89322 100644 --- a/ext/libclementine-tagreader/tagreader.cpp +++ b/ext/libclementine-tagreader/tagreader.cpp @@ -169,6 +169,22 @@ void TagReader::GuessArtistAndTitle(pb::tagreader::SongMetadata *song) const { if (!title.isEmpty()) { song->set_title(title.toUtf8().data()); } } +void TagReader::GuessAlbum(const QFileInfo &info, pb::tagreader::SongMetadata *song) const { + QString album = QString::fromStdString(song->album()); + if (!album.isEmpty()) return; + const QString strDir = info.absoluteDir().absolutePath(); + if (strDir.isEmpty()) return; + const QFileInfo dir(strDir); + const QString dirBn = dir.baseName(); + if (dirBn.isEmpty()) return; + album = ReplaceUnderscoresWithSpaces(dirBn); + album = album.trimmed(); + if (album.isEmpty()) return; + const QString checkAlbum = album.toLower(); + if (checkAlbum == "various" || checkAlbum == "downloads" || checkAlbum == "music") return; + song->set_album(album.toUtf8().data()); +} + TagReader::TagReader() : factory_(new TagLibFileRefFactory), kEmbeddedCover("(embedded)") {} @@ -217,6 +233,7 @@ void TagReader::ReadFile(const QString& filename, // Try fallback -- GME filetypes GME::ReadFile(info, song); GuessArtistAndTitle(song); + GuessAlbum(info, song); return; } @@ -231,6 +248,7 @@ void TagReader::ReadFile(const QString& filename, song->set_valid(true); } GuessArtistAndTitle(song); + GuessAlbum(info, song); QString disc; QString compilation; diff --git a/ext/libclementine-tagreader/tagreader.h b/ext/libclementine-tagreader/tagreader.h index b282d4d2a..84a4302d9 100644 --- a/ext/libclementine-tagreader/tagreader.h +++ b/ext/libclementine-tagreader/tagreader.h @@ -19,6 +19,7 @@ #define TAGREADER_H #include +#include #include #include @@ -96,6 +97,7 @@ class TagReader { const pb::tagreader::SongMetadata& song) const; void GuessArtistAndTitle(pb::tagreader::SongMetadata* song) const; + void GuessAlbum(const QFileInfo &info, pb::tagreader::SongMetadata* song) const; pb::tagreader::SongMetadata_Type GuessFileType( TagLib::FileRef* fileref) const;