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:
Luca Beltrame 2015-02-12 21:31:30 +01:00
parent e1045e1fa6
commit f4566d3aca
2 changed files with 119 additions and 49 deletions

View file

@ -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