diff --git a/src/core/engine.cpp b/src/core/engine.cpp --- a/src/core/engine.cpp +++ b/src/core/engine.cpp @@ -532,6 +532,13 @@ qCDebug(KNEWSTUFFCORE) << "START preview: " << entry.name() << type; ImageLoader *l = new ImageLoader(entry, type, this); connect(l, &ImageLoader::signalPreviewLoaded, this, &Engine::slotPreviewLoaded); + connect(l, &ImageLoader::signalError, this, [this](const KNSCore::EntryInternal &entry, + EntryInternal::PreviewType type, + const QString &errorText) { + qCDebug(KNEWSTUFFCORE) << "ERROR preview: " << errorText << entry.name() << type; + --m_numPictureJobs; + updateStatus(); + }); l->start(); ++m_numPictureJobs; updateStatus(); diff --git a/src/core/imageloader.cpp b/src/core/imageloader.cpp --- a/src/core/imageloader.cpp +++ b/src/core/imageloader.cpp @@ -33,9 +33,12 @@ { QUrl url(m_entry.previewUrl(m_previewType)); if (!url.isEmpty()) { - m_job = HTTPJob::get(url, NoReload, JobFlag::HideProgressInfo); + m_job = HTTPJob::get(url, NoReload, JobFlag::HideProgressInfo, this); connect(m_job, &KJob::result, this, &ImageLoader::slotDownload); connect(m_job, &HTTPJob::data, this, &ImageLoader::slotData); + } else { + emit signalError(m_entry, m_previewType, QStringLiteral("Empty url")); + deleteLater(); } } @@ -54,11 +57,12 @@ { if (job->error()) { m_buffer.clear(); + emit signalError(m_entry, m_previewType, job->errorText()); + deleteLater(); return; } QImage image; - image.loadFromData(m_buffer); - m_buffer.clear(); + image.loadFromData(std::move(m_buffer)); if (m_previewType == EntryInternal::PreviewSmall1 || m_previewType == EntryInternal::PreviewSmall2 diff --git a/src/core/imageloader_p.h b/src/core/imageloader_p.h --- a/src/core/imageloader_p.h +++ b/src/core/imageloader_p.h @@ -57,6 +57,7 @@ Q_SIGNALS: void signalPreviewLoaded(const KNSCore::EntryInternal &, KNSCore::EntryInternal::PreviewType); + void signalError(const KNSCore::EntryInternal &, KNSCore::EntryInternal::PreviewType, const QString &); private Q_SLOTS: void slotDownload(KJob *job);