Fix IceCast streams

This commit is contained in:
craig.p.drummond
2013-06-28 19:18:41 +00:00
committed by craig.p.drummond
parent 84dbfdb865
commit 2800a89773
2 changed files with 10 additions and 5 deletions

View File

@@ -559,10 +559,11 @@ QList<StreamsModel::Item *> StreamsModel::parseIceCastResponse(QIODevice *dev, C
{
QList<Item *> newItems;
QXmlStreamReader doc(dev);
QSet<QString> 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<QString> &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)

View File

@@ -123,7 +123,7 @@ private:
QList<Item *> parseSomaFmResponse(QIODevice *dev, CategoryItem *cat);
QList<Item *> 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<QString> &names);
Item * parseSomaFmEntry(QXmlStreamReader &doc, CategoryItem *parent);
void loadFavourites(const QModelIndex &index);
bool loadXml(const QString &fileName, const QModelIndex &index);