diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-10-08 19:17:24 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-10-08 19:17:24 +0000 |
| commit | 1812e98bf5c409c58071b223700ff2296a2d030e (patch) | |
| tree | a1518622330b39ba3c5109cedd5fdd21c1a539cd /src/plugins/General/lyrics/lyricswindow.cpp | |
| parent | 6503d9953ae296d176cba5092f5259932c4c09d7 (diff) | |
| download | qmmp-1812e98bf5c409c58071b223700ff2296a2d030e.tar.gz qmmp-1812e98bf5c409c58071b223700ff2296a2d030e.tar.bz2 qmmp-1812e98bf5c409c58071b223700ff2296a2d030e.zip | |
lyrics: request implementation
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9086 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/General/lyrics/lyricswindow.cpp')
| -rw-r--r-- | src/plugins/General/lyrics/lyricswindow.cpp | 130 |
1 files changed, 27 insertions, 103 deletions
diff --git a/src/plugins/General/lyrics/lyricswindow.cpp b/src/plugins/General/lyrics/lyricswindow.cpp index b49951a19..dd1fb54e0 100644 --- a/src/plugins/General/lyrics/lyricswindow.cpp +++ b/src/plugins/General/lyrics/lyricswindow.cpp @@ -18,6 +18,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ +#include <QtDebug> #include <QNetworkAccessManager> #include <QNetworkReply> #include <QNetworkProxy> @@ -37,7 +38,7 @@ LyricsWindow::LyricsWindow(const TrackInfo *info, QWidget *parent) setWindowFlags(Qt::Dialog); setAttribute(Qt::WA_DeleteOnClose); setAttribute(Qt::WA_QuitOnClose, false); - m_requestReply = nullptr; + m_info = *info; m_cachePath = Qmmp::configDir() + "/lyrics/"; //m_ui.artistLineEdit->setText(info); //m_ui.titleLineEdit->setText(title); @@ -56,7 +57,7 @@ LyricsWindow::LyricsWindow(const TrackInfo *info, QWidget *parent) } m_http->setProxy(proxy); } - connect(m_http, SIGNAL(finished (QNetworkReply *)), SLOT(showText(QNetworkReply *))); + connect(m_http, SIGNAL(finished (QNetworkReply *)), SLOT(onRequestFinished(QNetworkReply *))); if(!m_parser.load(":/ultimate_providers.xml")) qWarning("LyricsWindow: unable to load ultimate_providers.xml"); @@ -67,10 +68,8 @@ LyricsWindow::LyricsWindow(const TrackInfo *info, QWidget *parent) if(!cacheDir.mkpath(cacheDir.absolutePath())) qWarning("LyricsWindow: unable to create cache directory"); } - //if(!loadFromCache()) - // on_searchPushButton_clicked(); - - qDebug() << m_parser.providers().first()->getUrl(info); + if(!loadFromCache()) + on_searchPushButton_clicked(); } @@ -78,119 +77,44 @@ LyricsWindow::~LyricsWindow() { } -void LyricsWindow::showText(QNetworkReply *reply) +void LyricsWindow::onRequestFinished(QNetworkReply *reply) { - m_ui.stateLabel->setText(tr("Done")); - if (reply->error() != QNetworkReply::NoError) - { - m_ui.stateLabel->setText(tr("Error")); - m_ui.textBrowser->setText(reply->errorString()); - m_requestReply = nullptr; - reply->deleteLater(); - return; - } - QString content = QString::fromUtf8(reply->readAll().constData()); - //qDebug("=%s=",qPrintable(content)); + QString name = m_tasks.take(reply); + QVariant redirectTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); - if(m_requestReply == reply) + if(reply->error() == QNetworkReply::NoError && reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200) { - m_requestReply = nullptr; - reply->deleteLater(); - QRegExp artist_regexp("<artist>(.*)</artist>"); - artist_regexp.setMinimal(true); - QRegExp song_regexp("<song>(.*)</song>"); - song_regexp.setMinimal(true); - QRegExp lyrics_regexp("<lyrics>(.*)</lyrics>"); - lyrics_regexp.setMinimal(true); - QRegExp url_regexp("<url>(.*)</url>"); - url_regexp.setMinimal(true); - - if(artist_regexp.indexIn(content) < 0) - { - m_ui.textBrowser->setHtml("<b>" + tr("Error") + "</b>"); - return; - } - - if(artist_regexp.indexIn(content) < 0) - { - m_ui.textBrowser->setHtml("<b>" + tr("Error") + "</b>"); - return; - } - else - m_artist = artist_regexp.cap(1); - - if(song_regexp.indexIn(content) < 0) - { - m_ui.textBrowser->setHtml("<b>" + tr("Error") + "</b>"); - return; - } - else - m_title = song_regexp.cap(1); - - if(lyrics_regexp.indexIn(content) < 0) - { - m_ui.textBrowser->setHtml("<b>" + tr("Error") + "</b>"); - return; - } - else if(lyrics_regexp.cap(1) == "Not found") - { - m_ui.textBrowser->setHtml("<b>" + tr("Not found") + "</b>"); - return; - } - - if(url_regexp.indexIn(content) < 0) + QByteArray data = reply->readAll(); + LyricsProvider *provider = m_parser.provider(name); + if(provider) { - m_ui.textBrowser->setHtml("<b>" + tr("Error") + "</b>"); - return; + QString content = provider->format(data); + qDebug() << content; } - QString temp = url_regexp.cap(1).toLatin1(); - qDebug("LyricsWindow: received url = %s", qPrintable(temp)); - temp = QString("https://lyrics.fandom.com/index.php?title=%1&action=edit").arg(temp.section("/", -1)); - - QUrl url = QUrl::fromEncoded(temp.toLatin1()); - QString referer = url_regexp.cap(1); - qDebug("LyricsWindow: request url = %s", url.toEncoded().constData()); - QNetworkRequest request; - request.setUrl(url); - request.setRawHeader("Referer", referer.toLatin1()); - m_ui.stateLabel->setText(tr("Receiving")); - m_http->get(request); - return; + qDebug() << "+++++"; } - content.replace("<", "<"); - QRegExp lyrics_regexp("<lyrics>(.*)</lyrics>"); - lyrics_regexp.indexIn(content); - - QString text = "<h2>" + m_artist + " - " + m_title + "</h2>"; - QString lyrics = lyrics_regexp.cap(1); - lyrics = lyrics.trimmed(); - lyrics.replace("\n", "<br>"); - if(lyrics.isEmpty()) - m_ui.textBrowser->setHtml("<b>" + tr("Not found") + "</b>"); - else + else if(redirectTarget.isValid()) { - text += lyrics; - m_ui.textBrowser->setHtml(text); - saveToCache(text); - + m_tasks.insert(m_http->get(QNetworkRequest(redirectTarget.toUrl())), name); } + reply->deleteLater(); } void LyricsWindow::on_searchPushButton_clicked() { m_ui.stateLabel->setText(tr("Receiving")); - //qDebug() << m_parser.providers().first()->getUrl() - - /*setWindowTitle(QString(tr("Lyrics: %1 - %2")).arg(m_ui.artistLineEdit->text()) - .arg(m_ui.titleLineEdit->text())); - QNetworkRequest request; - request.setUrl(QUrl("https://lyrics.fandom.com/api.php?action=lyrics&artist=" + - m_ui.artistLineEdit->text()+"&song=" + m_ui.titleLineEdit->text() + "&fmt=xml")); - request.setRawHeader("User-Agent", QString("qmmp/%1").arg(Qmmp::strVersion()).toLatin1()); - m_requestReply = m_http->get(request);*/ + for(LyricsProvider *provider : m_parser.providers()) + { + QString url = provider->getUrl(m_info); + qDebug() << provider->name(); + QNetworkRequest request; + request.setUrl(url); + request.setRawHeader("User-Agent", QString("qmmp/%1").arg(Qmmp::strVersion()).toLatin1()); + m_tasks.insert(m_http->get(request), provider->name()); + } } QString LyricsWindow::cacheFilePath() const |
