diff --git a/src/libdanbooru/CMakeLists.txt b/src/libdanbooru/CMakeLists.txt index 16d23e5..4c1288c 100644 --- a/src/libdanbooru/CMakeLists.txt +++ b/src/libdanbooru/CMakeLists.txt @@ -13,7 +13,7 @@ set (libdanbooru_VERSION ${libdanbooru_VERSION_MAJOR}.${libdanbooru_VERSION_MINO set (libdanbooru_SRCS danboorupool.cpp servicebase.cpp - konachan.cpp + moebooru.cpp danboorupost.cpp danboorutag.cpp utils.cpp @@ -28,8 +28,3 @@ target_link_libraries(danbooru PUBLIC KF5::GuiAddons) install(TARGETS danbooru ${INSTALL_TARGETS_DEFAULT_ARGS}) - -if (Qt5Test_FOUND) - add_subdirectory(autotests) - add_subdirectory(tests) -endif() diff --git a/src/libdanbooru/danbooru.h b/src/libdanbooru/danbooru.h index d4d81e3..f8be6d1 100644 --- a/src/libdanbooru/danbooru.h +++ b/src/libdanbooru/danbooru.h @@ -33,14 +33,29 @@ namespace Danbooru { enum ApiType { - OriginalDanbooru = 16, - KonachanDanbooru = 32, + Danbooru = 16, + MoeBooru = 32, Gelbooru = 64, Unknown = 128 }; + +enum Rating { + Safe = 8192, + Questionable = 16384, + Explicit = 32768 +}; + +Q_DECLARE_FLAGS(Ratings, Rating) +Q_DECLARE_OPERATORS_FOR_FLAGS(Danbooru::Ratings) } // namespace Danbooru -Q_ENUMS(ApiType) + +Q_ENUMS(Danbooru::ApiType) +Q_ENUMS(Danbooru::Rating) Q_DECLARE_METATYPE(Danbooru::ApiType) +Q_DECLARE_METATYPE(Danbooru::Ratings) +Q_DECLARE_METATYPE(Danbooru::Rating) + + #endif // DANBOORU_H diff --git a/src/libdanbooru/danboorupost.cpp b/src/libdanbooru/danboorupost.cpp index 2df2f1d..cad14b9 100644 --- a/src/libdanbooru/danboorupost.cpp +++ b/src/libdanbooru/danboorupost.cpp @@ -19,11 +19,8 @@ // Qt -#include -#include - -// KDE - +#include +#include #include // Own @@ -33,94 +30,6 @@ namespace Danbooru { -const QMap DanbooruPost::RATING_MAP = initRatingMap(); - -void DanbooruPost::parseDanbooruDonmai(const QVariantMap &postData) { - - // HACK: Handle XML (foo-bar) versus JSON (foo_bar) for attributes - - auto tagString = postData.contains("tag_string") ? QLatin1String("tag_string"): QLatin1String("tag-string"); - auto width = postData.contains("image_width") ? QLatin1String("image_width"): QLatin1String("image-width"); - auto height = postData.contains("image_height") ? QLatin1String("image_height"): QLatin1String("image-height"); - auto fileSize = postData.contains("file_size") ? QLatin1String("file_size"): QLatin1String("file-size"); - auto fileUrl = postData.contains("file_url") ? QLatin1String("file_url"): QLatin1String("file-url"); - auto thumbnailUrl = postData.contains("preview_file_url") ? QLatin1String("preview_file_url"): QLatin1String("preview-file-url"); - auto sampleUrl = postData.contains("large_file_url") ? QLatin1String("large_file_url"): QLatin1String("large-file-url"); - - m_id = postData.value("id").toString().toInt(); - m_tags = QSet::fromList(postData.value(tagString).toString().split(' ')); - - m_width = postData.value(width).toString().toInt(); - m_height = postData.value(height).toString().toInt(); - - m_url = postData.value(fileUrl).toUrl(); - m_thumbnailUrl = postData.value(thumbnailUrl).toUrl(); - m_size = postData.value(fileSize).toInt(); - m_rating = RATING_MAP.value(postData.value("rating").toString()); - m_sampleUrl = postData.value(sampleUrl).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) { - - m_tags = QSet::fromList(postData.value("tags").toString().split(' ')); - m_id = postData.value("id").toString().toInt(); - m_width = postData.value("width").toString().toInt(); - m_height = postData.value("height").toString().toInt(); - m_url = postData.value("file_url").toUrl(); - m_thumbnailUrl = postData.value("preview_url").toUrl(); - m_size = postData.value("file_size").toInt(); - m_rating = RATING_MAP.value(postData.value("rating").toString()); - 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(); @@ -133,81 +42,26 @@ DanbooruPost::DanbooruPost(QObject *parent): QObject(parent) m_rating = Questionable; } -DanbooruPost::DanbooruPost(QVariantMap postData,Danbooru::ApiType apiType, QPixmap pixmap, - QObject *parent): +DanbooruPost::DanbooruPost(QVariantMap postData, QObject *parent): QObject(parent), - m_pixmap(pixmap) + m_pixmap(QPixmap()) { - - switch(apiType) { - case ApiType::KonachanDanbooru: - parseDanbooruKonachan(postData); - break; - case ApiType::OriginalDanbooru: - parseDanbooruDonmai(postData); - break; - case ApiType::Gelbooru: - parseGelbooru(postData); - break; - default: - parseDanbooruKonachan(postData); - break; - } - - + m_tags = postData.value("tags").value< QSet >(); + m_height = postData.value("height").toInt(); + m_width = postData.value("width").toInt(); + m_size = postData.value("size").toInt(); + m_url = postData.value("url").toUrl(); + m_thumbnailUrl = postData.value("thumbnailUrl").toUrl(); + m_sampleUrl = postData.value("sampleUrl").toUrl(); + m_rating = postData.value("rating").value(); + } -// DanbooruPost::DanbooruPost(QVariantMap postData, 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 = postData.value("file_url").toUrl(); -// m_thumbnailUrl = postData.value("preview_url").toUrl(); -// m_size = postData.value("file_size").toInt(); -// m_rating = RATING_MAP.value(postData.value("rating").toString()); -// m_sampleUrl = postData.value("sample_url").toUrl(); -// -// } - -DanbooruPost::DanbooruPost(QXmlStreamAttributes &postData, Danbooru::ApiType apiType, QPixmap pixmap, QObject *parent): +DanbooruPost::DanbooruPost(QXmlStreamAttributes &postData, QObject *parent): QObject(parent), - m_pixmap(pixmap) + m_pixmap(QPixmap()) { - switch(apiType) { - case ApiType::KonachanDanbooru: - parseDanbooruKonachan(postData); - break; - case ApiType::OriginalDanbooru: - parseDanbooruDonmai(postData); - break; - default: - parseDanbooruKonachan(postData); - break; - } -} - -DanbooruPost::~DanbooruPost() -{ -} - -const QMap< QString, DanbooruPost::Rating > DanbooruPost::initRatingMap() -{ - - QMap map; - map.insert("s", Safe); - map.insert("q", Questionable); - map.insert("e", Explicit); - - return map; - } bool DanbooruPost::operator==(const Danbooru::DanbooruPost &other) @@ -290,7 +144,7 @@ const QUrl DanbooruPost::fileUrl() const return m_url; } -Danbooru::DanbooruPost::Rating DanbooruPost::rating() const +Danbooru::Rating DanbooruPost::rating() const { return m_rating; } diff --git a/src/libdanbooru/danboorupost.h b/src/libdanbooru/danboorupost.h index 12f4b33..8dbaa44 100644 --- a/src/libdanbooru/danboorupost.h +++ b/src/libdanbooru/danboorupost.h @@ -74,22 +74,6 @@ class DanbooruPost : public QObject Q_PROPERTY(QUrl thumbnailUrl READ thumbnailUrl) Q_PROPERTY(QUrl sampleUrl READ sampleUrl) -public: - - /** - * @brief Ratings for a Danbooru item - * - * A rating is how appropriate is an item for a general audience. - * - **/ - enum Rating { - Safe = 1, /**< Safe for the general public **/ - Questionable = 2, /**< Might contain hints of risqueness of violence **/ - Explicit = 4 /**< Explicit material **/ - }; - Q_DECLARE_FLAGS(Ratings, DanbooruPost::Rating) - Q_ENUMS(Rating) - private: QPixmap m_pixmap; @@ -105,19 +89,7 @@ private: QUrl m_thumbnailUrl; QUrl m_sampleUrl; QSet m_tags; - DanbooruPost::Rating m_rating; - - static const QMap RATING_MAP; - - // Private functions - - static const QMap< QString, Rating > initRatingMap(); - - void parseDanbooruKonachan(const QVariantMap &postData); - void parseDanbooruKonachan(const QXmlStreamAttributes &postData); - void parseDanbooruDonmai(const QVariantMap &postData); - void parseDanbooruDonmai(const QXmlStreamAttributes &postData); - void parseGelbooru(const QVariantMap &postData); + Danbooru::Rating m_rating; public: @@ -135,9 +107,7 @@ public: * **/ - explicit DanbooruPost(QVariantMap postData, Danbooru::ApiType apiType=ApiType::KonachanDanbooru, - QPixmap pixmap = QPixmap(), - QObject *parent=0); + explicit DanbooruPost(QVariantMap postData, QObject *parent=0); explicit DanbooruPost(QObject *parent = 0); @@ -155,8 +125,7 @@ public: * @param parent A pointer to the parent QObject. * **/ - explicit DanbooruPost(QXmlStreamAttributes &postData, Danbooru::ApiType apiType=ApiType::KonachanDanbooru, - QPixmap pixmap = QPixmap(), QObject *parent = 0); + explicit DanbooruPost(QXmlStreamAttributes &postData, QObject *parent = 0); bool operator==(const DanbooruPost &); @@ -251,12 +220,9 @@ public: }; -Q_DECLARE_OPERATORS_FOR_FLAGS(DanbooruPost::Ratings) - } // namespace Danbooru Q_DECLARE_METATYPE(Danbooru::DanbooruPost *) -Q_DECLARE_METATYPE(Danbooru::DanbooruPost::Rating) Q_DECLARE_METATYPE(QSet) #endif // DANBOORUPOST_H diff --git a/src/libdanbooru/danbooruservice.h b/src/libdanbooru/danbooruservice.h index 0dea146..d9c7030 100644 --- a/src/libdanbooru/danbooruservice.h +++ b/src/libdanbooru/danbooruservice.h @@ -90,7 +90,7 @@ private: QString m_username; QString m_password; QSet m_blacklist; - DanbooruPost::Ratings m_maxRating; + Danbooru::Ratings m_maxRating; int m_maxPosts; int m_currentPage; QStringList m_tags; @@ -180,7 +180,7 @@ public: /** * @return The maximum allowed rating for a post. **/ - const DanbooruPost::Ratings maximumAllowedRating() const; + const Danbooru::Ratings maximumAllowedRating() const; /** * @return The currently blacklisted tags. @@ -238,7 +238,7 @@ public: * downloaded. * **/ - void setMaximumAllowedRating(DanbooruPost::Rating rating); + void setMaximumAllowedRating(Danbooru::Rating rating); /** * @brief Set the board URL to connect to. diff --git a/src/libdanbooru/konachan.cpp b/src/libdanbooru/moebooru.cpp similarity index 96% rename from src/libdanbooru/konachan.cpp rename to src/libdanbooru/moebooru.cpp index f009a38..55191d5 100644 --- a/src/libdanbooru/konachan.cpp +++ b/src/libdanbooru/moebooru.cpp @@ -17,7 +17,7 @@ * along with Danbooru Client. If not, see . */ -#include "konachan.h" +#include "moebooru.h" #include "danboorupost.h" #include "danboorupool.h" #include "danboorutag.h" @@ -66,19 +66,9 @@ const QLatin1String KonachanDanbooruService::relatedTagUri() const { // Other methods //////////////// -DanbooruServiceBase::SupportedOperations KonachanDanbooruService::supportedOperations() const { - - return SupportedOperations(DanbooruServiceBase::PostDownload | DanbooruServiceBase::PoolDownload | - DanbooruServiceBase::TagDownload | DanbooruServiceBase::TagSearch | - DanbooruServiceBase::RelatedTagSearch); - -} Danbooru::ApiType KonachanDanbooruService::apiType() const { - return Danbooru::ApiType::KonachanDanbooru; -} - -KonachanDanbooruService::~KonachanDanbooruService() { + return Danbooru::ApiType::MoeBooru; } ////////////// diff --git a/src/libdanbooru/konachan.h b/src/libdanbooru/moebooru.h similarity index 95% rename from src/libdanbooru/konachan.h rename to src/libdanbooru/moebooru.h index 777d879..3419fe0 100644 --- a/src/libdanbooru/konachan.h +++ b/src/libdanbooru/moebooru.h @@ -42,9 +42,8 @@ private: public: using DanbooruServiceBase::DanbooruServiceBase; // superclass constructor - ~KonachanDanbooruService() override; + ~KonachanDanbooruService() override = default; - SupportedOperations supportedOperations() const override; Danbooru::ApiType apiType() const override; void getPostList() override; diff --git a/src/libdanbooru/servicebase.cpp b/src/libdanbooru/servicebase.cpp index bd5929f..b868a53 100644 --- a/src/libdanbooru/servicebase.cpp +++ b/src/libdanbooru/servicebase.cpp @@ -22,37 +22,32 @@ namespace Danbooru { -DanbooruServiceBase::DanbooruServiceBase(QUrl boardUrl, QString username, - QString password, KImageCache *cache, - QObject *parent): +DanbooruServiceBase::DanbooruServiceBase(QUrl boardUrl, QObject* parent): QObject(parent), m_url(boardUrl), - m_username(username), - m_password(password), - m_maxRating(Danbooru::DanbooruPost::Safe), + m_username(QString()), + m_password(QString()), + m_maxRating(Danbooru::Safe), m_maxPosts(10), m_currentPage(1), m_tags(QStringList()), - m_postsToFetch(0), - m_cache(cache){ -} - -DanbooruServiceBase::~DanbooruServiceBase() { + m_postsToFetch(0) + { } const QStringList DanbooruServiceBase::allowedRatings() const { QStringList ratings; - if (m_maxRating.testFlag(DanbooruPost::Safe)) { + if (m_maxRating.testFlag(Danbooru::Safe)) { ratings.append("Safe"); } - if (m_maxRating.testFlag(DanbooruPost::Questionable)) { + if (m_maxRating.testFlag(Danbooru::Questionable)) { ratings.append("Questionable"); } - if (m_maxRating.testFlag(DanbooruPost::Explicit)) { + if (m_maxRating.testFlag(Danbooru::Explicit)) { ratings.append("Explicit"); } @@ -74,7 +69,7 @@ int DanbooruServiceBase::currentPage() const return m_currentPage; } -const DanbooruPost::Ratings DanbooruServiceBase::maximumAllowedRating() const +const Danbooru::Ratings DanbooruServiceBase::maximumAllowedRating() const { return m_maxRating; } @@ -151,19 +146,19 @@ void DanbooruServiceBase::setImageCache(KImageCache *cache) m_cache = cache; } -void DanbooruServiceBase::setMaximumAllowedRating(DanbooruPost::Rating rating) +void DanbooruServiceBase::setMaximumAllowedRating(Danbooru::Rating rating) { - DanbooruPost::Ratings flags; + Danbooru::Ratings flags; switch (rating) { - case DanbooruPost::Safe: - flags = DanbooruPost::Safe; + case Danbooru::Safe: + flags = Danbooru::Safe; break; - case DanbooruPost::Questionable: - flags = DanbooruPost::Safe | DanbooruPost::Questionable; + case Danbooru::Questionable: + flags = Danbooru::Safe | Danbooru::Questionable; break; - case DanbooruPost::Explicit: - flags = DanbooruPost::Safe | DanbooruPost::Questionable | DanbooruPost::Explicit; + case Danbooru::Explicit: + flags = Danbooru::Safe | Danbooru::Questionable | Danbooru::Explicit; break; } diff --git a/src/libdanbooru/servicebase.h b/src/libdanbooru/servicebase.h index c6198fc..6e4706d 100644 --- a/src/libdanbooru/servicebase.h +++ b/src/libdanbooru/servicebase.h @@ -66,7 +66,7 @@ protected: QString m_username; QString m_password; QSet m_blacklist; - DanbooruPost::Ratings m_maxRating; + Danbooru::Ratings m_maxRating; int m_maxPosts; int m_currentPage; QStringList m_tags; @@ -77,29 +77,17 @@ protected: public: - enum SupportedOperation { - PostDownload = 256, - TagDownload = 512, - TagSearch = 1024, - PoolDownload = 2048, - RelatedTagSearch = 4096 -}; enum ApiType { OriginalDanbooru = 16, - KonachanDanbooru = 32, + MoeBooru = 32, Gelbooru = 64, Unknown = 128 }; Q_DECLARE_FLAGS(ApiTypes, DanbooruServiceBase::ApiType) - -Q_DECLARE_FLAGS(SupportedOperations, DanbooruServiceBase::SupportedOperation) - - explicit DanbooruServiceBase(QUrl boardUrl = QUrl(), QString username = QString(), - QString password = QString(), KImageCache *cache = 0, - QObject *parent = 0); + explicit DanbooruServiceBase(QUrl boardUrl = QUrl(), QObject* parent=nullptr); virtual ~DanbooruServiceBase(); ///////////////////////////////////////////// @@ -145,7 +133,7 @@ Q_DECLARE_FLAGS(SupportedOperations, DanbooruServiceBase::SupportedOperation) /** * @return The maximum allowed rating for a post. **/ - const DanbooruPost::Ratings maximumAllowedRating() const; + const Danbooru::Ratings maximumAllowedRating() const; /** * @return The number of posts downloaded for each page (max 100) @@ -174,11 +162,6 @@ Q_DECLARE_FLAGS(SupportedOperations, DanbooruServiceBase::SupportedOperation) **/ void reset(); - /** - * @return The operations supported by the API. - **/ - virtual SupportedOperations supportedOperations() const = 0; - /////////////////////////////// // Common setters (non-virtual) /////////////////////////////// @@ -228,7 +211,7 @@ Q_DECLARE_FLAGS(SupportedOperations, DanbooruServiceBase::SupportedOperation) * downloaded. * **/ - void setMaximumAllowedRating(DanbooruPost::Rating rating); + void setMaximumAllowedRating(Danbooru::Rating rating); /** * @brief Set the maximum number of posts to download for each page. @@ -383,6 +366,5 @@ Q_SIGNALS: } -Q_DECLARE_OPERATORS_FOR_FLAGS(Danbooru::DanbooruServiceBase::SupportedOperations) -#endif \ No newline at end of file +#endif diff --git a/src/libdanbooru/utils.cpp b/src/libdanbooru/utils.cpp index 1c018e9..b3d8aa9 100644 --- a/src/libdanbooru/utils.cpp +++ b/src/libdanbooru/utils.cpp @@ -43,6 +43,20 @@ namespace { namespace Danbooru { + +static const QMap RATING_MAP = initRatingMap(); + +static const QMap< QString, Danbooru::Rating > initRatingMap() +{ + + QMap map; + map.insert("s", Safe); + map.insert("q", Questionable); + map.insert("e", Explicit); + + return map; + +} QUrl requestUrl(QUrl &url, const QString &path, const QString &username, const QString &password, @@ -133,7 +147,7 @@ QList< QVariant > parseDanbooruResult(QByteArray data, QString xlmElement, bool reader.addData(data); QList postData; - if (apiType != ApiType::OriginalDanbooru) { + if (apiType != ApiType::Danbooru) { while (!reader.atEnd() && !reader.hasError()) { @@ -212,7 +226,7 @@ QVariant parseDanbooruResult(QByteArray data, bool *result) return postData; } -bool isPostBlacklisted(DanbooruPost *post, QSet blacklist, DanbooruPost::Ratings maxRating) +bool isPostBlacklisted(DanbooruPost *post, QSet blacklist, Danbooru::Ratings maxRating) { if (post->rating() > maxRating) { @@ -243,4 +257,82 @@ void fixPostUrl(DanbooruPost *post, QUrl boardUrl) { } +QVariantMap parseResult(const QByteArray &data, ApiType type) { + + QVariantMap map; + bool result; + QVariantMap mapped = parseDanbooruResult(data, &result).toMap(); + + if (!result) { + return QVariantMap(); + } + + int id; + QSet tags; + int width; + int height; + int fileSize; + QUrl url; + QUrl thumbnailUrl; + QUrl sampleUrl; + Danbooru::Rating rating; + + switch(type) { + case Danbooru::MoeBooru: + tags = QSet::fromList(mapped.value("tags").toString().split(' ')); + id = mapped.value("id").toString().toInt(); + height = mapped.value("height").toString().toInt(); + width = mapped.value("width").toString().toInt(); + url = QUrl::fromUserInput(mapped.value("file_url").toString()); + thumbnailUrl = QUrl::fromUserInput(mapped.value("preview_url").toString()); + sampleUrl = QUrl::fromUserInput(mapped.value("sample_url").toString()); + rating = RATING_MAP.value(mapped.value("rating").toString()); + fileSize = mapped.value("file_size").toInt(); + break; + case Danbooru::Gelbooru: + id = 0; + tags = QSet(); + width = 0; + height = 0; + fileSize = 0; + url = QUrl(); + thumbnailUrl = QUrl(); + sampleUrl = QUrl(); + rating = Danbooru::Safe; + break; + default: + auto tagKey = mapped.contains("tag_string") ? QLatin1String("tag_string"): QLatin1String("tag-string"); + auto widthKey = mapped.contains("image_width") ? QLatin1String("image_width"): QLatin1String("image-width"); + auto heightKey = mapped.contains("image_height") ? QLatin1String("image_height"): QLatin1String("image-height"); + auto fileSizeKey = mapped.contains("file_size") ? QLatin1String("file_size"): QLatin1String("file-size"); + auto fileUrlKey = mapped.contains("file_url") ? QLatin1String("file_url"): QLatin1String("file-url"); + auto thumbnailUrlKey = mapped.contains("preview_file_url") ? QLatin1String("preview_file_url"): QLatin1String("preview-file-url"); + auto sampleUrlKey = mapped.contains("large_file_url") ? QLatin1String("large_file_url"): QLatin1String("large-file-url"); + + id = mapped.value("id").toString().toInt(); + tags = QSet::fromList(mapped.value(tagKey).toString().split(' ')); + width = mapped.value(widthKey).toString().toInt(); + height = mapped.value(heightKey).toString().toInt(); + url = mapped.value(fileUrlKey).toUrl(); + thumbnailUrl = mapped.value(thumbnailUrlKey).toUrl(); + fileSize = mapped.value(fileSizeKey).toInt(); + rating = RATING_MAP.value(mapped.value("rating").toString()); + sampleUrl = mapped.value(sampleUrlKey).toUrl(); + break; + }; + + map.insert(QLatin1String("width"), width); + map.insert(QLatin1String("height"), height); + map.insert(QLatin1String("id"), id); + map.insert(QLatin1String("url"), url); + map.insert(QLatin1String("thumbnailUrl"), url); + map.insert(QLatin1String("sampleUrl"), sampleUrl); + map.insert(QLatin1String("rating"), rating); + map.insert(QLatin1String("size"), fileSize); + map.insert(QLatin1String("tags"), QVariant::fromValue(tags)); + + return(map); + +} + } // namespace Danbooru diff --git a/src/libdanbooru/utils.h b/src/libdanbooru/utils.h index e097691..695969a 100644 --- a/src/libdanbooru/utils.h +++ b/src/libdanbooru/utils.h @@ -24,12 +24,11 @@ // Qt -#include - -// KDE - +#include +#include #include + /** * @brief Commmon utilities for Danbooru classes. * @file utils.h @@ -102,7 +101,7 @@ QUrl requestUrl(QUrl &url, const QString &path, const QString &username, const QString &password); QList parseDanbooruResult(QByteArray data, QString xlmElement, - bool *result, ApiType=ApiType::KonachanDanbooru); + bool *result, ApiType=ApiType::MoeBooru); QVariant parseDanbooruResult(QByteArray data, bool *result); /** @@ -117,11 +116,15 @@ QVariant parseDanbooruResult(QByteArray data, bool *result); * @return true if the post is unwanted, false otherwise. * @author Luca Beltrame (lbeltrame@kde.org) */ -bool isPostBlacklisted(DanbooruPost *post, QSet blacklist, DanbooruPost::Ratings maxRating); +bool isPostBlacklisted(DanbooruPost *post, QSet blacklist, Danbooru::Ratings maxRating); void fixPostUrl(DanbooruPost *post, QUrl boardUrl); +QVariantMap parseResult(const QByteArray &data, Danbooru::ApiType type); +QVariantMap parseResult(const QXmlStreamAttributes &data, Danbooru::ApiType type); + +static const QMap< QString, Danbooru::Rating > initRatingMap(); + } - #endif // UTILS_H diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 7b2384e..659ff02 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -71,10 +71,10 @@ namespace Danbooru { -QHash DanbooruMainWindow::ratingMap = { - {0, DanbooruPost::Safe}, - {1, DanbooruPost::Questionable}, - {2, DanbooruPost::Explicit} +QHash DanbooruMainWindow::ratingMap = { + {0, Danbooru::Safe}, + {1, Danbooru::Questionable}, + {2, Danbooru::Explicit} }; DanbooruMainWindow::DanbooruMainWindow(QWidget *parent) @@ -99,7 +99,7 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent) qmlRegisterType("DanbooruClient", 1, 0, "DanbooruPost"); qmlRegisterType("DanbooruClient", 1, 0, "DanbooruService"); - qRegisterMetaType(); + qRegisterMetaType(); loadSettings(); diff --git a/src/mainwindow.h b/src/mainwindow.h index 8792c8f..90007f5 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -72,7 +72,7 @@ private: QTableView *m_tableView; KImageCache *m_cache; - static QHash ratingMap; + static QHash ratingMap; public: /**