summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/imagedownloader.cpp24
-rw-r--r--core/imagedownloader.h2
2 files changed, 15 insertions, 11 deletions
diff --git a/core/imagedownloader.cpp b/core/imagedownloader.cpp
index 995bf2e02..372f5318a 100644
--- a/core/imagedownloader.cpp
+++ b/core/imagedownloader.cpp
@@ -39,8 +39,11 @@ void ImageDownloader::load(QString filename, bool fromHash)
{
QUrl url = fromHash ? cloudImageURL(qPrintable(filename)) : QUrl::fromUserInput(filename);
- if (!url.isValid())
+ // If this is a file, we tried previously -> don't bother trying it again
+ if (url.scheme() == "file" || !url.isValid()) {
emit failed(filename);
+ return;
+ }
QNetworkRequest request(url);
request.setAttribute(QNetworkRequest::User, filename);
@@ -99,14 +102,18 @@ static QImage loadImage(const QString &fileName, const char *format = nullptr)
}
// Returns: thumbnail, still loading
-static std::pair<QImage,bool> getHashedImage(const QString &file)
+static std::pair<QImage,bool> getHashedImage(const QString &file_in, bool tryDownload)
{
+ QString file = file_in.startsWith("file://", Qt::CaseInsensitive) ? file_in.mid(7) : file_in;
QImage thumb;
bool stillLoading = false;
QUrl url = QUrl::fromUserInput(localFilePath(file));
if (url.isLocalFile())
thumb = loadImage(url.toLocalFile());
- if (thumb.isNull()) {
+ if (!thumb.isNull()) {
+ // We loaded successfully. Now, make sure hash is up to date.
+ hashPicture(file);
+ } else if (tryDownload) {
// This did not load anything. Let's try to get the image from other sources
// Let's try to load it locally via its hash
QString filenameLocal = localFilePath(qPrintable(file));
@@ -129,9 +136,6 @@ static std::pair<QImage,bool> getHashedImage(const QString &file)
stillLoading = true;
}
}
- } else {
- // We loaded successfully. Now, make sure hash is up to date.
- hashPicture(file);
}
return { thumb, stillLoading };
}
@@ -208,12 +212,12 @@ static void addThumbnailToCache(const QImage &thumbnail, const QString &picture_
file.commit();
}
-void Thumbnailer::processItem(QString filename)
+void Thumbnailer::processItem(QString filename, bool tryDownload)
{
QImage thumbnail = getThumbnailFromCache(filename);
if (thumbnail.isNull()) {
- auto res = getHashedImage(filename);
+ auto res = getHashedImage(filename, tryDownload);
if (res.second)
return;
thumbnail = res.first;
@@ -237,7 +241,7 @@ void Thumbnailer::imageDownloaded(QString filename)
// Image was downloaded and the filename connected with a hash.
// Try thumbnailing again.
QMutexLocker l(&lock);
- workingOn[filename] = QtConcurrent::run(&pool, [this, filename]() { processItem(filename); });
+ workingOn[filename] = QtConcurrent::run(&pool, [this, filename]() { processItem(filename, false); });
}
void Thumbnailer::imageDownloadFailed(QString filename)
@@ -255,7 +259,7 @@ QImage Thumbnailer::fetchThumbnail(PictureEntry &entry)
const QString &filename = entry.filename;
if (!workingOn.contains(filename)) {
workingOn.insert(filename,
- QtConcurrent::run(&pool, [this, filename]() { processItem(filename); }));
+ QtConcurrent::run(&pool, [this, filename]() { processItem(filename, true); }));
}
return dummyImage;
}
diff --git a/core/imagedownloader.h b/core/imagedownloader.h
index bee262854..3c316a2f6 100644
--- a/core/imagedownloader.h
+++ b/core/imagedownloader.h
@@ -46,7 +46,7 @@ signals:
void thumbnailChanged(QString filename, QImage thumbnail);
private:
Thumbnailer();
- void processItem(QString filename);
+ void processItem(QString filename, bool tryDownload);
mutable QMutex lock;
QThreadPool pool;