@@ -16,25 +16,26 @@
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);
34CroppedImageSizer::~CroppedImageSizer()
35CroppedImageSizer::~CroppedImageSizer()
36− if (m_reply) {
37+ if (m_worker) {
37− m_reply->deleteLater();
38+ m_worker->abort();
@@ -82,42 +83,26 @@ QSize CroppedImageSizer::sourceSize() const
82 return m_sourceSize;
83 return m_sourceSize;
86+void CroppedImageSizer::setSourceSize(const QSize &size)
88+ if (size != m_sourceSize) {
90+ Q_EMIT sourceSizeChanged();
85void CroppedImageSizer::calculateSourceSize()
94void CroppedImageSizer::calculateSourceSize()
87 if (m_source.isValid() && m_width > 0 && m_height > 0 && qmlEngine(this) && qmlEngine(this)->networkAccessManager()) {
96 if (m_source.isValid() && m_width > 0 && m_height > 0 && qmlEngine(this) && qmlEngine(this)->networkAccessManager()) {
88− if (m_reply) {
97+ if (m_worker) {
89− m_reply->abort();
98+ m_worker->abort();
90− m_reply->deleteLater();
92 QNetworkRequest request(m_source);
101 QNetworkRequest request(m_source);
93− m_reply = qmlEngine(this)->networkAccessManager()->get(request);
102+ QNetworkReply *reply = qmlEngine(this)->networkAccessManager()->get(request);
94− connect(m_reply, &QNetworkReply::finished, this, &CroppedImageSizer::requestFinished);
103+ m_worker = new CroppedImageSizerAsyncWorker(this, reply);
95 } else if (m_sourceSize != QSize(-1, -1)) {
104 } else if (m_sourceSize != QSize(-1, -1)) {
96 m_sourceSize = QSize(-1, -1);
105 m_sourceSize = QSize(-1, -1);
97 sourceSizeChanged();
106 sourceSizeChanged();
101−void CroppedImageSizer::requestFinished()
103− QImageReader m_reader(m_reply);
104− const QSize imageSize = m_reader.size();
105− if (imageSize.isValid()) {
106− if (m_height > 0 && imageSize.height() > 0) {
107− const qreal ar = m_width / m_height;
108− const qreal ssar = imageSize.width() / (qreal)imageSize.height();
110− m_sourceSize = QSize(m_width, 0);
112− m_sourceSize = QSize(0, m_height);
116− qWarning() << "Could not find size of" << m_source;
117− m_sourceSize = QSize(0, 0);
119− sourceSizeChanged();
121− m_reply->deleteLater();