diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-10-05 21:13:23 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-10-05 21:13:23 +0000 |
| commit | 6503d9953ae296d176cba5092f5259932c4c09d7 (patch) | |
| tree | 5e037808021df5e98b5f800a03a849915d972be3 | |
| parent | 1001095d12e2cd42d966d2016c34bc83ac600fd4 (diff) | |
| download | qmmp-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.cpp | 3 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyricsprovider.cpp | 55 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyricsprovider.h | 6 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyricswindow.cpp | 14 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyricswindow.h | 3 |
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(); |
