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:
parent
7eaa207852
commit
0ee1d034c7
2 changed files with 54 additions and 29 deletions
|
@ -126,49 +126,74 @@ QUrl requestUrl(QUrl &url, const QString &path, const QString &username,
|
||||||
return danbooruUrl;
|
return danbooruUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList< QVariant > parseDanbooruResult(QByteArray data, QString xlmElement, bool *result)
|
QList< QVariant > parseDanbooruResult(QByteArray data, QString xlmElement, bool *result, ApiType apiType)
|
||||||
{
|
{
|
||||||
|
|
||||||
QXmlStreamReader reader;
|
QXmlStreamReader reader;
|
||||||
reader.addData(data);
|
reader.addData(data);
|
||||||
|
|
||||||
QList<QVariant> postData;
|
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) {
|
QXmlStreamReader::TokenType token = reader.readNext();
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (token == QXmlStreamReader::StartElement &&
|
if (token == QXmlStreamReader::StartDocument) {
|
||||||
reader.name() == xlmElement) {
|
continue;
|
||||||
|
|
||||||
QVariantMap values;
|
|
||||||
|
|
||||||
QXmlStreamAttributes attributes = reader.attributes();
|
|
||||||
|
|
||||||
// qCDebug(LIBDANBOORU) << attributes;
|
|
||||||
|
|
||||||
for (auto attribute : attributes) {
|
|
||||||
values.insert(attribute.name().toString(),
|
|
||||||
attribute.value().toString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (values.isEmpty()) {
|
if (token == QXmlStreamReader::StartElement &&
|
||||||
*result = false;
|
reader.name() == xlmElement) {
|
||||||
qCWarning(LIBDANBOORU) << "No results found when parsing XML";
|
|
||||||
return QList<QVariant>();
|
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)
|
QVariant parseDanbooruResult(QByteArray data, bool *result)
|
||||||
|
|
|
@ -102,7 +102,7 @@ QUrl requestUrl(QUrl &url, const QString &path, const QString &username,
|
||||||
const QString &password);
|
const QString &password);
|
||||||
|
|
||||||
QList<QVariant> parseDanbooruResult(QByteArray data, QString xlmElement,
|
QList<QVariant> parseDanbooruResult(QByteArray data, QString xlmElement,
|
||||||
bool *result);
|
bool *result, ApiType=ApiType::KonachanDanbooru);
|
||||||
QVariant parseDanbooruResult(QByteArray data, bool *result);
|
QVariant parseDanbooruResult(QByteArray data, bool *result);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue