aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-10-05 21:13:23 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-10-05 21:13:23 +0000
commit6503d9953ae296d176cba5092f5259932c4c09d7 (patch)
tree5e037808021df5e98b5f800a03a849915d972be3
parent1001095d12e2cd42d966d2016c34bc83ac600fd4 (diff)
downloadqmmp-6503d9953ae296d176cba5092f5259932c4c09d7.tar.gz
qmmp-6503d9953ae296d176cba5092f5259932c4c09d7.tar.bz2
qmmp-6503d9953ae296d176cba5092f5259932c4c09d7.zip
lyrics: added url formatter
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9085 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/plugins/General/lyrics/lyrics.cpp3
-rw-r--r--src/plugins/General/lyrics/lyricsprovider.cpp55
-rw-r--r--src/plugins/General/lyrics/lyricsprovider.h6
-rw-r--r--src/plugins/General/lyrics/lyricswindow.cpp14
-rw-r--r--src/plugins/General/lyrics/lyricswindow.h3
5 files changed, 72 insertions, 9 deletions
diff --git a/src/plugins/General/lyrics/lyrics.cpp b/src/plugins/General/lyrics/lyrics.cpp
index c57ae23bc..cf7a5c794 100644
--- a/src/plugins/General/lyrics/lyrics.cpp
+++ b/src/plugins/General/lyrics/lyrics.cpp
@@ -47,8 +47,7 @@ void Lyrics::showLyrics()
{
if (tracks.at(0)->value(Qmmp::ARTIST).isEmpty() || tracks.at(0)->value(Qmmp::TITLE).isEmpty())
return;
- LyricsWindow *w = new LyricsWindow(tracks.at(0)->value(Qmmp::ARTIST),
- tracks.at(0)->value(Qmmp::TITLE), qApp->activeWindow ());
+ LyricsWindow *w = new LyricsWindow(tracks.first(), qApp->activeWindow ());
w->show();
}
}
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;
+}
diff --git a/src/plugins/General/lyrics/lyricsprovider.h b/src/plugins/General/lyrics/lyricsprovider.h
index c54e70f46..9f0f81f9d 100644
--- a/src/plugins/General/lyrics/lyricsprovider.h
+++ b/src/plugins/General/lyrics/lyricsprovider.h
@@ -5,6 +5,9 @@
#include <QList>
#include <QPair>
+class PlayListTrack;
+class TrackInfo;
+
class LyricsProvider
{
public:
@@ -17,8 +20,11 @@ public:
void addUrlFormat(const QString &replace, const QString &with);
void addRule(const QList<QPair<QString, QString> > &args, bool exclude = false);
void addInvalidIndicator(const QString &indicator);
+ QString getUrl(const TrackInfo *track) const;
private:
+ QString fixCase(const QString &title) const;
+
QString m_name, m_title;
QString m_charser = QLatin1String("utf-8");
QString m_url;
diff --git a/src/plugins/General/lyrics/lyricswindow.cpp b/src/plugins/General/lyrics/lyricswindow.cpp
index 3e59893df..b49951a19 100644
--- a/src/plugins/General/lyrics/lyricswindow.cpp
+++ b/src/plugins/General/lyrics/lyricswindow.cpp
@@ -30,7 +30,7 @@
#include <qmmp/qmmp.h>
#include "lyricswindow.h"
-LyricsWindow::LyricsWindow(const QString &artist, const QString &title, QWidget *parent)
+LyricsWindow::LyricsWindow(const TrackInfo *info, QWidget *parent)
: QWidget(parent)
{
m_ui.setupUi(this);
@@ -39,8 +39,8 @@ LyricsWindow::LyricsWindow(const QString &artist, const QString &title, QWidget
setAttribute(Qt::WA_QuitOnClose, false);
m_requestReply = nullptr;
m_cachePath = Qmmp::configDir() + "/lyrics/";
- m_ui.artistLineEdit->setText(artist);
- m_ui.titleLineEdit->setText(title);
+ //m_ui.artistLineEdit->setText(info);
+ //m_ui.titleLineEdit->setText(title);
m_http = new QNetworkAccessManager(this);
//load global proxy settings
QmmpSettings *gs = QmmpSettings::instance();
@@ -67,8 +67,10 @@ LyricsWindow::LyricsWindow(const QString &artist, const QString &title, QWidget
if(!cacheDir.mkpath(cacheDir.absolutePath()))
qWarning("LyricsWindow: unable to create cache directory");
}
- if(!loadFromCache())
- on_searchPushButton_clicked();
+ //if(!loadFromCache())
+ // on_searchPushButton_clicked();
+
+ qDebug() << m_parser.providers().first()->getUrl(info);
}
@@ -179,7 +181,7 @@ void LyricsWindow::showText(QNetworkReply *reply)
void LyricsWindow::on_searchPushButton_clicked()
{
m_ui.stateLabel->setText(tr("Receiving"));
- qDebug() << m_parser.providers().count();
+ //qDebug() << m_parser.providers().first()->getUrl()
/*setWindowTitle(QString(tr("Lyrics: %1 - %2")).arg(m_ui.artistLineEdit->text())
diff --git a/src/plugins/General/lyrics/lyricswindow.h b/src/plugins/General/lyrics/lyricswindow.h
index 2843cc959..f9964d3c1 100644
--- a/src/plugins/General/lyrics/lyricswindow.h
+++ b/src/plugins/General/lyrics/lyricswindow.h
@@ -26,6 +26,7 @@
class QNetworkAccessManager;
class QNetworkReply;
+class TrackInfo;
/**
@author Ilya Kotov <forkotov02@ya.ru>
@@ -34,7 +35,7 @@ class LyricsWindow : public QWidget
{
Q_OBJECT
public:
- LyricsWindow(const QString &artist, const QString &title, QWidget *parent = nullptr);
+ LyricsWindow(const TrackInfo *info, QWidget *parent = nullptr);
~LyricsWindow();