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