Large refactoring of DanbooruService
The idea is to use a long-lived DanbooruService instance, rather than recreating it, so move most of the parameters via setters and getters. Still needs some adjustments for resetting.
This commit is contained in:
		
					parent
					
						
							
								e1045e1fa6
							
						
					
				
			
			
				commit
				
					
						f4566d3aca
					
				
			
		
					 2 changed files with 119 additions and 49 deletions
				
			
		| 
						 | 
				
			
			@ -66,6 +66,9 @@ DanbooruService::DanbooruService(QUrl boardUrl, QString username,
 | 
			
		|||
    m_username(username),
 | 
			
		||||
    m_password(password),
 | 
			
		||||
    m_maxRating(Danbooru::DanbooruPost::Safe),
 | 
			
		||||
    m_maxPosts(10),
 | 
			
		||||
    m_currentPage(1),
 | 
			
		||||
    m_tags(QStringList()),
 | 
			
		||||
    m_postsToFetch(0),
 | 
			
		||||
    m_cache(cache)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -73,26 +76,23 @@ DanbooruService::DanbooruService(QUrl boardUrl, QString username,
 | 
			
		|||
 | 
			
		||||
DanbooruService::~DanbooruService()
 | 
			
		||||
{
 | 
			
		||||
    qDeleteAll(m_posts);
 | 
			
		||||
    m_posts.clear();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::getPostList(int page, QStringList tags, int limit)
 | 
			
		||||
void DanbooruService::getPostList()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    // We can't fetch more than 100 items, API limitation
 | 
			
		||||
 | 
			
		||||
    qDebug() << "Fetching with URL" << m_url;
 | 
			
		||||
 | 
			
		||||
    limit = limit > 100 ? 100 : limit;
 | 
			
		||||
 | 
			
		||||
    QMap<QString, QString> parameters;
 | 
			
		||||
 | 
			
		||||
    parameters.insert("limit", QString::number(limit));
 | 
			
		||||
    parameters.insert("page", QString::number(page));
 | 
			
		||||
    parameters.insert("limit", QString::number(m_maxPosts));
 | 
			
		||||
    parameters.insert("page", QString::number(m_currentPage));
 | 
			
		||||
 | 
			
		||||
    QUrl danbooruUrl = requestUrl(m_url, POST_URL, m_username,
 | 
			
		||||
                                  m_password, parameters, tags);
 | 
			
		||||
                                  m_password, parameters, m_tags);
 | 
			
		||||
 | 
			
		||||
    qDebug() << "Final constructed post URL" << danbooruUrl;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -182,16 +182,16 @@ void DanbooruService::getPool(int poolId, int page)
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::getPoolList(int page)
 | 
			
		||||
void DanbooruService::getPoolList()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    QUrl danbooruUrl;
 | 
			
		||||
 | 
			
		||||
    if (page == 0) {
 | 
			
		||||
    if (m_currentPage == 1) {
 | 
			
		||||
        danbooruUrl = requestUrl(m_url, POOL_URL, m_username, m_password);
 | 
			
		||||
    } else {
 | 
			
		||||
        QMap<QString, QString> map;
 | 
			
		||||
        map.insert("page", QString::number(page));
 | 
			
		||||
        map.insert("page", QString::number(m_currentPage));
 | 
			
		||||
 | 
			
		||||
        danbooruUrl = requestUrl(m_url, POOL_URL, m_username,
 | 
			
		||||
                                 m_password, map);
 | 
			
		||||
| 
						 | 
				
			
			@ -323,16 +323,6 @@ void DanbooruService::getRelatedTags(const QStringList &tags,
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Getters / setters
 | 
			
		||||
 | 
			
		||||
void DanbooruService::setBlacklist(const QSet< QString > &blacklist)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    if (!blacklist.isEmpty()) {
 | 
			
		||||
        m_blacklist = blacklist;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const QSet< QString > DanbooruService::blacklist() const
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -359,26 +349,11 @@ const QStringList DanbooruService::allowedRatings() const
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::setMaximumAllowedRating(DanbooruPost::Rating rating)
 | 
			
		||||
{
 | 
			
		||||
    DanbooruPost::Ratings flags;
 | 
			
		||||
 | 
			
		||||
    switch (rating) {
 | 
			
		||||
    case DanbooruPost::Safe:
 | 
			
		||||
        flags = DanbooruPost::Safe;
 | 
			
		||||
        break;
 | 
			
		||||
    case DanbooruPost::Questionable:
 | 
			
		||||
        flags = DanbooruPost::Safe | DanbooruPost::Questionable;
 | 
			
		||||
        break;
 | 
			
		||||
    case DanbooruPost::Explicit:
 | 
			
		||||
        flags = DanbooruPost::Safe | DanbooruPost::Questionable | DanbooruPost::Explicit;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_maxRating = flags;
 | 
			
		||||
 | 
			
		||||
int DanbooruService::currentPage() const {
 | 
			
		||||
    return m_currentPage;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const DanbooruPost::Ratings DanbooruService::maximumAllowedRating() const
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -386,6 +361,23 @@ const DanbooruPost::Ratings DanbooruService::maximumAllowedRating() const
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int DanbooruService::maxPosts() const
 | 
			
		||||
{
 | 
			
		||||
    return m_maxPosts;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::nextPostPage()
 | 
			
		||||
{
 | 
			
		||||
    m_currentPage++;
 | 
			
		||||
    getPostList();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QStringList DanbooruService::postTags() const
 | 
			
		||||
{
 | 
			
		||||
    return m_tags;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Slots
 | 
			
		||||
 | 
			
		||||
void DanbooruService::processPostList(KJob *job)
 | 
			
		||||
| 
						 | 
				
			
			@ -393,10 +385,6 @@ void DanbooruService::processPostList(KJob *job)
 | 
			
		|||
 | 
			
		||||
//     qDebug() << "Got post data OK";
 | 
			
		||||
 | 
			
		||||
    if (!m_posts.isEmpty()) {
 | 
			
		||||
        m_posts.clear();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (job->error()) {
 | 
			
		||||
        Q_EMIT(downloadError(job->errorString()));
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -523,6 +511,16 @@ void DanbooruService::processPostList(KJob *job)
 | 
			
		|||
void DanbooruService::downloadAllTags(KJob *job)
 | 
			
		||||
{
 | 
			
		||||
    Q_UNUSED(job)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::setBlacklist(const QSet< QString > &blacklist)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    if (!blacklist.isEmpty()) {
 | 
			
		||||
        m_blacklist = blacklist;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::setBoardUrl(const QUrl& url)
 | 
			
		||||
| 
						 | 
				
			
			@ -530,6 +528,26 @@ void DanbooruService::setBoardUrl(const QUrl& url)
 | 
			
		|||
    m_url = url;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::setMaximumAllowedRating(DanbooruPost::Rating rating)
 | 
			
		||||
{
 | 
			
		||||
    DanbooruPost::Ratings flags;
 | 
			
		||||
 | 
			
		||||
    switch (rating) {
 | 
			
		||||
    case DanbooruPost::Safe:
 | 
			
		||||
        flags = DanbooruPost::Safe;
 | 
			
		||||
        break;
 | 
			
		||||
    case DanbooruPost::Questionable:
 | 
			
		||||
        flags = DanbooruPost::Safe | DanbooruPost::Questionable;
 | 
			
		||||
        break;
 | 
			
		||||
    case DanbooruPost::Explicit:
 | 
			
		||||
        flags = DanbooruPost::Safe | DanbooruPost::Questionable | DanbooruPost::Explicit;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_maxRating = flags;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::setUserName(const QString& username)
 | 
			
		||||
{
 | 
			
		||||
    m_username = username;
 | 
			
		||||
| 
						 | 
				
			
			@ -540,9 +558,26 @@ void DanbooruService::setPassword(const QString& password)
 | 
			
		|||
    m_password = password;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::setPostTags(const QStringList& tags)
 | 
			
		||||
{
 | 
			
		||||
    if (!tags.isEmpty()) {
 | 
			
		||||
        m_tags = tags;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::setImageCache(KImageCache* cache)
 | 
			
		||||
{
 | 
			
		||||
    m_cache = cache;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::setMaxPosts(int number) {
 | 
			
		||||
 | 
			
		||||
    m_maxPosts = number ? number < 100: 100;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::setCurrentPage(int page) {
 | 
			
		||||
    m_currentPage = page;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace Danbooru
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,7 +95,9 @@ private:
 | 
			
		|||
    QString m_password;
 | 
			
		||||
    QSet<QString> m_blacklist;
 | 
			
		||||
    DanbooruPost::Ratings m_maxRating;
 | 
			
		||||
    QHash<int, DanbooruPost*> m_posts;
 | 
			
		||||
    int m_maxPosts;
 | 
			
		||||
    int m_currentPage;
 | 
			
		||||
    QStringList m_tags;
 | 
			
		||||
 | 
			
		||||
    unsigned int m_postsToFetch; // To tell when to quit
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -124,6 +126,9 @@ public:
 | 
			
		|||
     **/
 | 
			
		||||
    ~DanbooruService();
 | 
			
		||||
 | 
			
		||||
    int currentPage() const;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief Get posts from a the board.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -132,16 +137,13 @@ public:
 | 
			
		|||
     * @param limit The number of posts to fetch (maximum 100)
 | 
			
		||||
     *
 | 
			
		||||
     **/
 | 
			
		||||
    Q_INVOKABLE void getPostList(int page = 1, QStringList tags = QStringList(),
 | 
			
		||||
                                 int limit = 100);
 | 
			
		||||
    Q_INVOKABLE void getPostList();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief Get a list of pools from the board.
 | 
			
		||||
     *
 | 
			
		||||
     * @param page The page to get pools from (default: 1)
 | 
			
		||||
     *
 | 
			
		||||
     **/
 | 
			
		||||
    void getPoolList(int page = 1);
 | 
			
		||||
    void getPoolList();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief Get the posts associated with a specific pool ID.
 | 
			
		||||
| 
						 | 
				
			
			@ -191,6 +193,23 @@ public:
 | 
			
		|||
     **/
 | 
			
		||||
    const QSet<QString> blacklist() const;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return The number of posts downloaded for each page (max 100)
 | 
			
		||||
     **/
 | 
			
		||||
    int maxPosts() const;
 | 
			
		||||
 | 
			
		||||
    void nextPostPage();
 | 
			
		||||
 | 
			
		||||
    QStringList postTags() const;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief Set blacklisted tags.
 | 
			
		||||
     *
 | 
			
		||||
     * Posts with blacklisted tags are not downloaded.
 | 
			
		||||
     *
 | 
			
		||||
     * @param blacklist A QSet<QString> including unwanted tags.
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    void setBlacklist(const QSet<QString> &blacklist);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			@ -236,8 +255,24 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    void setUserName(const QString& username);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief Set the password used for login.
 | 
			
		||||
     *
 | 
			
		||||
     * It should not be the password itself, but a SHA1 hash
 | 
			
		||||
     * with a specific salt (which is board-dependent; check their
 | 
			
		||||
     * API access rules).
 | 
			
		||||
     *
 | 
			
		||||
     * @param username The salted password to use.
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    void setPassword(const QString& password);
 | 
			
		||||
 | 
			
		||||
    void setMaxPosts(int number);
 | 
			
		||||
 | 
			
		||||
    void setCurrentPage(int page);
 | 
			
		||||
 | 
			
		||||
    void setPostTags(const QStringList& tags);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
private Q_SLOTS:
 | 
			
		||||
    void processPostList(KJob *job);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue