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,7 +134,7 @@ public:
|
|||
* @param limit The number of posts to fetch (maximum 100)
|
||||
*
|
||||
**/
|
||||
void getPostList(int page = 1, QStringList tags = QStringList(),
|
||||
Q_INVOKABLE void getPostList(int page = 1, QStringList tags = QStringList(),
|
||||
int limit = 100);
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue