aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/PlayListFormats
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2014-03-25 18:15:27 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2014-03-25 18:15:27 +0000
commit7ff6e6a4fc150f055a6d459499edf18707c06c2e (patch)
tree398f66a90396bccadef6be85a9d6b431696f68b9 /src/plugins/PlayListFormats
parente775e0371a69bd240f1b74255f6bb43a60928fab (diff)
downloadqmmp-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.txt5
-rw-r--r--src/plugins/PlayListFormats/xspf/xspf.pro2
-rw-r--r--src/plugins/PlayListFormats/xspf/xspfplaylistformat.cpp158
-rw-r--r--src/plugins/PlayListFormats/xspf/xspfplaylistformat.h2
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 *