Clean up DanbooruService
Remove multi_get for now (broken in kio_http) Add a default constructor (needed for QML) Explicitly delete posts
This commit is contained in:
		
					parent
					
						
							
								719ef7ecaa
							
						
					
				
			
			
				commit
				
					
						f8b59e78b5
					
				
			
		
					 2 changed files with 45 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -20,6 +20,10 @@
 | 
			
		|||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// STL
 | 
			
		||||
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
 | 
			
		||||
// Qt
 | 
			
		||||
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +35,7 @@
 | 
			
		|||
#include <KIO/Job>
 | 
			
		||||
#include <KIO/Scheduler>
 | 
			
		||||
#include <KImageCache>
 | 
			
		||||
#include <KIO/MultiGetJob>
 | 
			
		||||
 | 
			
		||||
// Own
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +49,7 @@ namespace Danbooru
 | 
			
		|||
{
 | 
			
		||||
 | 
			
		||||
using KIO::StoredTransferJob;
 | 
			
		||||
using KIO::MultiGetJob;
 | 
			
		||||
 | 
			
		||||
const QString DanbooruService::POST_URL = "post/index.json" ;
 | 
			
		||||
const QString DanbooruService::TAG_URL = "tag/index.xml";
 | 
			
		||||
| 
						 | 
				
			
			@ -52,6 +58,16 @@ const QString DanbooruService::ARTIST_URL = "artist/index.json";
 | 
			
		|||
const QString DanbooruService::POOL_DATA_URL = "pool/show.xml";
 | 
			
		||||
const QString DanbooruService::RELATED_TAG_URL = "tag/related.json";
 | 
			
		||||
 | 
			
		||||
DanbooruService::DanbooruService(QObject *parent):
 | 
			
		||||
        QObject(parent),
 | 
			
		||||
        m_url(QUrl()),
 | 
			
		||||
        m_username(QString()),
 | 
			
		||||
        m_password(QString()),
 | 
			
		||||
        m_maxRating(DanbooruPost::Safe),
 | 
			
		||||
        m_postsToFetch(0),
 | 
			
		||||
        m_cache(0){
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DanbooruService::DanbooruService(QUrl &boardUrl, QString username,
 | 
			
		||||
                                 QString password, KImageCache *cache,
 | 
			
		||||
                                 QObject *parent):
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +83,8 @@ DanbooruService::DanbooruService(QUrl &boardUrl, QString username,
 | 
			
		|||
 | 
			
		||||
DanbooruService::~DanbooruService()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    qDeleteAll(m_posts);
 | 
			
		||||
    m_posts.clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DanbooruService::getPostList(int page, QStringList tags, int limit)
 | 
			
		||||
| 
						 | 
				
			
			@ -384,6 +401,10 @@ 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()));
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -419,6 +440,21 @@ void DanbooruService::processPostList(KJob *job)
 | 
			
		|||
 | 
			
		||||
    m_postsToFetch = postList.length();
 | 
			
		||||
 | 
			
		||||
    int postId = 0;
 | 
			
		||||
 | 
			
		||||
    for (auto element: postList) {
 | 
			
		||||
        QVariantMap map = element.toMap();
 | 
			
		||||
        DanbooruPost *post = new DanbooruPost(map);
 | 
			
		||||
        if (isPostBlacklisted(post, m_blacklist, m_maxRating)) {
 | 
			
		||||
            m_postsToFetch--;
 | 
			
		||||
            delete post;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        m_posts.insert(postId, post);
 | 
			
		||||
        postId++;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (auto element : postList) {
 | 
			
		||||
 | 
			
		||||
        QVariantMap map = element.toMap();
 | 
			
		||||
| 
						 | 
				
			
			@ -434,9 +470,10 @@ void DanbooruService::processPostList(KJob *job)
 | 
			
		|||
 | 
			
		||||
        QPixmap pix;
 | 
			
		||||
 | 
			
		||||
        // Usare QHash<id, url> per KIO::multi_get!
 | 
			
		||||
 | 
			
		||||
        if (m_cache->findPixmap(post->thumbnailUrl().url(), &pix)) {
 | 
			
		||||
 | 
			
		||||
            qDebug() << "in cache";
 | 
			
		||||
            post->setPixmap(pix);
 | 
			
		||||
            Q_EMIT(postDownloaded(post));
 | 
			
		||||
            m_postsToFetch--;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,6 +95,7 @@ private:
 | 
			
		|||
    QString m_password;
 | 
			
		||||
    QSet<QString> m_blacklist;
 | 
			
		||||
    DanbooruPost::Ratings m_maxRating;
 | 
			
		||||
    QHash<int, DanbooruPost*> m_posts;
 | 
			
		||||
 | 
			
		||||
    unsigned int m_postsToFetch; // To tell when to quit
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -102,6 +103,9 @@ private:
 | 
			
		|||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    DanbooruService(QObject *parent = 0);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief Construct a default instance of the service.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -130,8 +134,8 @@ public:
 | 
			
		|||
     * @param limit The number of posts to fetch (maximum 100)
 | 
			
		||||
     *
 | 
			
		||||
     **/
 | 
			
		||||
    void getPostList(int page = 1, QStringList tags = QStringList(),
 | 
			
		||||
                     int limit = 100);
 | 
			
		||||
    Q_INVOKABLE void getPostList(int page = 1, QStringList tags = QStringList(),
 | 
			
		||||
                                 int limit = 100);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief Get a list of pools from the board.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue