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