Start simplifying APIs
This commit is contained in:
		
					parent
					
						
							
								63d2dfdf9c
							
						
					
				
			
			
				commit
				
					
						f7f27699ca
					
				
			
		
					 13 changed files with 178 additions and 287 deletions
				
			
		| 
						 | 
				
			
			@ -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()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,11 +19,8 @@
 | 
			
		|||
 | 
			
		||||
// Qt
 | 
			
		||||
 | 
			
		||||
#include <QtCore/QString>
 | 
			
		||||
#include <QtGui/QPixmap>
 | 
			
		||||
 | 
			
		||||
// KDE
 | 
			
		||||
 | 
			
		||||
#include <QString>
 | 
			
		||||
#include <QPixmap>
 | 
			
		||||
#include <QUrl>
 | 
			
		||||
 | 
			
		||||
// Own
 | 
			
		||||
| 
						 | 
				
			
			@ -33,94 +30,6 @@
 | 
			
		|||
namespace Danbooru
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
const QMap<QString, DanbooruPost::Rating> 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<QString>::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<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) {
 | 
			
		||||
 | 
			
		||||
    m_tags = QSet<QString>::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<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)
 | 
			
		||||
{
 | 
			
		||||
    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<QString> >();
 | 
			
		||||
    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<Danbooru::Rating>();
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DanbooruPost::DanbooruPost(QVariantMap postData, QPixmap pixmap,
 | 
			
		||||
//                            QObject *parent):
 | 
			
		||||
//     QObject(parent),
 | 
			
		||||
//     m_pixmap(pixmap)
 | 
			
		||||
// {
 | 
			
		||||
//
 | 
			
		||||
//     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 = 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<QString, DanbooruPost::Rating> 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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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<QString> m_tags;
 | 
			
		||||
    DanbooruPost::Rating  m_rating;
 | 
			
		||||
 | 
			
		||||
    static const QMap<QString, Rating> 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<QString>)
 | 
			
		||||
 | 
			
		||||
#endif // DANBOORUPOST_H
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,7 +90,7 @@ private:
 | 
			
		|||
    QString m_username;
 | 
			
		||||
    QString m_password;
 | 
			
		||||
    QSet<QString> 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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,7 @@
 | 
			
		|||
 * along with Danbooru Client. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ protected:
 | 
			
		|||
    QString m_username;
 | 
			
		||||
    QString m_password;
 | 
			
		||||
    QSet<QString> 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
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +44,20 @@ namespace {
 | 
			
		|||
namespace Danbooru
 | 
			
		||||
{
 | 
			
		||||
    
 | 
			
		||||
static const QMap<QString, Rating> RATING_MAP = initRatingMap();
 | 
			
		||||
 | 
			
		||||
static const QMap< QString, Danbooru::Rating > initRatingMap()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    QMap<QString, Danbooru::Rating> 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,
 | 
			
		||||
                const dictMap ¶meters, const QStringList &tags)
 | 
			
		||||
| 
						 | 
				
			
			@ -133,7 +147,7 @@ QList< QVariant > parseDanbooruResult(QByteArray data, QString xlmElement, bool
 | 
			
		|||
    reader.addData(data);
 | 
			
		||||
    QList<QVariant> 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<QString> blacklist, DanbooruPost::Ratings maxRating)
 | 
			
		||||
bool isPostBlacklisted(DanbooruPost *post, QSet<QString> 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<QString> tags;
 | 
			
		||||
    int width;
 | 
			
		||||
    int height;
 | 
			
		||||
    int fileSize;
 | 
			
		||||
    QUrl url;
 | 
			
		||||
    QUrl thumbnailUrl;
 | 
			
		||||
    QUrl sampleUrl;
 | 
			
		||||
    Danbooru::Rating rating;
 | 
			
		||||
    
 | 
			
		||||
    switch(type) {
 | 
			
		||||
        case Danbooru::MoeBooru:
 | 
			
		||||
            tags = QSet<QString>::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<QString>();
 | 
			
		||||
            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<QString>::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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,12 +24,11 @@
 | 
			
		|||
 | 
			
		||||
// Qt
 | 
			
		||||
 | 
			
		||||
#include <QtCore/QStringList>
 | 
			
		||||
 | 
			
		||||
// KDE
 | 
			
		||||
 | 
			
		||||
#include <QStringList>
 | 
			
		||||
#include <QVariantMap>
 | 
			
		||||
#include <QUrl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @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<QVariant> 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<QString> blacklist, DanbooruPost::Ratings maxRating);
 | 
			
		||||
bool isPostBlacklisted(DanbooruPost *post, QSet<QString> 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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,10 +71,10 @@
 | 
			
		|||
namespace Danbooru
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
QHash<int, DanbooruPost::Rating> DanbooruMainWindow::ratingMap = {
 | 
			
		||||
    {0, DanbooruPost::Safe},
 | 
			
		||||
    {1, DanbooruPost::Questionable},
 | 
			
		||||
    {2, DanbooruPost::Explicit}
 | 
			
		||||
QHash<int, Danbooru::Rating> DanbooruMainWindow::ratingMap = {
 | 
			
		||||
    {0, Danbooru::Safe},
 | 
			
		||||
    {1, Danbooru::Questionable},
 | 
			
		||||
    {2, Danbooru::Explicit}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
DanbooruMainWindow::DanbooruMainWindow(QWidget *parent)
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +99,7 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent)
 | 
			
		|||
 | 
			
		||||
    qmlRegisterType<Danbooru::DanbooruPost>("DanbooruClient", 1, 0, "DanbooruPost");
 | 
			
		||||
    qmlRegisterType<Danbooru::DanbooruService>("DanbooruClient", 1, 0, "DanbooruService");
 | 
			
		||||
    qRegisterMetaType<DanbooruPost::Rating>();
 | 
			
		||||
    qRegisterMetaType<Danbooru::Rating>();
 | 
			
		||||
 | 
			
		||||
    loadSettings();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ private:
 | 
			
		|||
 | 
			
		||||
    QTableView *m_tableView;
 | 
			
		||||
    KImageCache *m_cache;
 | 
			
		||||
    static QHash<int, DanbooruPost::Rating> ratingMap;
 | 
			
		||||
    static QHash<int, Danbooru::Rating> ratingMap;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue