Add support for parsing Danbooru (donmai.us) type posts
Also added unit test, passing.
This commit is contained in:
		
					parent
					
						
							
								7ec33e8e57
							
						
					
				
			
			
				commit
				
					
						4c662ed7c1
					
				
			
		
					 3 changed files with 83 additions and 8 deletions
				
			
		| 
						 | 
					@ -51,8 +51,10 @@ void TestDanbooruPost::testPostLoading()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QFETCH(Danbooru::ApiType, apiType);
 | 
					    QFETCH(Danbooru::ApiType, apiType);
 | 
				
			||||||
 | 
					    QFETCH(QUrl, boardUrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    auto post = new Danbooru::DanbooruPost(data, apiType);
 | 
					    auto post = new Danbooru::DanbooruPost(data, apiType);
 | 
				
			||||||
 | 
					    Danbooru::fixPostUrl(post, boardUrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QFETCH(int, postId);
 | 
					    QFETCH(int, postId);
 | 
				
			||||||
    QFETCH(int, postWidth);
 | 
					    QFETCH(int, postWidth);
 | 
				
			||||||
| 
						 | 
					@ -74,6 +76,7 @@ void TestDanbooruPost::testPostLoading()
 | 
				
			||||||
    QCOMPARE(post->sampleUrl(), sampleUrl);
 | 
					    QCOMPARE(post->sampleUrl(), sampleUrl);
 | 
				
			||||||
    QCOMPARE(post->rating(), rating);
 | 
					    QCOMPARE(post->rating(), rating);
 | 
				
			||||||
    QCOMPARE(post->pixmap().isNull(), true);
 | 
					    QCOMPARE(post->pixmap().isNull(), true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TestDanbooruPost::testPostLoading_data()
 | 
					void TestDanbooruPost::testPostLoading_data()
 | 
				
			||||||
| 
						 | 
					@ -90,9 +93,7 @@ void TestDanbooruPost::testPostLoading_data()
 | 
				
			||||||
    QTest::addColumn<QUrl>("thumbnailUrl");
 | 
					    QTest::addColumn<QUrl>("thumbnailUrl");
 | 
				
			||||||
    QTest::addColumn<QUrl>("sampleUrl");
 | 
					    QTest::addColumn<QUrl>("sampleUrl");
 | 
				
			||||||
    QTest::addColumn<Danbooru::DanbooruPost::Rating>("rating");
 | 
					    QTest::addColumn<Danbooru::DanbooruPost::Rating>("rating");
 | 
				
			||||||
 | 
					    QTest::addColumn<QUrl>("boardUrl");
 | 
				
			||||||
    QSet<QString> tags = {"azuki_(sayori)", "coconut_(sayori)", "game_cg", "nekopara",
 | 
					 | 
				
			||||||
                          "sayori"};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Konachan.com / yande.re
 | 
					    // Konachan.com / yande.re
 | 
				
			||||||
    QTest::newRow("konachan") << "konachan.json" // jsonFile
 | 
					    QTest::newRow("konachan") << "konachan.json" // jsonFile
 | 
				
			||||||
| 
						 | 
					@ -101,13 +102,33 @@ void TestDanbooruPost::testPostLoading_data()
 | 
				
			||||||
                              << 1280       // width
 | 
					                              << 1280       // width
 | 
				
			||||||
                              << 720        // height
 | 
					                              << 720        // height
 | 
				
			||||||
                              << 885610     // file_size
 | 
					                              << 885610     // file_size
 | 
				
			||||||
                              << tags       // tags
 | 
					                              << QSet<QString>({"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/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/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")
 | 
					                              << 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
 | 
					    // Danbooru
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QTest::newRow("danbooru") << "donmai.json"
 | 
				
			||||||
 | 
					                              << Danbooru::ApiType::OriginalDanbooru
 | 
				
			||||||
 | 
					                              << 2106872
 | 
				
			||||||
 | 
					                              << 1200
 | 
				
			||||||
 | 
					                              << 993
 | 
				
			||||||
 | 
					                              << 514370
 | 
				
			||||||
 | 
					                              << QSet<QString>({"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
 | 
					    // Gelbooru
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,6 +35,20 @@ namespace Danbooru
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const QMap<QString, DanbooruPost::Rating> DanbooruPost::RATING_MAP = initRatingMap();
 | 
					const QMap<QString, DanbooruPost::Rating> DanbooruPost::RATING_MAP = initRatingMap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DanbooruPost::parseDanbooruDonmai(const QVariantMap &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 = 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) {
 | 
					void DanbooruPost::parseDanbooruKonachan(const QVariantMap &postData) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_tags = QSet<QString>::fromList(postData.value("tags").toString().split(' '));
 | 
					    m_tags = QSet<QString>::fromList(postData.value("tags").toString().split(' '));
 | 
				
			||||||
| 
						 | 
					@ -49,9 +63,6 @@ void DanbooruPost::parseDanbooruKonachan(const QVariantMap &postData) {
 | 
				
			||||||
    m_sampleUrl = postData.value("sample_url").toUrl();
 | 
					    m_sampleUrl = postData.value("sample_url").toUrl();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DanbooruPost::parseDanbooruDonmai(const QVariantMap &postData) {
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DanbooruPost::DanbooruPost(QObject *parent): QObject(parent)
 | 
					DanbooruPost::DanbooruPost(QObject *parent): QObject(parent)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_pixmap = QPixmap();
 | 
					    m_pixmap = QPixmap();
 | 
				
			||||||
| 
						 | 
					@ -148,6 +159,24 @@ void DanbooruPost::setPixmap(const QPixmap &pixmap)
 | 
				
			||||||
    m_pixmap = 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()
 | 
					const QString DanbooruPost::toString()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QString display = QString("Danbooru Post with ID %1 and URL %2, width %3 height %4 ");
 | 
					    QString display = QString("Danbooru Post with ID %1 and URL %2, width %3 height %4 ");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -218,6 +218,31 @@ public:
 | 
				
			||||||
     **/
 | 
					     **/
 | 
				
			||||||
    void setPixmap(const QPixmap &pixmap);
 | 
					    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.
 | 
					     * @return A string representation of the post.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue