diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2014-03-25 18:15:27 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2014-03-25 18:15:27 +0000 |
| commit | 7ff6e6a4fc150f055a6d459499edf18707c06c2e (patch) | |
| tree | 398f66a90396bccadef6be85a9d6b431696f68b9 /src/plugins/PlayListFormats | |
| parent | e775e0371a69bd240f1b74255f6bb43a60928fab (diff) | |
| download | qmmp-7ff6e6a4fc150f055a6d459499edf18707c06c2e.tar.gz qmmp-7ff6e6a4fc150f055a6d459499edf18707c06c2e.tar.bz2 qmmp-7ff6e6a4fc150f055a6d459499edf18707c06c2e.zip | |
xspf plugin: removed QtXML dependency
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4205 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/PlayListFormats')
| -rw-r--r-- | src/plugins/PlayListFormats/xspf/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/plugins/PlayListFormats/xspf/xspf.pro | 2 | ||||
| -rw-r--r-- | src/plugins/PlayListFormats/xspf/xspfplaylistformat.cpp | 158 | ||||
| -rw-r--r-- | src/plugins/PlayListFormats/xspf/xspfplaylistformat.h | 2 |
4 files changed, 75 insertions, 92 deletions
diff --git a/src/plugins/PlayListFormats/xspf/CMakeLists.txt b/src/plugins/PlayListFormats/xspf/CMakeLists.txt index b9ae8bd81..a0779a562 100644 --- a/src/plugins/PlayListFormats/xspf/CMakeLists.txt +++ b/src/plugins/PlayListFormats/xspf/CMakeLists.txt @@ -6,11 +6,6 @@ if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) -SET(QT_USE_QTXML TRUE) - -INCLUDE(FindQt4) -INCLUDE(${QT_USE_FILE}) - # qt plugin ADD_DEFINITIONS( -Wall ) ADD_DEFINITIONS(${QT_DEFINITIONS}) diff --git a/src/plugins/PlayListFormats/xspf/xspf.pro b/src/plugins/PlayListFormats/xspf/xspf.pro index a7ca309b5..63e064944 100644 --- a/src/plugins/PlayListFormats/xspf/xspf.pro +++ b/src/plugins/PlayListFormats/xspf/xspf.pro @@ -12,8 +12,6 @@ QMAKE_LIBDIR += ../../../../lib INCLUDEPATH += ../../../../src -QT += xml - SOURCES += xspfplaylistformat.cpp HEADERS += xspfplaylistformat.h diff --git a/src/plugins/PlayListFormats/xspf/xspfplaylistformat.cpp b/src/plugins/PlayListFormats/xspf/xspfplaylistformat.cpp index 575337839..d01eabdbe 100644 --- a/src/plugins/PlayListFormats/xspf/xspfplaylistformat.cpp +++ b/src/plugins/PlayListFormats/xspf/xspfplaylistformat.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2013 by Ilya Kotov * + * Copyright (C) 2008-2014 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -18,8 +18,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#include <QDomDocument> -#include <QDomElement> +#include <QXmlStreamReader> +#include <QXmlStreamWriter> #include <QFileInfo> #include <QUrl> #include <QtPlugin> @@ -40,36 +40,49 @@ const PlayListFormatProperties XSPFPlaylistFormat::XSPFPlaylistFormat::propertie QStringList XSPFPlaylistFormat::decode(const QString & contents) { QStringList out; - QDomDocument doc; - QString errorMsg; - int errorCol; - int errorRow; - bool ok = doc.setContent(contents, &errorMsg, &errorRow, &errorCol); + QString currentTag; + QString contents_copy = contents; - if (!ok) - qDebug("Parse Error: %s\tRow:%d\tCol%d", - qPrintable(errorMsg), errorRow, errorCol ); - - QDomElement rootElement = doc.firstChildElement("playlist"); - if (rootElement.isNull()) - qWarning("Error parsing XSPF: can't find 'playlist' element"); - - QDomElement tracklistElement = rootElement.firstChildElement("trackList"); - if (tracklistElement.isNull()) - qWarning("Error parsing XSPF: can't find 'trackList' element"); - - QDomElement child = tracklistElement.firstChildElement("track"); + //remove control symbols to avoid xml errors + for(int i = 0; i < contents_copy.size(); ++i) + { + if(contents_copy[i] <= 0x1F) + { + contents_copy.replace(i, 1, ""); + i--; + } + } - while (!child.isNull()) + QXmlStreamReader xml(contents_copy); + while(!xml.atEnd()) { - QUrl url (child.firstChildElement("location").text()); - if (url.scheme() == "file") //remove scheme for local files only - out << QUrl::fromPercentEncoding(url.toString(QUrl::RemoveScheme).toAscii()); - else - out << url.toString(); - child = child.nextSiblingElement(); + xml.readNext(); + if (xml.isStartElement()) + { + currentTag = xml.name().toString(); + + } + else if (xml.isCharacters() && !xml.isWhitespace()) + { + if (currentTag == "location") + { + + QUrl url(xml.text().toString()); + if (url.scheme() == "file") //remove scheme for local files only + out << QUrl::fromPercentEncoding(url.toString(QUrl::RemoveScheme).toAscii()); + else + out << url.toString(); + } + else + xml.skipCurrentElement(); + } } + if(xml.hasError()) + { + qDebug("XSPFPlaylistFormat: parse error: %s (row:%lld, col:%lld", + qPrintable(xml.errorString()), xml.lineNumber(), xml.columnNumber()); + } return out; } @@ -77,72 +90,49 @@ QStringList XSPFPlaylistFormat::decode(const QString & contents) QString XSPFPlaylistFormat::encode(const QList<PlayListTrack*> & files) { - QDomDocument doc; - QDomElement root = doc.createElement("playlist"); - root.setAttribute("version",QString("1")); - root.setAttribute("xmlns",QString("http://xspf.org/ns/0/")); - - QDomElement creator = doc.createElement("creator"); - QDomText text = doc.createTextNode("qmmp-" + Qmmp::strVersion()); - creator.appendChild(text); - root.appendChild(creator); - - QDomElement tracklist = doc.createElement("trackList"); + QString out; + QXmlStreamWriter xml(&out); + xml.setCodec("UTF-8"); + xml.setAutoFormatting(true); + xml.writeStartDocument(); + xml.writeStartElement("playlist"); + xml.writeAttribute("version", "1"); + xml.writeAttribute("xmlns", "http://xspf.org/ns/0/"); + xml.writeTextElement("creator", "qmmp-" + Qmmp::strVersion()); + xml.writeStartElement("trackList"); int counter = 1; foreach(PlayListTrack* f,files) { - QDomElement track = doc.createElement("track"); + xml.writeStartElement("track"); - QDomElement ch = doc.createElement("location"); - QDomText text; + QString url; if (f->url().contains("://")) - text = doc.createTextNode(QUrl::toPercentEncoding(f->url(), ":/")); + url = QUrl::toPercentEncoding(f->url(), ":/"); else //append protocol - text = doc.createTextNode(QUrl::toPercentEncoding(QString("file://") + - QFileInfo(f->url()).absoluteFilePath(), ":/")); - ch.appendChild(text); - track.appendChild(ch); - - ch = doc.createElement("title"); - text = doc.createTextNode(f->value(Qmmp::TITLE)); - ch.appendChild(text); - track.appendChild(ch); - - ch = doc.createElement("creator"); - text = doc.createTextNode(f->value(Qmmp::ARTIST)); - ch.appendChild(text); - track.appendChild(ch); - - ch = doc.createElement("annotation"); - text = doc.createTextNode(f->value(Qmmp::COMMENT)); - ch.appendChild(text); - track.appendChild(ch); - - ch = doc.createElement("album"); - text = doc.createTextNode(f->value(Qmmp::ALBUM)); - ch.appendChild(text); - track.appendChild(ch); - - ch = doc.createElement("trackNum"); - text = doc.createTextNode(QString::number(counter)); - ch.appendChild(text); - track.appendChild(ch); - - ch = doc.createElement("meta"); - ch.setAttribute("rel", "year"); - text = doc.createTextNode(f->value(Qmmp::YEAR)); - ch.appendChild(text); - track.appendChild(ch); - - tracklist.appendChild(track); + url = QUrl::toPercentEncoding(QString("file://") + + QFileInfo(f->url()).absoluteFilePath(), ":/"); + + xml.writeTextElement("location", url); + xml.writeTextElement("title", f->value(Qmmp::TITLE)); + xml.writeTextElement("creator", f->value(Qmmp::ARTIST)); + xml.writeTextElement("annotation", f->value(Qmmp::COMMENT)); + xml.writeTextElement("album", f->value(Qmmp::ALBUM)); + xml.writeTextElement("trackNum", QString::number(counter)); + + xml.writeStartElement("meta"); + xml.writeAttribute("rel", "year"); + xml.writeCharacters(f->value(Qmmp::YEAR)); + xml.writeEndElement(); // meta + xml.writeEndElement(); // track + counter ++; } + xml.writeEndElement(); //trackList + xml.writeEndElement(); //playlist + xml.writeEndDocument(); + return out; - root.appendChild(tracklist); - doc.appendChild( root ); - QString xml_header("<?xml version='1.0' encoding='UTF-8'?>\n"); - return doc.toString().prepend(xml_header); } Q_EXPORT_PLUGIN2(xspfplaylistformat,XSPFPlaylistFormat) diff --git a/src/plugins/PlayListFormats/xspf/xspfplaylistformat.h b/src/plugins/PlayListFormats/xspf/xspfplaylistformat.h index cc20b4bfa..d1e5c0cb9 100644 --- a/src/plugins/PlayListFormats/xspf/xspfplaylistformat.h +++ b/src/plugins/PlayListFormats/xspf/xspfplaylistformat.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2013 by Ilya Kotov * + * Copyright (C) 2008-2014 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * |
