Extend the QVariantMap parsing to Gelbooru data

This commit is contained in:
Luca Beltrame 2015-08-27 19:36:00 +02:00
parent 0ee1d034c7
commit dc6236f00c
2 changed files with 70 additions and 20 deletions

View file

@ -46,7 +46,41 @@ void DanbooruPost::parseDanbooruDonmai(const QVariantMap &postData) {
m_size = postData.value("file_size").toInt(); m_size = postData.value("file_size").toInt();
m_rating = RATING_MAP.value(postData.value("rating").toString()); m_rating = RATING_MAP.value(postData.value("rating").toString());
m_sampleUrl = postData.value("large_file_url").toUrl(); m_sampleUrl = postData.value("large_file_url").toUrl();
}
void DanbooruPost::parseDanbooruDonmai(const QXmlStreamAttributes &postData) {
m_tags = QSet<QString>::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<QString>::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) { void DanbooruPost::parseDanbooruKonachan(const QVariantMap &postData) {
@ -63,6 +97,19 @@ void DanbooruPost::parseDanbooruKonachan(const QVariantMap &postData) {
m_sampleUrl = postData.value("sample_url").toUrl(); m_sampleUrl = postData.value("sample_url").toUrl();
} }
void DanbooruPost::parseGelbooru(const QVariantMap &postData) {
m_tags = QSet<QString>::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) DanbooruPost::DanbooruPost(QObject *parent): QObject(parent)
{ {
m_pixmap = QPixmap(); m_pixmap = QPixmap();
@ -88,6 +135,9 @@ DanbooruPost::DanbooruPost(QVariantMap postData,Danbooru::ApiType apiType, QPixm
case ApiType::OriginalDanbooru: case ApiType::OriginalDanbooru:
parseDanbooruDonmai(postData); parseDanbooruDonmai(postData);
break; break;
case ApiType::Gelbooru:
parseGelbooru(postData);
break;
default: default:
parseDanbooruKonachan(postData); parseDanbooruKonachan(postData);
break; 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), QObject(parent),
m_pixmap(pixmap) m_pixmap(pixmap)
{ {
m_tags = QSet<QString>::fromList(postData.value("tags").toString().split(' ')); switch(apiType) {
m_id = postData.value("id").toString().toInt(); case ApiType::KonachanDanbooru:
m_height = postData.value("height").toString().toInt(); parseDanbooruKonachan(postData);
m_width = postData.value("width").toString().toInt(); break;
case ApiType::OriginalDanbooru:
m_url = QUrl::fromUserInput(postData.value("file_url").toString()); parseDanbooruDonmai(postData);
m_thumbnailUrl = QUrl::fromUserInput(postData.value("preview_url").toString()); break;
m_sampleUrl = QUrl::fromUserInput(postData.value("sample_url").toString()); default:
parseDanbooruKonachan(postData);
m_size = postData.value("file_size").toString().toInt(); break;
m_rating = RATING_MAP.value(postData.value("rating").toString()); }
} }
DanbooruPost::~DanbooruPost() DanbooruPost::~DanbooruPost()

View file

@ -114,8 +114,10 @@ private:
static const QMap< QString, Rating > initRatingMap(); static const QMap< QString, Rating > initRatingMap();
void parseDanbooruKonachan(const QVariantMap &postData); void parseDanbooruKonachan(const QVariantMap &postData);
void parseDanbooruKonachan(const QXmlStreamAttributes &postData);
void parseDanbooruDonmai(const QVariantMap &postData); void parseDanbooruDonmai(const QVariantMap &postData);
void parseGelbooru(QXmlStreamAttributes &postData); void parseDanbooruDonmai(const QXmlStreamAttributes &postData);
void parseGelbooru(const QVariantMap &postData);
public: public:
@ -132,9 +134,10 @@ public:
* @param parent A pointer to the parent QObject. * @param parent A pointer to the parent QObject.
* *
**/ **/
/*
explicit DanbooruPost(QVariantMap postData, QPixmap pixmap = QPixmap(), explicit DanbooruPost(QVariantMap postData, Danbooru::ApiType apiType=ApiType::KonachanDanbooru,
QObject *parent = 0);*/ QPixmap pixmap = QPixmap(),
QObject *parent=0);
explicit DanbooruPost(QObject *parent = 0); explicit DanbooruPost(QObject *parent = 0);
@ -152,12 +155,9 @@ public:
* @param parent A pointer to the parent QObject. * @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); 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 &); bool operator==(const DanbooruPost &);