diff --git a/src/libdanbooru/danbooru_donmai.cpp b/src/libdanbooru/danbooru_donmai.cpp index bf83f7a..00c0954 100644 --- a/src/libdanbooru/danbooru_donmai.cpp +++ b/src/libdanbooru/danbooru_donmai.cpp @@ -38,28 +38,39 @@ namespace Danbooru { // URIs /////// -const QLatin1String DanbooruService::postUri() const { - return QLatin1String("posts.json"); +const QUrl DanbooruService::postUri() const { + auto url = QUrl(m_url); + url.setPath("/posts.json"); + return url; } -const QLatin1String DanbooruService::poolUri() const { - return QLatin1String("pools.json"); +const QUrl DanbooruService::poolUri() const { + auto url = QUrl(m_url); + url.setPath("/pools.json"); + return url; + } -const QLatin1String DanbooruService::artistUri() const { - return QLatin1String("artists.json"); +const QUrl DanbooruService::artistUri() const { + auto url = QUrl(m_url); + url.setPath("/artists.json"); + return url; } -const QLatin1String DanbooruService::tagUri() const { - return QLatin1String("tags.json"); +const QUrl DanbooruService::tagUri() const { + auto url = QUrl(m_url); + url.setPath("/tags.json"); + return url; } -const QLatin1String DanbooruService::poolDataUri() const { - return QLatin1String("pools/%1.json"); +const QUrl DanbooruService::poolDataUri() const { + return QUrl(); } -const QLatin1String DanbooruService::relatedTagUri() const { - return QLatin1String("related_tag.json"); +const QUrl DanbooruService::relatedTagUri() const { + auto url = QUrl(m_url); + url.setPath("/related_tag.json"); + return url; } //////////////// @@ -83,7 +94,7 @@ void DanbooruService::getPostList() { parameters.insert("limit", QString::number(m_maxPosts)); parameters.insert("page", QString::number(m_currentPage)); - QUrl danbooruUrl = requestUrl(m_url, postUri(), m_username, + QUrl danbooruUrl = requestUrl(postUri(), m_username, m_password, parameters, m_tags); qCDebug(LIBDANBOORU) << "Final constructed post URL" << danbooruUrl; @@ -101,12 +112,12 @@ void DanbooruService::getPoolList(int limit) QUrl danbooruUrl; if (m_currentPage == 1) { - danbooruUrl = requestUrl(m_url, poolUri(), m_username, m_password); + danbooruUrl = requestUrl(poolUri(), m_username, m_password); } else { QMap map; map.insert("page", QString::number(m_currentPage)); - danbooruUrl = requestUrl(m_url, poolUri(), m_username, + danbooruUrl = requestUrl(poolUri(), m_username, m_password, map); } @@ -161,18 +172,20 @@ void DanbooruService::getPool(int poolId, int page) parameters.insert("page", QString::number(page)); } - const QString dataUri = QString(poolDataUri()).arg(poolId); - - QUrl danbooruUrl = requestUrl(m_url, dataUri, m_username, + QUrl dataUri; + dataUri = QUrl(m_url); + dataUri.setPath(QString("pools/%1.json").arg(poolId)); + + QUrl danbooruUrl = requestUrl(dataUri, m_username, m_password, parameters); - + qCDebug(LIBDANBOORU) << "Final constructed URL pool" << danbooruUrl; KIO::StoredTransferJob *job = KIO::storedGet(danbooruUrl, KIO::NoReload, KIO::HideProgressInfo); connect(job, &StoredTransferJob::result, [this](KJob * job) { - + if (job->error()) { Q_EMIT(downloadError(job->errorString())); return; @@ -182,22 +195,24 @@ void DanbooruService::getPool(int poolId, int page) QByteArray data = jobResult->data(); bool ok; const QList postList = parseResult(data, apiType(), Pool, &ok); - + if (!ok) { Q_EMIT(downloadError(QString("Unable to decode data"))); return; } - + const auto postIds = postList.at(0).value("raw_post_data").toList(); - + m_postsToFetch = postIds.length(); - - for (const auto postId: postIds) { - QUrl postUrl = requestUrl(m_url, QString("posts/%1.json").arg(postId.toString()), m_username, + + for (const auto &postId: postIds) { + auto postUrl = QUrl(m_url); + postUrl.setPath(QString("/posts/%1.json").arg(postId.toString())); + postUrl = requestUrl(postUrl, m_username, m_password); StoredTransferJob* postJob = KIO::storedGet(postUrl, KIO::NoReload, KIO::HideProgressInfo); - + connect(postJob, &StoredTransferJob::result, this, &DanbooruService::processSinglePost); } }); @@ -213,7 +228,7 @@ void DanbooruService::getTagList(int limit, QString name) } parameters.insert("search[order]", "date"); - QUrl danbooruUrl = requestUrl(m_url, tagUri(), m_username, m_password, + QUrl danbooruUrl = requestUrl(tagUri(), m_username, m_password, parameters); // qCDebug(LIBDANBOORU) << "Final constructed tag URL" << danbooruUrl.url(); @@ -250,7 +265,7 @@ void DanbooruService::getRelatedTags(const QStringList &tags, parameters.insert("type", type); parameters.insert("query", tags.join(" ")); - QUrl danbooruUrl = requestUrl(m_url, relatedTagUri(), m_username, + QUrl danbooruUrl = requestUrl(relatedTagUri(), m_username, m_password, parameters); // qCDebug(LIBDANBOORU) << "Final constructed related tag URL" << danbooruUrl; @@ -347,7 +362,7 @@ void DanbooruService::processTagList(KJob *job) } void DanbooruService::processSinglePost(KJob* job) { - + if (job->error()) { Q_EMIT(downloadError(job->errorString())); @@ -364,7 +379,7 @@ void DanbooruService::processSinglePost(KJob* job) { QByteArray data = jobResult->data(); bool ok; - + QList postList; postList = parseResult(data, apiType(), Danbooru::Post, &ok); if (!ok) { @@ -379,46 +394,27 @@ void DanbooruService::processSinglePost(KJob* job) { Q_EMIT(postDownloadFinished()); return; } - + DanbooruPost* post = new DanbooruPost(postList.at(0)); if (isPostBlacklisted(post, m_blacklist, m_maxRating)) { m_postsToFetch--; delete post; return; } - + QPixmap pix; qCDebug(LIBDANBOORU) << "About to download image"; - - if (m_cache && m_cache->findPixmap(post->thumbnailUrl().url(), &pix)) { - - post->setPixmap(pix); - Q_EMIT(postDownloaded(post)); - m_postsToFetch--; - if (m_postsToFetch == 0) { - qCDebug(LIBDANBOORU) << "Post download finished"; - Q_EMIT(postDownloadFinished()); - } + StoredTransferJob *pixmapJob = KIO::storedGet(post->thumbnailUrl(), + KIO::NoReload, KIO::HideProgressInfo); - } else { - StoredTransferJob *pixmapJob = KIO::storedGet(post->thumbnailUrl(), - KIO::NoReload, KIO::HideProgressInfo); + QVariant variant; + variant.setValue(post); - // We don't want to overload the servers, so set some rational - // priority + pixmapJob->setProperty("post", variant); + pixmapJob->setProperty("pixmap", pix); + connect(pixmapJob, &StoredTransferJob::result, this, &DanbooruServiceBase::processPixmap); - KIO::Scheduler::setJobPriority(static_cast(pixmapJob), 1); - - QVariant variant; - variant.setValue(post); - - pixmapJob->setProperty("post", variant); - pixmapJob->setProperty("pixmap", pix); - connect(pixmapJob, &StoredTransferJob::result, this, &DanbooruServiceBase::processPixmap); - } - - } diff --git a/src/libdanbooru/danbooru_donmai.h b/src/libdanbooru/danbooru_donmai.h index 9354c39..5d29f62 100644 --- a/src/libdanbooru/danbooru_donmai.h +++ b/src/libdanbooru/danbooru_donmai.h @@ -32,12 +32,12 @@ class DanbooruService: public DanbooruServiceBase { Q_OBJECT private: - const QLatin1String postUri() const override; - const QLatin1String poolUri() const override; - const QLatin1String artistUri() const override; - const QLatin1String tagUri() const override; - const QLatin1String poolDataUri() const override; - const QLatin1String relatedTagUri() const override; + const QUrl postUri() const override; + const QUrl poolUri() const override; + const QUrl artistUri() const override; + const QUrl tagUri() const override; + const QUrl poolDataUri() const override; + const QUrl relatedTagUri() const override; public: