aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General/lyrics/lyricsprovider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/General/lyrics/lyricsprovider.cpp')
-rw-r--r--src/plugins/General/lyrics/lyricsprovider.cpp55
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;
+}