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,11 @@ 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, l](const KNSCore::EntryInternal &entry, EntryInternal::PreviewType type) { + qCDebug(KNEWSTUFFCORE) << "ERROR preview: " << 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); + deleteLater(); } } @@ -54,11 +57,12 @@ { if (job->error()) { m_buffer.clear(); + emit signalError(m_entry, m_previewType); + 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 @@ -56,6 +56,7 @@ KJob *job(); Q_SIGNALS: + void signalError(const KNSCore::EntryInternal &, KNSCore::EntryInternal::PreviewType); void signalPreviewLoaded(const KNSCore::EntryInternal &, KNSCore::EntryInternal::PreviewType); private Q_SLOTS: