Skip to content
Snippets Groups Projects
Verified Commit 30791f78 authored by Nicolas Werner's avatar Nicolas Werner
Browse files

Get rid of threadpool for images

parent 868342ff
No related branches found
No related tags found
No related merge requests found
......@@ -16,7 +16,6 @@ class BlurhashResponse
{
public:
BlurhashResponse(const QString &id, const QSize &requestedSize)
: m_id(id)
, m_requestedSize(requestedSize)
{
......
......@@ -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);
......
......@@ -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;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment