diff --git a/src/libdanbooru/danbooruservice.cpp b/src/libdanbooru/danbooruservice.cpp index b9c4cfc..d956f1e 100644 --- a/src/libdanbooru/danbooruservice.cpp +++ b/src/libdanbooru/danbooruservice.cpp @@ -117,40 +117,8 @@ void DanbooruService::getTagList(int limit, QString name) KIO::StoredTransferJob *job = KIO::storedGet(danbooruUrl, KIO::NoReload, KIO::HideProgressInfo); + connect(job, &KIO::StoredTransferJob::result, this, &DanbooruService::processTagList); - connect(job, &KIO::StoredTransferJob::result, [this](KJob * job) { - - if (job->error()) { - Q_EMIT(downloadError(job->errorString())); - return; - } - - StoredTransferJob *jobResult = qobject_cast(job); - QByteArray data = jobResult->data(); - - bool ok; - - // Most Danbooru implementations return tags in wrong order when - // using JSON, so we have to fall back to XML - QList tagList = parseDanbooruResult(data, "tag", &ok); - - if (!ok) { - Q_EMIT(downloadError(QString("Unable to decode data"))); - return; - } - - for (auto element : tagList) { - QVariantMap map = element.toMap(); - DanbooruTag *tag = new DanbooruTag(map); - - if(!tag) { - continue; - } - Q_EMIT(tagDownloaded(tag)); - } - - } - ); } void DanbooruService::getPool(int poolId, int page) @@ -381,10 +349,44 @@ void DanbooruService::reset() { m_currentPage = 1; m_tags = QStringList(); + } // Slots +void DanbooruService::processTagList(KJob *job) { + + if (job->error()) { + Q_EMIT(downloadError(job->errorString())); + return; + } + + StoredTransferJob *jobResult = qobject_cast(job); + QByteArray data = jobResult->data(); + + bool ok; + + // Most Danbooru implementations return tags in wrong order when + // using JSON, so we have to fall back to XML + QList tagList = parseDanbooruResult(data, "tag", &ok); + + if (!ok) { + Q_EMIT(downloadError(QString("Unable to decode data"))); + return; + } + + for (auto element : tagList) { + QVariantMap map = element.toMap(); + DanbooruTag *tag = new DanbooruTag(map); + + if(!tag) { + continue; + } + + Q_EMIT(tagDownloaded(tag)); + } +} + void DanbooruService::processPostList(KJob *job) { diff --git a/src/libdanbooru/danbooruservice.h b/src/libdanbooru/danbooruservice.h index c577eb7..4f5dffc 100644 --- a/src/libdanbooru/danbooruservice.h +++ b/src/libdanbooru/danbooruservice.h @@ -283,6 +283,7 @@ public: private Q_SLOTS: void processPostList(KJob *job); + void processTagList(KJob *job); void downloadAllTags(KJob *job); Q_SIGNALS: