diff options
Diffstat (limited to 'src/plugins/General/lyrics/lyricswindow.cpp')
| -rw-r--r-- | src/plugins/General/lyrics/lyricswindow.cpp | 87 |
1 files changed, 65 insertions, 22 deletions
diff --git a/src/plugins/General/lyrics/lyricswindow.cpp b/src/plugins/General/lyrics/lyricswindow.cpp index 5036bc4c8..39dee905a 100644 --- a/src/plugins/General/lyrics/lyricswindow.cpp +++ b/src/plugins/General/lyrics/lyricswindow.cpp @@ -23,9 +23,9 @@ #include <QNetworkReply> #include <QNetworkProxy> #include <QUrl> -#include <QRegExp> #include <QFile> #include <QDir> +#include <QSettings> #include <QCryptographicHash> #include <qmmp/qmmpsettings.h> #include <qmmp/qmmp.h> @@ -38,10 +38,14 @@ LyricsWindow::LyricsWindow(const TrackInfo *info, QWidget *parent) setWindowFlags(Qt::Dialog); setAttribute(Qt::WA_DeleteOnClose); setAttribute(Qt::WA_QuitOnClose, false); - m_info = *info; m_cachePath = Qmmp::configDir() + "/lyrics/"; - //m_ui.artistLineEdit->setText(info); - //m_ui.titleLineEdit->setText(title); + m_ui.editWidget->setVisible(false); + m_ui.titleLineEdit->setText(info->value(Qmmp::TITLE)); + m_ui.artistLineEdit->setText(info->value(Qmmp::ARTIST)); + m_ui.albumLineEdit->setText(info->value(Qmmp::ALBUM)); + m_ui.trackSpinBox->setValue(info->value(Qmmp::TRACK).toInt()); + m_ui.yearSpinBox->setValue(info->value(Qmmp::YEAR).toInt()); + m_http = new QNetworkAccessManager(this); //load global proxy settings QmmpSettings *gs = QmmpSettings::instance(); @@ -62,6 +66,9 @@ LyricsWindow::LyricsWindow(const TrackInfo *info, QWidget *parent) if(!m_parser.load(":/ultimate_providers.xml")) qWarning("LyricsWindow: unable to load ultimate_providers.xml"); + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + m_enabledProviders = settings.value("Lyrics/enabled_providers", m_parser.defaultProviders()).toStringList(); + QDir cacheDir(m_cachePath); if(!cacheDir.exists()) { @@ -69,10 +76,9 @@ LyricsWindow::LyricsWindow(const TrackInfo *info, QWidget *parent) qWarning("LyricsWindow: unable to create cache directory"); } if(!loadFromCache()) - on_searchPushButton_clicked(); + on_refreshButton_clicked(); } - LyricsWindow::~LyricsWindow() { } @@ -81,20 +87,34 @@ void LyricsWindow::onRequestFinished(QNetworkReply *reply) { QString name = m_tasks.take(reply); QVariant redirectTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + int code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - if(reply->error() == QNetworkReply::NoError && reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200) + if(reply->error() == QNetworkReply::NoError && code == 200) { QByteArray data = reply->readAll(); LyricsProvider *provider = m_parser.provider(name); if(provider) { QString content = provider->format(data, m_info); - qDebug() << content; - if(!content.isEmpty()) + + if(content.startsWith("http") || content.startsWith("https")) { - m_ui.textBrowser->append(QString("<b>%1</b>").arg(provider->name())); - m_ui.textBrowser->append(content); - m_ui.textBrowser->append("<br>-------------------------------------<br>"); + QNetworkRequest request; + request.setUrl(content); + request.setRawHeader("User-Agent", QString("qmmp/%1").arg(Qmmp::strVersion()).toLatin1()); + m_tasks.insert(m_http->get(request), provider->name()); + provider->skipRules(true); + } + else if(!content.isEmpty()) + { + content.prepend(tr("<h2>%1 - %2</h2>").arg(m_info.value(Qmmp::ARTIST)).arg(m_info.value(Qmmp::TITLE))); + m_ui.providerComboBox->addItem(name, content); + if(m_ui.providerComboBox->count() == 1) + { + m_ui.providerComboBox->setCurrentIndex(0); + m_ui.textBrowser->setHtml(content); + saveToCache(content); + } } } } @@ -102,6 +122,11 @@ void LyricsWindow::onRequestFinished(QNetworkReply *reply) { m_tasks.insert(m_http->get(QNetworkRequest(redirectTarget.toUrl())), name); } + else if(m_tasks.isEmpty() && m_ui.providerComboBox->count() == 0) + { + m_ui.textBrowser->setText(tr("Error: %1 - %2").arg(code).arg(reply->errorString())); + qWarning() << "error:" << reply->errorString(); + } else { qWarning() << "error:" << reply->errorString(); @@ -110,24 +135,42 @@ void LyricsWindow::onRequestFinished(QNetworkReply *reply) reply->deleteLater(); } -void LyricsWindow::on_searchPushButton_clicked() +void LyricsWindow::on_refreshButton_clicked() { - m_ui.stateLabel->setText(tr("Receiving")); + m_ui.textBrowser->setHtml(QString("<b>%1</b>").arg(tr("Receiving"))); + m_ui.providerComboBox->clear(); + + m_info.clear(); + m_info.setValue(Qmmp::TITLE, m_ui.titleLineEdit->text()); + m_info.setValue(Qmmp::ARTIST, m_ui.artistLineEdit->text()); + m_info.setValue(Qmmp::ALBUM, m_ui.albumLineEdit->text()); + m_info.setValue(Qmmp::TRACK, m_ui.trackSpinBox->value()); + m_info.setValue(Qmmp::YEAR, m_ui.yearSpinBox->value()); for(LyricsProvider *provider : m_parser.providers()) { - //if(provider->name() == "lyrics.wikia.com") + if(m_enabledProviders.contains(provider->name())) { - QString url = provider->getUrl(m_info); - qDebug() << provider->name() << url; - 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 url = provider->getUrl(m_info); + 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()); + provider->skipRules(false); } } } +void LyricsWindow::on_editButton_clicked(bool checked) +{ + m_ui.editWidget->setVisible(checked); +} + +void LyricsWindow::on_providerComboBox_activated(int index) +{ + m_ui.textBrowser->setHtml(m_ui.providerComboBox->itemData(index).toString()); +} + QString LyricsWindow::cacheFilePath() const { QString name = m_ui.artistLineEdit->text() + "_" + m_ui.titleLineEdit->text(); @@ -149,7 +192,7 @@ bool LyricsWindow::loadFromCache() } m_ui.textBrowser->setHtml(QString::fromUtf8(file.readAll())); - m_ui.stateLabel->setText(tr("Done")); + m_ui.providerComboBox->addItem(tr("cache")); return true; } |
