aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-10-11 20:11:33 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-10-11 20:11:33 +0000
commit877403342c0352bc52d934c787b4e6d251855727 (patch)
tree4b413a4bf46c428f5411c3d5449bc977e3aa5553
parent94f01fa367af5155ebeb7c9490909de663faedde (diff)
downloadqmmp-877403342c0352bc52d934c787b4e6d251855727.tar.gz
qmmp-877403342c0352bc52d934c787b4e6d251855727.tar.bz2
qmmp-877403342c0352bc52d934c787b4e6d251855727.zip
lyrics: fixed some parsing issues
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9089 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/plugins/General/lyrics/lyricsprovider.cpp47
-rw-r--r--src/plugins/General/lyrics/lyricswindow.cpp13
-rw-r--r--src/plugins/General/lyrics/providers/ultimate_providers.xml8
3 files changed, 54 insertions, 14 deletions
diff --git a/src/plugins/General/lyrics/lyricsprovider.cpp b/src/plugins/General/lyrics/lyricsprovider.cpp
index 58728ec88..4dae451dd 100644
--- a/src/plugins/General/lyrics/lyricsprovider.cpp
+++ b/src/plugins/General/lyrics/lyricsprovider.cpp
@@ -92,7 +92,8 @@ QString LyricsProvider::format(const QByteArray &data, const TrackInfo &track) c
if(!codec)
codec = QTextCodec::codecForName("UTF-8");
- QString content = codec->toUnicode(data);
+ const QString content = codec->toUnicode(data);
+ QString out;
for(const QString &indicator : qAsConst(m_invalidIndicators))
{
@@ -105,6 +106,7 @@ QString LyricsProvider::format(const QByteArray &data, const TrackInfo &track) c
for(const Rule &rule : qAsConst(m_extractRules))
{
Rule tmpRule = rule;
+ QString tmpContent = content;
for(Item &item : tmpRule)
{
@@ -117,15 +119,37 @@ QString LyricsProvider::format(const QByteArray &data, const TrackInfo &track) c
}
}
- content = extract(content, rule);
+ tmpContent = extract(tmpContent, tmpRule);
+
+ if(!tmpContent.isEmpty())
+ {
+ for(const Rule &excludeRule : qAsConst(m_excludeRules))
+ tmpContent = exclude(tmpContent, excludeRule);
+ }
+ if(tmpContent.isEmpty())
+ {
+ tmpContent = content;
+ }
+ else
+ {
+ out = tmpContent;
+ break;
+ }
+ }
+
+ while (out.endsWith("<br />"))
+ {
+ out.chop(6);
+ out = out.trimmed();
}
- for(const Rule &rule : qAsConst(m_excludeRules))
+ while (out.endsWith("<br>"))
{
- content = exclude(content, rule);
+ out.chop(4);
+ out = out.trimmed();
}
- return content;
+ return out;
}
const QString &LyricsProvider::name() const
@@ -177,6 +201,7 @@ QString LyricsProvider::extract(const QString &content, const Rule &rule) const
for(const Item &item : qAsConst(rule))
{
+
if(!item.url.isEmpty())
{
QString url = item.url;
@@ -186,14 +211,16 @@ QString LyricsProvider::extract(const QString &content, const Rule &rule) const
}
else if(!item.tag.isEmpty())
{
- out = out.section(item.tag, 1).section(QString("</") + item.tag.mid(1), 0, 0);
+ const QRegularExpression re("<(\\w+).*>");
+ QRegularExpressionMatch m = re.match(item.tag);
+ out = out.section(item.tag, 1).section(QString("</%1>").arg(m.captured(1)), 0, 0);
}
else
{
out = out.section(item.begin, 1).section(item.end, 0, 0);
}
}
- return out;
+ return out.trimmed();
}
QString LyricsProvider::exclude(const QString &content, const LyricsProvider::Rule &rule) const
@@ -204,12 +231,14 @@ QString LyricsProvider::exclude(const QString &content, const LyricsProvider::Ru
{
if(!item.tag.isEmpty())
{
- out = out.section(item.tag, 0, 0) + out.section(item.tag, 1).section(QString("</") + item.tag.mid(1), 1);
+ const QRegularExpression re("<(\\w+).*>");
+ QRegularExpressionMatch m = re.match(item.tag);
+ out = out.section(item.tag, 0, 0) + out.section(item.tag, 1).section(QString("</%1>").arg(m.captured(1)), 1);
}
else
{
out = out.section(item.begin, 0, 0) + out.section(item.begin, 1).section(item.end, 1);
}
}
- return out;
+ return out.trimmed();
}
diff --git a/src/plugins/General/lyrics/lyricswindow.cpp b/src/plugins/General/lyrics/lyricswindow.cpp
index d2ef7cd59..5036bc4c8 100644
--- a/src/plugins/General/lyrics/lyricswindow.cpp
+++ b/src/plugins/General/lyrics/lyricswindow.cpp
@@ -89,10 +89,12 @@ void LyricsWindow::onRequestFinished(QNetworkReply *reply)
if(provider)
{
QString content = provider->format(data, m_info);
+ qDebug() << content;
if(!content.isEmpty())
{
+ m_ui.textBrowser->append(QString("<b>%1</b>").arg(provider->name()));
m_ui.textBrowser->append(content);
- m_ui.textBrowser->append("<br><hr><br>");
+ m_ui.textBrowser->append("<br>-------------------------------------<br>");
}
}
}
@@ -100,6 +102,10 @@ void LyricsWindow::onRequestFinished(QNetworkReply *reply)
{
m_tasks.insert(m_http->get(QNetworkRequest(redirectTarget.toUrl())), name);
}
+ else
+ {
+ qWarning() << "error:" << reply->errorString();
+ }
reply->deleteLater();
}
@@ -110,12 +116,15 @@ void LyricsWindow::on_searchPushButton_clicked()
for(LyricsProvider *provider : m_parser.providers())
{
+ //if(provider->name() == "lyrics.wikia.com")
+ {
QString url = provider->getUrl(m_info);
- qDebug() << provider->name();
+ 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());
+ }
}
}
diff --git a/src/plugins/General/lyrics/providers/ultimate_providers.xml b/src/plugins/General/lyrics/providers/ultimate_providers.xml
index 98a043695..086e75f8b 100644
--- a/src/plugins/General/lyrics/providers/ultimate_providers.xml
+++ b/src/plugins/General/lyrics/providers/ultimate_providers.xml
@@ -92,10 +92,12 @@
<urlFormat replace=" _@;\/&quot;'()[]" with="%20"/>
<urlFormat replace="?" with=""/>
<extract>
- <item begin="&lt;div class=nm&gt;Movie&lt;/div&gt;:" end="&lt;/pre&gt;"/>
+ <item begin="&lt;pre&gt;&lt;font face=&quot;verdana&quot;&gt;" end="&lt;/font&gt;"/>
</extract>
<exclude>
<item begin="&lt;span class=" end="&quot;&gt;"/>
+ <item tag="&lt;script&gt;" />
+ <item tag="&lt;script&gt;" />
</exclude>
<invalidIndicator value="Couldn't find that page."/>
</provider>
@@ -133,7 +135,7 @@
<invalidIndicator value="Click to search for the Lyrics on Lyrics.com"/>
<invalidIndicator value="we do not have the lyric for this song"/>
</provider>
- <provider name="lyrics.wikia.com" title="{artist}:{title} Lyrics - " charset="utf-8" url="http://lyrics.wikia.com/{Artist}:{Title}">
+ <provider name="lyrics.wikia.com" title="{artist}:{title} Lyrics - " charset="utf-8" url="https://lyrics.wikia.com/{Artist}:{Title}">
<urlFormat replace=" _@;\&quot;" with="_"/>
<urlFormat replace="?" with="%3F"/>
<extract>
@@ -295,7 +297,7 @@
<urlFormat replace=" _@,;&amp;\/&quot;'" with="-"/>
<urlFormat replace="." with=""/>
<extract>
- <item begin="&lt;div class=&quot;songText&quot; id=&quot;songContent&quot;&gt;" end="&lt;/div&gt;"/>
+ <item begin="&lt;div class=&quot;tabCont originalText songTextDisplay&quot; id=&quot;tab-top-25534-1&quot;&gt;" end="&lt;/div&gt;"/>
</extract>
</provider>
<provider name="vagalume.com.br" title="{title} de {artist} no VAGALUME" charset="iso-8859-1" url="http://vagalume.com.br/{artist}/{title}.html">