aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-07-26 18:29:48 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-07-26 18:29:48 +0000
commitbaf97dd4010d88872c94fe646aefd912dbb60703 (patch)
tree7188192d83ca58f5def5adaba7453e0b0db46b4c /src
parentf07b4a46eed789e1892cf6aa373cf982844c2e50 (diff)
downloadqmmp-baf97dd4010d88872c94fe646aefd912dbb60703.tar.gz
qmmp-baf97dd4010d88872c94fe646aefd912dbb60703.tar.bz2
qmmp-baf97dd4010d88872c94fe646aefd912dbb60703.zip
removed QtXML usage from xspf plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2827 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
-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.cpp160
3 files changed, 69 insertions, 98 deletions
diff --git a/src/plugins/PlaylistFormats/xspf/CMakeLists.txt b/src/plugins/PlaylistFormats/xspf/CMakeLists.txt
index f4a27ac22..9b97589e8 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 28a50ca44..221293d1b 100644
--- a/src/plugins/PlaylistFormats/xspf/xspf.pro
+++ b/src/plugins/PlaylistFormats/xspf/xspf.pro
@@ -13,8 +13,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 ad6c8f2a6..b672bd586 100644
--- a/src/plugins/PlaylistFormats/xspf/xspfplaylistformat.cpp
+++ b/src/plugins/PlaylistFormats/xspf/xspfplaylistformat.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2008-2009 by Ilya Kotov *
+ * Copyright (C) 2008-2012 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -18,8 +18,8 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-#include <QDomDocument>
-#include <QDomElement>
+#include <QXmlStreamReader>
+#include <QXmlStreamWriter>
#include <QFileInfo>
#include <QUrl>
#include <QtPlugin>
@@ -30,112 +30,89 @@
// Needs more work - it's better use libSpiff there and put it as plugin.
-QStringList XSPFPlaylistFormat::decode(const QString & contents)
+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;
- 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");
-
- while (!child.isNull())
+ QXmlStreamReader xml(contents);
+ 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();
+ }
+ }
}
+ if(xml.hasError())
+ {
+ qDebug("XSPFPlaylistFormat: parse error: %s (row:%lld, col:%lld",
+ qPrintable(xml.errorString()), xml.lineNumber(), xml.columnNumber());
+ out.clear();
+ }
return out;
}
// Needs more work - it's better use libSpiff there and put it as plugin.
-QString XSPFPlaylistFormat::encode(const QList<PlayListItem*> & files)
+QString XSPFPlaylistFormat::encode(const QList<PlayListItem*> &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(PlayListItem* 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 ++;
}
-
- root.appendChild(tracklist);
- doc.appendChild( root );
- QString xml_header("<?xml version='1.0' encoding='UTF-8'?>\n");
- return doc.toString().prepend(xml_header);
+ xml.writeEndElement(); //trackList
+ xml.writeEndElement(); //playlist
+ xml.writeEndDocument();
+ return out;
}
XSPFPlaylistFormat::XSPFPlaylistFormat()
@@ -146,9 +123,10 @@ XSPFPlaylistFormat::XSPFPlaylistFormat()
bool XSPFPlaylistFormat::hasFormat(const QString & f)
{
foreach(QString s,m_supported_formats)
- if (f == s)
- return true;
-
+ {
+ if (f == s)
+ return true;
+ }
return false;
}