diff --git a/models/streamsmodel.cpp b/models/streamsmodel.cpp index 2c51eb00a..30763bfb6 100644 --- a/models/streamsmodel.cpp +++ b/models/streamsmodel.cpp @@ -559,10 +559,11 @@ QList StreamsModel::parseIceCastResponse(QIODevice *dev, C { QList newItems; QXmlStreamReader doc(dev); + QSet names; while (!doc.atEnd()) { doc.readNext(); if (doc.isStartElement() && QLatin1String("entry")==doc.name()) { - Item *item = parseIceCastEntry(doc, cat); + Item *item = parseIceCastEntry(doc, cat, names); if (item) { newItems.append(item); } @@ -656,7 +657,7 @@ StreamsModel::Item * StreamsModel::parseRadioTimeEntry(QXmlStreamReader &doc, Ca return item; } -StreamsModel::Item * StreamsModel::parseIceCastEntry(QXmlStreamReader &doc, CategoryItem *parent) +StreamsModel::Item * StreamsModel::parseIceCastEntry(QXmlStreamReader &doc, CategoryItem *parent, QSet &names) { QString name; QString url; @@ -669,14 +670,18 @@ StreamsModel::Item * StreamsModel::parseIceCastEntry(QXmlStreamReader &doc, Cate if (QLatin1String("server_name")==elem) { name=doc.readElementText().trimmed(); } else if (QLatin1String("listen_url")==elem) { - url=doc.readElementText().toFloat(); + url=doc.readElementText().trimmed(); } } else if (doc.isEndElement() && QLatin1String("entry")==doc.name()) { break; } } - return name.isEmpty() || url.isEmpty() ? 0 : new Item(url, name, parent); + if (!name.isEmpty() && !url.isEmpty() && !names.contains(name)) { + names.insert(name); + return new Item(url, name, parent); + } + return 0; } StreamsModel::Item * StreamsModel::parseSomaFmEntry(QXmlStreamReader &doc, CategoryItem *parent) diff --git a/models/streamsmodel.h b/models/streamsmodel.h index 18a5924bd..3b0c3e52c 100644 --- a/models/streamsmodel.h +++ b/models/streamsmodel.h @@ -123,7 +123,7 @@ private: QList parseSomaFmResponse(QIODevice *dev, CategoryItem *cat); QList parseDigitallyImportedResponse(QIODevice *dev, CategoryItem *cat, const QString &origUrl); Item * parseRadioTimeEntry(QXmlStreamReader &doc, CategoryItem *parent); - Item * parseIceCastEntry(QXmlStreamReader &doc, CategoryItem *parent); + Item * parseIceCastEntry(QXmlStreamReader &doc, CategoryItem *parent, QSet &names); Item * parseSomaFmEntry(QXmlStreamReader &doc, CategoryItem *parent); void loadFavourites(const QModelIndex &index); bool loadXml(const QString &fileName, const QModelIndex &index);