diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-09-27 18:49:36 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-09-27 18:49:36 +0000 |
| commit | 1cb8bdcf72b15239843a23e25245def9f70c52f4 (patch) | |
| tree | d1e0bfd92329684d2c37269a94355f041e769fec /src/plugins/General/lyrics/ultimatelyricsparser.cpp | |
| parent | 3044944b998f7ef1f0bfa6862ccb8ed4d5c6e1d5 (diff) | |
| download | qmmp-1cb8bdcf72b15239843a23e25245def9f70c52f4.tar.gz qmmp-1cb8bdcf72b15239843a23e25245def9f70c52f4.tar.bz2 qmmp-1cb8bdcf72b15239843a23e25245def9f70c52f4.zip | |
prepare for ultimate lyrics plugin implementation
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9079 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/General/lyrics/ultimatelyricsparser.cpp')
| -rw-r--r-- | src/plugins/General/lyrics/ultimatelyricsparser.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/src/plugins/General/lyrics/ultimatelyricsparser.cpp b/src/plugins/General/lyrics/ultimatelyricsparser.cpp new file mode 100644 index 000000000..ca74769f6 --- /dev/null +++ b/src/plugins/General/lyrics/ultimatelyricsparser.cpp @@ -0,0 +1,110 @@ +#include <QXmlStreamReader> +#include <QFile> +#include <QtDebug> +#include "ultimatelyricsparser.h" + +UltimateLyricsParser::UltimateLyricsParser() +{ + +} + +UltimateLyricsParser::~UltimateLyricsParser() +{ + qDeleteAll(m_providers); + m_providers.clear(); +} + +bool UltimateLyricsParser::load(const QString &path) +{ + qDeleteAll(m_providers); + m_providers.clear(); + + QFile file(path); + if(!file.open(QIODevice::ReadOnly)) + { + m_errorString = file.errorString(); + return false; + } + + QXmlStreamReader reader(&file); + + QString parentElement; + QList<QPair<QString, QString> > args; + + while(!reader.atEnd()) + { + reader.readNext(); + + if(reader.isStartElement()) + { + if(reader.name() == "provider") + { + LyricsProvider *provider = new LyricsProvider; + QXmlStreamAttributes attrs = reader.attributes(); + provider->setName(attrs.value("name").toString()); + provider->setTitle(attrs.value("title").toString()); + provider->setUrl(attrs.value("url").toString()); + provider->setCharset(attrs.value("charser").toString()); + m_providers << provider; + } + else if(reader.name() == "urlFormat" && !m_providers.isEmpty()) + { + m_providers.last()->addUrlFormat(reader.attributes().value("replace").toString(), + reader.attributes().value("with").toString()); + } + else if(reader.name() == "extract" || reader.name() == "exclude") + { + parentElement = reader.name().toString(); + } + else if(reader.name() == "invalidIndicator" && !m_providers.isEmpty()) + { + m_providers.last()->addInvalidIndicator(reader.attributes().value("value").toString()); + } + else if(reader.name() == "item") + { + QXmlStreamAttributes attrs = reader.attributes(); + QString arg1, arg2; + if(attrs.hasAttribute("begin") && attrs.hasAttribute("end")) + { + arg1 = attrs.value("begin").toString(); + arg2 = attrs.value("end").toString(); + } + else if(attrs.hasAttribute("tag")) + { + arg1 = attrs.value("tag").toString(); + } + else if(attrs.hasAttribute("url")) + { + arg1 = attrs.value("url").toString(); + } + args << qMakePair(arg1, arg2); + } + } + else if(reader.isEndElement()) + { + if(reader.name() == "extract" || reader.name() == "exclude") + { + parentElement.clear(); + m_providers.last()->addRule(args, reader.name() == "exclude"); + args.clear(); + } + } + + if(reader.hasError()) + { + m_errorString = tr("%1 (line: %2)").arg(reader.errorString()).arg(reader.lineNumber()); + return false; + } + } + return true; +} + +const QString &UltimateLyricsParser::errorString() const +{ + return m_errorString; +} + +const QList<LyricsProvider *> &UltimateLyricsParser::providers() +{ + return m_providers; +} |
