@@ -16,17 +16,18 @@
17#include "croppedimagesizer.h"
17#include "croppedimagesizer.h"
19−#include <QDebug>
19+#include "croppedimagesizerasyncworker.h"
20−#include <QNetworkReply>
20+
21+#include <QNetworkAccessManager>
21#include <QNetworkRequest>
22#include <QNetworkRequest>
22#include <QQmlEngine>
23#include <QQmlEngine>
23#include <QQuickItem>
24#include <QQuickItem>
26CroppedImageSizer::CroppedImageSizer()
26CroppedImageSizer::CroppedImageSizer()
27 : m_width(0),
27 : m_width(0),
28 m_height(0),
28 m_height(0),
29− m_sourceSize(QSize(-1, -1))
29+ m_sourceSize(QSize(-1, -1)),
31 connect(this, &CroppedImageSizer::inputParamsChanged, this, &CroppedImageSizer::calculateSourceSize);
32 connect(this, &CroppedImageSizer::inputParamsChanged, this, &CroppedImageSizer::calculateSourceSize);
32 connect(this, &CroppedImageSizer::sourceChanged, this, &CroppedImageSizer::requestImage);
33 connect(this, &CroppedImageSizer::sourceChanged, this, &CroppedImageSizer::requestImage);
@@ -34,8 +35,8 @@ CroppedImageSizer::CroppedImageSizer()
35CroppedImageSizer::~CroppedImageSizer()
36CroppedImageSizer::~CroppedImageSizer()
37− if (m_reply) {
38+ if (m_worker) {
38− m_reply->deleteLater();
39+ m_worker->abort();
@@ -91,38 +92,32 @@ void CroppedImageSizer::setSourceSize(const QSize &sourceSize)
95+void CroppedImageSizer::setImageSize(const QSize &imageSize)
97+ m_imageSize = imageSize;
99+ calculateSourceSize();
94void CroppedImageSizer::requestImage()
102void CroppedImageSizer::requestImage()
96− if (m_reply) {
104+ if (m_worker) {
97− m_reply->disconnect();
98− m_reply->abort();
105+ m_worker->abort();
99− m_reply->deleteLater();
100− m_reply = nullptr;
106+ m_worker = nullptr;
103 if (m_source.isValid() && qmlEngine(this) && qmlEngine(this)->networkAccessManager()) {
109 if (m_source.isValid() && qmlEngine(this) && qmlEngine(this)->networkAccessManager()) {
104 QNetworkRequest request(m_source);
110 QNetworkRequest request(m_source);
105− m_reply = qmlEngine(this)->networkAccessManager()->get(request);
111+ QNetworkReply *reply = qmlEngine(this)->networkAccessManager()->get(request);
106− connect(m_reply, &QNetworkReply::finished, this, &CroppedImageSizer::requestFinished);
112+ m_worker = new CroppedImageSizerAsyncWorker(this, reply);
107− } else {
113+ } else {
108 setSourceSize(QSize(-1, -1));
114 setSourceSize(QSize(-1, -1));
112−void CroppedImageSizer::requestFinished()
114− QImageReader m_reader(m_reply);
115− m_imageSize = m_reader.size();
117− m_reply->deleteLater();
120− calculateSourceSize();
123void CroppedImageSizer::calculateSourceSize()
118void CroppedImageSizer::calculateSourceSize()
125− if (m_source.isValid() && m_width > 0 && m_height > 0 && !m_reply) {
120+ if (m_source.isValid() && m_width > 0 && m_height > 0 && !m_worker) {
126 if (!m_imageSize.isEmpty()) {
121 if (!m_imageSize.isEmpty()) {
127 const qreal ar = m_width / m_height;
122 const qreal ar = m_width / m_height;
128 const qreal ssar = m_imageSize.width() / (qreal)m_imageSize.height();
123 const qreal ssar = m_imageSize.width() / (qreal)m_imageSize.height();