diff --git a/src/BlurhashProvider.h b/src/BlurhashProvider.h
index 08693673..39d63d3c 100644
--- a/src/BlurhashProvider.h
+++ b/src/BlurhashProvider.h
@@ -16,7 +16,6 @@ class BlurhashResponse
{
public:
BlurhashResponse(const QString &id, const QSize &requestedSize)
-
: m_id(id)
, m_requestedSize(requestedSize)
{
diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp
index 5d0ee0be..35bc0586 100644
--- a/src/MxcImageProvider.cpp
+++ b/src/MxcImageProvider.cpp
@@ -43,9 +43,7 @@ MxcImageProvider::requestImageResponse(const QString &id, const QSize &requested
}
}
- MxcImageResponse *response = new MxcImageResponse(id_, crop, radius, requestedSize);
- pool.start(response);
- return response;
+ return new MxcImageResponse(id_, crop, radius, requestedSize);
}
void
@@ -54,18 +52,18 @@ MxcImageProvider::addEncryptionInfo(mtx::crypto::EncryptedFile info)
infos.insert(QString::fromStdString(info.url), info);
}
void
-MxcImageResponse::run()
+MxcImageRunnable::run()
{
MxcImageProvider::download(
m_id,
m_requestedSize,
[this](QString, QSize, QImage image, QString) {
if (image.isNull()) {
- m_error = "Failed to download image.";
+ emit error("Failed to download image.");
} else {
- m_image = image;
+ emit done(image);
}
- emit finished();
+ this->deleteLater();
},
m_crop,
m_radius);
diff --git a/src/MxcImageProvider.h b/src/MxcImageProvider.h
index 5d5b9c77..3d61c2ab 100644
--- a/src/MxcImageProvider.h
+++ b/src/MxcImageProvider.h
@@ -8,24 +8,59 @@
#include <QQuickImageResponse>
#include <QImage>
-#include <QThreadPool>
+//#include <QThreadPool>
#include <functional>
#include <mtx/common.hpp>
-class MxcImageResponse
- : public QQuickImageResponse
- , public QRunnable
+class MxcImageRunnable
+ : public QObject
{
+ Q_OBJECT
+
+signals:
+ void done(QImage image);
+ void error(QString error);
+
public:
- MxcImageResponse(const QString &id, bool crop, double radius, const QSize &requestedSize)
+ MxcImageRunnable(const QString &id, bool crop, double radius, const QSize &requestedSize)
: m_id(id)
, m_requestedSize(requestedSize)
, m_crop(crop)
, m_radius(radius)
{
- setAutoDelete(false);
+ }
+
+ void run();
+
+ QString m_id;
+ QSize m_requestedSize;
+ bool m_crop;
+ double m_radius;
+};
+class MxcImageResponse
+ : public QQuickImageResponse
+{
+public:
+ MxcImageResponse(const QString &id, bool crop, double radius, const QSize &requestedSize)
+
+ {
+ auto runnable = new MxcImageRunnable(id, crop, radius, requestedSize);
+ connect(runnable, &MxcImageRunnable::done, this, &MxcImageResponse::handleDone);
+ connect(runnable, &MxcImageRunnable::error, this, &MxcImageResponse::handleError);
+ runnable->run();
+ }
+
+ void handleDone(QImage image)
+ {
+ m_image = image;
+ emit finished();
+ }
+ void handleError(QString error)
+ {
+ m_error = error;
+ emit finished();
}
QQuickTextureFactory *textureFactory() const override
@@ -34,13 +69,8 @@ public:
}
QString errorString() const override { return m_error; }
- void run() override;
-
- QString m_id, m_error;
- QSize m_requestedSize;
+ QString m_error;
QImage m_image;
- bool m_crop;
- double m_radius;
};
class MxcImageProvider
@@ -60,5 +90,5 @@ public slots:
double radius = 0);
private:
- QThreadPool pool;
+ // QThreadPool pool;
};
|