Move tag downloading to a separate slot instead of a lambda
If tag downloading is still in progress when the application is closed, it will try to access the instance's pointer, leading to a crash.
This commit is contained in:
parent
92613218e1
commit
114df7aa31
2 changed files with 36 additions and 33 deletions
|
@ -117,40 +117,8 @@ void DanbooruService::getTagList(int limit, QString name)
|
||||||
|
|
||||||
KIO::StoredTransferJob *job = KIO::storedGet(danbooruUrl, KIO::NoReload,
|
KIO::StoredTransferJob *job = KIO::storedGet(danbooruUrl, KIO::NoReload,
|
||||||
KIO::HideProgressInfo);
|
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<StoredTransferJob *>(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<QVariant> 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)
|
void DanbooruService::getPool(int poolId, int page)
|
||||||
|
@ -381,10 +349,44 @@ void DanbooruService::reset()
|
||||||
{
|
{
|
||||||
m_currentPage = 1;
|
m_currentPage = 1;
|
||||||
m_tags = QStringList();
|
m_tags = QStringList();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Slots
|
// Slots
|
||||||
|
|
||||||
|
void DanbooruService::processTagList(KJob *job) {
|
||||||
|
|
||||||
|
if (job->error()) {
|
||||||
|
Q_EMIT(downloadError(job->errorString()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StoredTransferJob *jobResult = qobject_cast<StoredTransferJob *>(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<QVariant> 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)
|
void DanbooruService::processPostList(KJob *job)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -283,6 +283,7 @@ public:
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void processPostList(KJob *job);
|
void processPostList(KJob *job);
|
||||||
|
void processTagList(KJob *job);
|
||||||
void downloadAllTags(KJob *job);
|
void downloadAllTags(KJob *job);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue