Account for difference between boards when parsing XML

Apparently there's nothing similar among these boards: Gelbooru and
Konachan use xml attributes, and Danbooru uses proper tags.

This is workarounded by adding a new parameter to parseDanbooruResult()
which takes into account the difference between the two calls.

Hopefully JSON isn't broken in Danbooru so I never have to use XML...
This commit is contained in:
Luca Beltrame 2015-08-27 19:29:55 +02:00
parent 7eaa207852
commit 0ee1d034c7
2 changed files with 54 additions and 29 deletions

View file

@ -126,49 +126,74 @@ QUrl requestUrl(QUrl &url, const QString &path, const QString &username,
return danbooruUrl;
}
QList< QVariant > parseDanbooruResult(QByteArray data, QString xlmElement, bool *result)
QList< QVariant > parseDanbooruResult(QByteArray data, QString xlmElement, bool *result, ApiType apiType)
{
QXmlStreamReader reader;
reader.addData(data);
QList<QVariant> postData;
while (!reader.atEnd() && !reader.hasError()) {
if (apiType != ApiType::OriginalDanbooru) {
QXmlStreamReader::TokenType token = reader.readNext();
while (!reader.atEnd() && !reader.hasError()) {
if (token == QXmlStreamReader::StartDocument) {
continue;
}
QXmlStreamReader::TokenType token = reader.readNext();
if (token == QXmlStreamReader::StartElement &&
reader.name() == xlmElement) {
QVariantMap values;
QXmlStreamAttributes attributes = reader.attributes();
// qCDebug(LIBDANBOORU) << attributes;
for (auto attribute : attributes) {
values.insert(attribute.name().toString(),
attribute.value().toString());
if (token == QXmlStreamReader::StartDocument) {
continue;
}
if (values.isEmpty()) {
*result = false;
qCWarning(LIBDANBOORU) << "No results found when parsing XML";
return QList<QVariant>();
if (token == QXmlStreamReader::StartElement &&
reader.name() == xlmElement) {
QVariantMap values;
QXmlStreamAttributes attributes = reader.attributes();
// qCDebug(LIBDANBOORU) << attributes;
for (auto attribute : attributes) {
values.insert(attribute.name().toString(),
attribute.value().toString());
}
if (values.isEmpty()) {
*result = false;
qCWarning(LIBDANBOORU) << "No results found when parsing XML";
return QList<QVariant>();
}
QVariant converted = QVariant(values);
postData.append(converted);
}
}
*result = true;
return postData;
} else {
QString plural = xlmElement + QString("s");
while(reader.readNextStartElement()) {
if (reader.name() == xlmElement) {
QVariantMap values;
while(reader.readNextStartElement()) {
values.insert(reader.name().toString(), reader.readElementText());
}
QVariant converted = QVariant(values);
postData.append(converted);
}
QVariant converted = QVariant(values);
postData.append(converted);
}
if (postData.isEmpty()) {
*result = false;
qCWarning(LIBDANBOORU) << "No results found when parsing XML";
return QList<QVariant>();
}
*result = true;
return postData;
}
*result = true;
return postData;
}
QVariant parseDanbooruResult(QByteArray data, bool *result)

View file

@ -102,7 +102,7 @@ QUrl requestUrl(QUrl &url, const QString &path, const QString &username,
const QString &password);
QList<QVariant> parseDanbooruResult(QByteArray data, QString xlmElement,
bool *result);
bool *result, ApiType=ApiType::KonachanDanbooru);
QVariant parseDanbooruResult(QByteArray data, bool *result);
/**