aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-07-26 19:10:49 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-07-26 19:10:49 +0000
commit60b4d7b8d7d0afc2fece0aa8ba55b63c9c5f2adb (patch)
treed7f63686045c40dd026b3cd0ccc74ab425d10c9c /src/plugins
parentbaf97dd4010d88872c94fe646aefd912dbb60703 (diff)
downloadqmmp-60b4d7b8d7d0afc2fece0aa8ba55b63c9c5f2adb.tar.gz
qmmp-60b4d7b8d7d0afc2fece0aa8ba55b63c9c5f2adb.tar.bz2
qmmp-60b4d7b8d7d0afc2fece0aa8ba55b63c9c5f2adb.zip
reverted previous commit
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2828 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
-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, 98 insertions, 69 deletions
diff --git a/src/plugins/PlaylistFormats/xspf/CMakeLists.txt b/src/plugins/PlaylistFormats/xspf/CMakeLists.txt
index 9b97589e8..f4a27ac22 100644
--- a/src/plugins/PlaylistFormats/xspf/CMakeLists.txt
+++ b/src/plugins/PlaylistFormats/xspf/CMakeLists.txt
@@ -6,6 +6,11 @@ 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 221293d1b..28a50ca44 100644
--- a/src/plugins/PlaylistFormats/xspf/xspf.pro
+++ b/src/plugins/PlaylistFormats/xspf/xspf.pro
@@ -13,6 +13,8 @@ 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 b672bd586..ad6c8f2a6 100644
--- a/src/plugins/PlaylistFormats/xspf/xspfplaylistformat.cpp
+++ b/src/plugins/PlaylistFormats/xspf/xspfplaylistformat.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2008-2012 by Ilya Kotov *
+ * Copyright (C) 2008-2009 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 <QXmlStreamReader>
-#include <QXmlStreamWriter>
+#include <QDomDocument>
+#include <QDomElement>
#include <QFileInfo>
#include <QUrl>
#include <QtPlugin>
@@ -30,89 +30,112 @@
// 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;
- QString currentTag;
+ QDomDocument doc;
+ QString errorMsg;
+ int errorCol;
+ int errorRow;
+ bool ok = doc.setContent(contents, &errorMsg, &errorRow, &errorCol);
- QXmlStreamReader xml(contents);
- while(!xml.atEnd())
- {
- 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 (!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");
- if(xml.hasError())
+ QDomElement child = tracklistElement.firstChildElement("track");
+
+ while (!child.isNull())
{
- qDebug("XSPFPlaylistFormat: parse error: %s (row:%lld, col:%lld",
- qPrintable(xml.errorString()), xml.lineNumber(), xml.columnNumber());
- out.clear();
+ 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();
}
+
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)
{
- 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");
+ 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");
int counter = 1;
foreach(PlayListItem* f,files)
{
- xml.writeStartElement("track");
+ QDomElement track = doc.createElement("track");
- QString url;
+ QDomElement ch = doc.createElement("location");
+ QDomText text;
if (f->url().contains("://"))
- url = QUrl::toPercentEncoding(f->url(), ":/");
+ text = doc.createTextNode(QUrl::toPercentEncoding(f->url(), ":/"));
else //append protocol
- 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
-
+ 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);
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);
}
XSPFPlaylistFormat::XSPFPlaylistFormat()
@@ -123,10 +146,9 @@ 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;
}