diff options
Diffstat (limited to 'src/plugins/General/lyrics/lyricsprovider.cpp')
| -rw-r--r-- | src/plugins/General/lyrics/lyricsprovider.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/plugins/General/lyrics/lyricsprovider.cpp b/src/plugins/General/lyrics/lyricsprovider.cpp index b37f8ccff..697ed0eab 100644 --- a/src/plugins/General/lyrics/lyricsprovider.cpp +++ b/src/plugins/General/lyrics/lyricsprovider.cpp @@ -1,3 +1,6 @@ +#include <QtDebug> +#include <QRegularExpression> +#include <qmmp/trackinfo.h> #include "lyricsprovider.h" LyricsProvider::LyricsProvider() @@ -61,3 +64,55 @@ void LyricsProvider::addInvalidIndicator(const QString &indicator) { m_invalidIndicators << indicator; } + +QString LyricsProvider::getUrl(const TrackInfo *track) const +{ + QString url = m_url; + QMap<QString, QString> replaceMap = { + { "{artist}", track->value(Qmmp::ARTIST).toLower() }, + { "{artist2}", track->value(Qmmp::ARTIST).toLower().remove(' ') }, + { "{Artist}", track->value(Qmmp::ARTIST) }, + { "{ARTIST}", track->value(Qmmp::ARTIST).toUpper() }, + { "{a}", track->value(Qmmp::ARTIST).left(1).toLower() }, + { "{album}", track->value(Qmmp::ALBUM).toLower() }, + { "{album2}", track->value(Qmmp::ALBUM).toLower().remove(' ') }, + { "{Album}", track->value(Qmmp::ALBUM) }, + { "{title}", track->value(Qmmp::TITLE).toLower() }, + { "{Title}", track->value(Qmmp::TITLE) }, + { "{Title2}", fixCase(track->value(Qmmp::TITLE)) }, + { "{track}", track->value(Qmmp::TRACK) }, + { "{year}", track->value(Qmmp::YEAR) } + }; + + QMap<QString, QString>::const_iterator it = replaceMap.constBegin(); + while(it != replaceMap.constEnd()) + { + QString value = it.value(); + + for(const UrlFormat &format: m_urlFormats) + value.replace(QRegularExpression(QString("[%1]").arg(QRegularExpression::escape(format.replace))), format.with); + + url.replace(it.key(), it.value()); + + it++; + } + + return url; +} + +QString LyricsProvider::fixCase(const QString &title) const +{ + QString out; + QString::const_iterator it = title.constBegin(); + while (it != title.constEnd()) + { + if(it == title.constBegin() || (it - 1)->isSpace()) + out.append(it->toUpper()); + else + out.append(*it); + + it++; + } + + return out; +} |
