From dc6236f00c75cdbf3eafc7529b21bcca6e093207 Mon Sep 17 00:00:00 2001 From: Luca Beltrame Date: Thu, 27 Aug 2015 19:36:00 +0200 Subject: [PATCH] Extend the QVariantMap parsing to Gelbooru data --- src/libdanbooru/danboorupost.cpp | 74 ++++++++++++++++++++++++++------ src/libdanbooru/danboorupost.h | 16 +++---- 2 files changed, 70 insertions(+), 20 deletions(-) diff --git a/src/libdanbooru/danboorupost.cpp b/src/libdanbooru/danboorupost.cpp index 05b5c52..9b96cf0 100644 --- a/src/libdanbooru/danboorupost.cpp +++ b/src/libdanbooru/danboorupost.cpp @@ -46,7 +46,41 @@ void DanbooruPost::parseDanbooruDonmai(const QVariantMap &postData) { m_size = postData.value("file_size").toInt(); m_rating = RATING_MAP.value(postData.value("rating").toString()); m_sampleUrl = postData.value("large_file_url").toUrl(); +} +void DanbooruPost::parseDanbooruDonmai(const QXmlStreamAttributes &postData) { + + m_tags = QSet::fromList(postData.value("tag_string").toString().split(' ')); + m_id = postData.value("id").toString().toInt(); + m_height = postData.value("image_height").toString().toInt(); + m_width = postData.value("image_width").toString().toInt(); + m_url = QUrl::fromUserInput(postData.value("file_url").toString()); + m_thumbnailUrl = QUrl::fromUserInput(postData.value("preview_file_url").toString()); + m_size = postData.value("file_size").toInt(); + m_rating = RATING_MAP.value(postData.value("rating").toString()); + m_sampleUrl = QUrl::fromUserInput(postData.value("large_file_url").toString()); + + // fixup for wrong URLs in danbooru input + + m_url.setScheme("http"); + m_thumbnailUrl.setScheme("http"); + m_sampleUrl.setScheme("http"); + +} + +void DanbooruPost::parseDanbooruKonachan(const QXmlStreamAttributes &postData) { + + m_tags = QSet::fromList(postData.value("tags").toString().split(' ')); + m_id = postData.value("id").toString().toInt(); + m_height = postData.value("height").toString().toInt(); + m_width = postData.value("width").toString().toInt(); + + m_url = QUrl::fromUserInput(postData.value("file_url").toString()); + m_thumbnailUrl = QUrl::fromUserInput(postData.value("preview_url").toString()); + m_sampleUrl = QUrl::fromUserInput(postData.value("sample_url").toString()); + + m_size = postData.value("file_size").toString().toInt(); + m_rating = RATING_MAP.value(postData.value("rating").toString()); } void DanbooruPost::parseDanbooruKonachan(const QVariantMap &postData) { @@ -63,6 +97,19 @@ void DanbooruPost::parseDanbooruKonachan(const QVariantMap &postData) { m_sampleUrl = postData.value("sample_url").toUrl(); } +void DanbooruPost::parseGelbooru(const QVariantMap &postData) { + + m_tags = QSet::fromList(postData.value("tags").toString().split(' ')); + m_id = postData.value("id").toString().toInt(); + m_height = postData.value("height").toString().toInt(); + m_width = postData.value("width").toString().toInt(); + m_url = postData.value("file_url").toUrl(); + m_thumbnailUrl = postData.value("preview_url").toUrl(); + m_size = 0; // No size information + m_rating = RATING_MAP.value(postData.value("rating").toString()); + m_sampleUrl = postData.value("sample_url").toUrl(); +} + DanbooruPost::DanbooruPost(QObject *parent): QObject(parent) { m_pixmap = QPixmap(); @@ -88,6 +135,9 @@ DanbooruPost::DanbooruPost(QVariantMap postData,Danbooru::ApiType apiType, QPixm case ApiType::OriginalDanbooru: parseDanbooruDonmai(postData); break; + case ApiType::Gelbooru: + parseGelbooru(postData); + break; default: parseDanbooruKonachan(postData); break; @@ -115,22 +165,22 @@ DanbooruPost::DanbooruPost(QVariantMap postData,Danbooru::ApiType apiType, QPixm // // } -DanbooruPost::DanbooruPost(QXmlStreamAttributes &postData, QPixmap pixmap, QObject *parent): +DanbooruPost::DanbooruPost(QXmlStreamAttributes &postData, Danbooru::ApiType apiType, QPixmap pixmap, QObject *parent): QObject(parent), m_pixmap(pixmap) { - m_tags = QSet::fromList(postData.value("tags").toString().split(' ')); - m_id = postData.value("id").toString().toInt(); - m_height = postData.value("height").toString().toInt(); - m_width = postData.value("width").toString().toInt(); - - m_url = QUrl::fromUserInput(postData.value("file_url").toString()); - m_thumbnailUrl = QUrl::fromUserInput(postData.value("preview_url").toString()); - m_sampleUrl = QUrl::fromUserInput(postData.value("sample_url").toString()); - - m_size = postData.value("file_size").toString().toInt(); - m_rating = RATING_MAP.value(postData.value("rating").toString()); + switch(apiType) { + case ApiType::KonachanDanbooru: + parseDanbooruKonachan(postData); + break; + case ApiType::OriginalDanbooru: + parseDanbooruDonmai(postData); + break; + default: + parseDanbooruKonachan(postData); + break; + } } DanbooruPost::~DanbooruPost() diff --git a/src/libdanbooru/danboorupost.h b/src/libdanbooru/danboorupost.h index 776dafc..12f4b33 100644 --- a/src/libdanbooru/danboorupost.h +++ b/src/libdanbooru/danboorupost.h @@ -114,8 +114,10 @@ private: static const QMap< QString, Rating > initRatingMap(); void parseDanbooruKonachan(const QVariantMap &postData); + void parseDanbooruKonachan(const QXmlStreamAttributes &postData); void parseDanbooruDonmai(const QVariantMap &postData); - void parseGelbooru(QXmlStreamAttributes &postData); + void parseDanbooruDonmai(const QXmlStreamAttributes &postData); + void parseGelbooru(const QVariantMap &postData); public: @@ -132,9 +134,10 @@ public: * @param parent A pointer to the parent QObject. * **/ -/* - explicit DanbooruPost(QVariantMap postData, QPixmap pixmap = QPixmap(), - QObject *parent = 0);*/ + + explicit DanbooruPost(QVariantMap postData, Danbooru::ApiType apiType=ApiType::KonachanDanbooru, + QPixmap pixmap = QPixmap(), + QObject *parent=0); explicit DanbooruPost(QObject *parent = 0); @@ -152,12 +155,9 @@ public: * @param parent A pointer to the parent QObject. * **/ - explicit DanbooruPost(QXmlStreamAttributes &postData, + explicit DanbooruPost(QXmlStreamAttributes &postData, Danbooru::ApiType apiType=ApiType::KonachanDanbooru, QPixmap pixmap = QPixmap(), QObject *parent = 0); - explicit DanbooruPost(QVariantMap postData, Danbooru::ApiType apiType=ApiType::KonachanDanbooru, - QPixmap pixmap = QPixmap(), - QObject *parent=0); bool operator==(const DanbooruPost &);