From 4ed73d74b098a030e97c2ec82ffce004b12a1239 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Mon, 10 May 2010 10:58:02 +0000 Subject: [PATCH] Replace readElementText properly, with one that doesn't error out when it sees a child element. --- src/magnatuneservice.cpp | 23 ++++++++++++++++++++++- src/magnatuneservice.h | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/magnatuneservice.cpp b/src/magnatuneservice.cpp index 5a97006c1..29261674d 100644 --- a/src/magnatuneservice.cpp +++ b/src/magnatuneservice.cpp @@ -165,7 +165,8 @@ Song MagnatuneService::ReadTrack(QXmlStreamReader& reader) { break; if (reader.tokenType() == QXmlStreamReader::StartElement) { - QString value = reader.readElementText(); + QString value = ReadElementText(reader); + if (reader.name() == "artist") song.set_artist(value); if (reader.name() == "albumname") song.set_album(value); if (reader.name() == "trackname") song.set_title(value); @@ -190,6 +191,26 @@ Song MagnatuneService::ReadTrack(QXmlStreamReader& reader) { return song; } +// TODO: Replace with readElementText(SkipChildElements) in Qt 4.6 +QString MagnatuneService::ReadElementText(QXmlStreamReader& reader) { + int level = 1; + QString ret; + while (!reader.atEnd()) { + switch (reader.readNext()) { + case QXmlStreamReader::StartElement: level++; break; + case QXmlStreamReader::EndElement: level--; break; + case QXmlStreamReader::Characters: + ret += reader.text().toString().trimmed(); + break; + default: break; + } + + if (level == 0) + break; + } + return ret; +} + void MagnatuneService::ShowContextMenu(RadioItem*, const QModelIndex& index, const QPoint& global_pos) { if (index.model() == library_sort_model_) diff --git a/src/magnatuneservice.h b/src/magnatuneservice.h index 2e7aaf64b..c57c15887 100644 --- a/src/magnatuneservice.h +++ b/src/magnatuneservice.h @@ -60,6 +60,7 @@ class MagnatuneService : public RadioService { private: Song ReadTrack(QXmlStreamReader& reader); + QString ReadElementText(QXmlStreamReader& reader); private: RadioItem* root_;