diff --git a/src/libdanbooru/danbooru_donmai.cpp b/src/libdanbooru/danbooru_donmai.cpp index 9a52325..bf83f7a 100644 --- a/src/libdanbooru/danbooru_donmai.cpp +++ b/src/libdanbooru/danbooru_donmai.cpp @@ -59,7 +59,7 @@ const QLatin1String DanbooruService::poolDataUri() const { } const QLatin1String DanbooruService::relatedTagUri() const { - return QLatin1String("r.json"); + return QLatin1String("related_tag.json"); } //////////////// @@ -91,7 +91,7 @@ void DanbooruService::getPostList() { KIO::StoredTransferJob *job = KIO::storedGet(danbooruUrl, KIO::NoReload, KIO::HideProgressInfo); - connect(job, &KIO::StoredTransferJob::result, this, &DanbooruService::processPostList); + connect(job, &KIO::StoredTransferJob::result, this, &DanbooruServiceBase::processPostList); } @@ -209,9 +209,9 @@ void DanbooruService::getTagList(int limit, QString name) parameters.insert("limit", QString::number(limit)); if (!name.isEmpty()) { - parameters.insert("name", name); + parameters.insert("search[name]", name); } - parameters.insert("order", "date"); + parameters.insert("search[order]", "date"); QUrl danbooruUrl = requestUrl(m_url, tagUri(), m_username, m_password, parameters); @@ -248,9 +248,10 @@ void DanbooruService::getRelatedTags(const QStringList &tags, QMap parameters; parameters.insert("type", type); + parameters.insert("query", tags.join(" ")); QUrl danbooruUrl = requestUrl(m_url, relatedTagUri(), m_username, - m_password, parameters, tags); + m_password, parameters); // qCDebug(LIBDANBOORU) << "Final constructed related tag URL" << danbooruUrl; @@ -345,149 +346,6 @@ void DanbooruService::processTagList(KJob *job) } } -void DanbooruService::processPostList(KJob *job) -{ - - qCDebug(LIBDANBOORU) << "Got post data OK"; - - if (job->error()) { - Q_EMIT(downloadError(job->errorString())); - } - - StoredTransferJob *jobResult = qobject_cast(job); - - if (jobResult == 0) { - Q_EMIT(downloadError(QString("Internal error"))); - return; - - } - - QByteArray data = jobResult->data(); - - bool ok; - bool is_pool = job->property("is_pool").toBool(); - - QList postList; - - if (is_pool) { - // Special cases for pools - QVariantMap postMap = parseResult(data, apiType(), Danbooru::Pool, &ok).at(0); - auto postData = postMap.value("raw_post_data").toList(); - for (const auto post: postData) { - postList.append(extractPostData(post, apiType())); - } - - } else { - postList = parseResult(data, apiType(), Danbooru::Post, &ok); - } - - if (!ok) { - Q_EMIT(downloadError(QString("Unable to decode data"))); - return; - } - - // How many posts do we have to fetch? - - if (postList.isEmpty()) { - qCDebug(LIBDANBOORU) << "No posts found"; - Q_EMIT(postDownloadFinished()); - return; - } - - m_postsToFetch = postList.length(); - qCDebug(LIBDANBOORU) << "Found " << m_postsToFetch << "posts to fetch" << "with limit" << m_maxPosts; - - // This is mostly needed for pools - if (postList.length() > m_maxPosts) { - m_postsToFetch = m_maxPosts; - postList = postList.mid(0, m_maxPosts); - } - - for (const auto element : qAsConst(postList)) { - - DanbooruPost *post = new DanbooruPost(element); - - // Remove unwanted posts - - if (isPostBlacklisted(post, m_blacklist, m_maxRating)) { - m_postsToFetch--; - delete post; - continue; - } - - QPixmap pix; - - qCDebug(LIBDANBOORU) << "About to download images"; - - if (m_cache && m_cache->findPixmap(post->thumbnailUrl().url(), &pix)) { - - qDebug() << "reimplement"; - post->setPixmap(pix); - Q_EMIT(postDownloaded(post)); - m_postsToFetch--; - - if (m_postsToFetch == 0) { - qCDebug(LIBDANBOORU) << "Post download finished"; - Q_EMIT(postDownloadFinished()); - } - - } else { - - qCDebug(LIBDANBOORU) << "Downloading image" << post->thumbnailUrl(); - StoredTransferJob *pixmapJob = KIO::storedGet(post->thumbnailUrl(), - KIO::NoReload, KIO::HideProgressInfo); - - // We don't want to overload the servers, so set some rational - // priority - - KIO::Scheduler::setJobPriority(static_cast(pixmapJob), 1); - - QVariant variant; - variant.setValue(post); - - connect(pixmapJob, &StoredTransferJob::result, this, [post, this, pix](KJob * job) mutable { - - if (job->error()) - { - Q_EMIT(downloadError(job->errorString())); - return; - } - - StoredTransferJob *jobResult = qobject_cast(job); - - if (!pix.loadFromData(jobResult->data())) - { - Q_EMIT(downloadError(QString("Pixmap data could not be loaded"))); - return; - } - - post->setPixmap(pix); - - if (m_cache) - { - //qCDebug(LIBDANBOORU) << "Inserting item in cache"; - m_cache->insertPixmap(post->thumbnailUrl().url(), pix); - } - - m_postsToFetch--; // One less post to do - - qCDebug(LIBDANBOORU) << "Current posts remaining: " << m_postsToFetch; - Q_EMIT(postDownloaded(post)); - - if (m_postsToFetch == 0) - { - qCDebug(LIBDANBOORU) << "Post download finished"; - Q_EMIT(postDownloadFinished()); - } - - }); - - } - - } - -} - void DanbooruService::processSinglePost(KJob* job) { if (job->error()) @@ -557,58 +415,12 @@ void DanbooruService::processSinglePost(KJob* job) { pixmapJob->setProperty("post", variant); pixmapJob->setProperty("pixmap", pix); - connect(pixmapJob, &StoredTransferJob::result, this, &DanbooruService::processPixmap); + connect(pixmapJob, &StoredTransferJob::result, this, &DanbooruServiceBase::processPixmap); } } -void DanbooruService::processPixmap(KJob* job) { - - if (job->error()) - { - Q_EMIT(downloadError(job->errorString())); - return; - } - - StoredTransferJob *jobResult = qobject_cast(job); - - if (jobResult == 0) { - Q_EMIT(downloadError(QString("Internal error"))); - return; - - } - - QByteArray data = jobResult->data(); - auto post = job->property("post").value(); - auto pix = job->property("pixmap").value(); - - if (!pix.loadFromData(jobResult->data())) - { - Q_EMIT(downloadError(QString("Pixmap data could not be loaded"))); - return; - } - - post->setPixmap(pix); - - if (m_cache) - { - //qCDebug(LIBDANBOORU) << "Inserting item in cache"; - m_cache->insertPixmap(post->thumbnailUrl().url(), pix); - } - - m_postsToFetch--; // One less post to do - - qCDebug(LIBDANBOORU) << "Current posts remaining: " << m_postsToFetch; - Q_EMIT(postDownloaded(post)); - - if (m_postsToFetch == 0) - { - qCDebug(LIBDANBOORU) << "Post download finished"; - Q_EMIT(postDownloadFinished()); - } - -} void DanbooruService::downloadAllTags(KJob* job) { Q_UNUSED(job); diff --git a/src/libdanbooru/danbooru_donmai.h b/src/libdanbooru/danbooru_donmai.h index 7bd01f8..9354c39 100644 --- a/src/libdanbooru/danbooru_donmai.h +++ b/src/libdanbooru/danbooru_donmai.h @@ -53,12 +53,9 @@ public: DanbooruTag::TagType tagType = DanbooruTag::General) override; private Q_SLOTS: - void processPostList(KJob *job); void processTagList(KJob *job); void downloadAllTags(KJob *job); void processSinglePost(KJob *job); - void processPixmap(KJob *job); - };