diff --git a/src/libdanbooru/autotests/test_danbooru_post.cpp b/src/libdanbooru/autotests/test_danbooru_post.cpp index cf4a0b8..9ccfd60 100644 --- a/src/libdanbooru/autotests/test_danbooru_post.cpp +++ b/src/libdanbooru/autotests/test_danbooru_post.cpp @@ -51,8 +51,10 @@ void TestDanbooruPost::testPostLoading() } QFETCH(Danbooru::ApiType, apiType); + QFETCH(QUrl, boardUrl); auto post = new Danbooru::DanbooruPost(data, apiType); + Danbooru::fixPostUrl(post, boardUrl); QFETCH(int, postId); QFETCH(int, postWidth); @@ -74,6 +76,7 @@ void TestDanbooruPost::testPostLoading() QCOMPARE(post->sampleUrl(), sampleUrl); QCOMPARE(post->rating(), rating); QCOMPARE(post->pixmap().isNull(), true); + } void TestDanbooruPost::testPostLoading_data() @@ -90,9 +93,7 @@ void TestDanbooruPost::testPostLoading_data() QTest::addColumn("thumbnailUrl"); QTest::addColumn("sampleUrl"); QTest::addColumn("rating"); - - QSet tags = {"azuki_(sayori)", "coconut_(sayori)", "game_cg", "nekopara", - "sayori"}; + QTest::addColumn("boardUrl"); // Konachan.com / yande.re QTest::newRow("konachan") << "konachan.json" // jsonFile @@ -101,13 +102,33 @@ void TestDanbooruPost::testPostLoading_data() << 1280 // width << 720 // height << 885610 // file_size - << tags // tags + << QSet({"azuki_(sayori)", "coconut_(sayori)", "game_cg", "nekopara", + "sayori"}) // tags << QUrl("http://konachan.net/image/eb36c568af4f4e4ea2f59eda7d8c802d/Konachan.com%20-%20205621%20azuki_%28sayori%29%20coconut_%28sayori%29%20game_cg%20nekopara%20sayori.png") << QUrl("http://konachan.net/data/preview/eb/36/eb36c568af4f4e4ea2f59eda7d8c802d.jpg") << QUrl("http://konachan.net/jpeg/eb36c568af4f4e4ea2f59eda7d8c802d/Konachan.com%20-%20205621%20azuki_%28sayori%29%20coconut_%28sayori%29%20game_cg%20nekopara%20sayori.jpg") - << Danbooru::DanbooruPost::Safe; + << Danbooru::DanbooruPost::Safe + << QUrl("http://konachan.com"); // Danbooru + QTest::newRow("danbooru") << "donmai.json" + << Danbooru::ApiType::OriginalDanbooru + << 2106872 + << 1200 + << 993 + << 514370 + << QSet({"1girl", "all_fours", "bare_legs", + "barefoot", "brown_eyes", "brown_hair", "chain", + "collar", "hat", "hecatia_lapislazuli", "long_hair", + "looking_at_viewer", "off_shoulder", + "shirt", "skirt", "solo", "touhou", + "uranaishi_(miraura)" }) + << QUrl("http://danbooru.donmai.us/data/7ee70315eba5ea4fbda7cd6011c8d833.jpg") + << QUrl("http://danbooru.donmai.us/data/preview/7ee70315eba5ea4fbda7cd6011c8d833.jpg") + << QUrl("http://danbooru.donmai.us/data/sample/sample-7ee70315eba5ea4fbda7cd6011c8d833.jpg") + << Danbooru::DanbooruPost::Safe + << QUrl("http://danbooru.donmai.us"); + // Gelbooru } diff --git a/src/libdanbooru/danboorupost.cpp b/src/libdanbooru/danboorupost.cpp index e8a3f60..05b5c52 100644 --- a/src/libdanbooru/danboorupost.cpp +++ b/src/libdanbooru/danboorupost.cpp @@ -35,6 +35,20 @@ namespace Danbooru const QMap DanbooruPost::RATING_MAP = initRatingMap(); +void DanbooruPost::parseDanbooruDonmai(const QVariantMap &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 = postData.value("file_url").toUrl(); + m_thumbnailUrl = postData.value("preview_file_url").toUrl(); + 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::parseDanbooruKonachan(const QVariantMap &postData) { m_tags = QSet::fromList(postData.value("tags").toString().split(' ')); @@ -49,9 +63,6 @@ void DanbooruPost::parseDanbooruKonachan(const QVariantMap &postData) { m_sampleUrl = postData.value("sample_url").toUrl(); } -void DanbooruPost::parseDanbooruDonmai(const QVariantMap &postData) { -} - DanbooruPost::DanbooruPost(QObject *parent): QObject(parent) { m_pixmap = QPixmap(); @@ -148,6 +159,24 @@ void DanbooruPost::setPixmap(const QPixmap &pixmap) m_pixmap = pixmap; } +void DanbooruPost::setFileUrl(const QUrl &url) { + if (url.isValid()) { + m_url = url; + } +} + +void DanbooruPost::setSampleUrl(const QUrl &url) { + if (url.isValid()) { + m_sampleUrl = url; + } +} + +void DanbooruPost::setThumbnailUrl(const QUrl &url) { + if (url.isValid()) { + m_thumbnailUrl = url; + } +} + const QString DanbooruPost::toString() { QString display = QString("Danbooru Post with ID %1 and URL %2, width %3 height %4 "); diff --git a/src/libdanbooru/danboorupost.h b/src/libdanbooru/danboorupost.h index 705ba56..776dafc 100644 --- a/src/libdanbooru/danboorupost.h +++ b/src/libdanbooru/danboorupost.h @@ -218,6 +218,31 @@ public: **/ void setPixmap(const QPixmap &pixmap); + /** + * @brief Set the thumbnail URL for a post. + * + * @param url A valid QUrl pointing to an image. + */ + void setThumbnailUrl(const QUrl &url); + + /** + * @brief Set the sample URL for a post. + * + * The sample URL is a medium-resolution image and is often used to display images that otherwise + * would be very large. + * + * @param url A valid QUrl pointing to an image. + */ + void setSampleUrl(const QUrl &url); + + + /** + * @brief Set the image URL for a post. + * + * @param url A valid QUrl pointing to an image. + */ + void setFileUrl(const QUrl &url); + /** * @return A string representation of the post. *