Replace WebImageView with NetImageManager and NetImageTracker classes

Resolves #31 and should take care of #30 #28 #23 #12
This commit is contained in:
Morgan McMillian 2017-11-16 13:28:35 -08:00
parent 58d094a6d5
commit b5bfd3e09e
4 changed files with 0 additions and 116 deletions

View file

@ -121,7 +121,6 @@ config_pri_source_group1 {
$$quote($$BASEDIR/src/ActiveFrameQML.cpp) \
$$quote($$BASEDIR/src/Pnut.cpp) \
$$quote($$BASEDIR/src/Pnut_test.cpp) \
$$quote($$BASEDIR/src/WebImageView.cpp) \
$$quote($$BASEDIR/src/applicationui.cpp) \
$$quote($$BASEDIR/src/main.cpp) \
$$quote($$BASEDIR/src/netimagemanager.cpp) \
@ -130,7 +129,6 @@ config_pri_source_group1 {
HEADERS += \
$$quote($$BASEDIR/src/ActiveFrameQML.h) \
$$quote($$BASEDIR/src/Pnut.h) \
$$quote($$BASEDIR/src/WebImageView.h) \
$$quote($$BASEDIR/src/applicationui.hpp) \
$$quote($$BASEDIR/src/globals.h) \
$$quote($$BASEDIR/src/netimagemanager.h) \

View file

@ -1,71 +0,0 @@
#include "WebImageView.h"
#include <bb/cascades/Image>
QNetworkAccessManager * WebImageView::mNetManager = new QNetworkAccessManager;
QNetworkDiskCache * WebImageView::mNetworkDiskCache = new QNetworkDiskCache();
WebImageView::WebImageView() {
mNetworkDiskCache->setCacheDirectory(QDesktopServices::storageLocation(QDesktopServices::CacheLocation));
mNetManager->setCache(mNetworkDiskCache);
}
const QUrl& WebImageView::url() const {
return mUrl;
}
void WebImageView::setUrl(const QUrl& url) {
mUrl = url;
mLoading = 0;
resetImage();
QNetworkRequest request;
request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
request.setUrl(url);
QNetworkReply * reply = mNetManager->get(QNetworkRequest(request));
connect(reply,SIGNAL(finished()), this, SLOT(imageLoaded()));
connect(reply,SIGNAL(downloadProgress ( qint64 , qint64 )), this, SLOT(dowloadProgressed(qint64,qint64)));
emit urlChanged();
}
double WebImageView::loading() const {
return mLoading;
}
void WebImageView::imageLoaded() {
QNetworkReply * reply = qobject_cast<QNetworkReply*>(sender());
QVariant possibleRedirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
mRedirectUrl = this->redirectUrl(possibleRedirectUrl.toUrl(),mRedirectUrl);
if (!mRedirectUrl.isEmpty()) {
this->setUrl(mRedirectUrl);
} else {
setImage(Image(reply->readAll()));
}
reply->deleteLater();
}
void WebImageView::dowloadProgressed(qint64 bytes,qint64 total) {
mLoading = double(bytes)/double(total);
emit loadingChanged();
}
QUrl WebImageView::redirectUrl(const QUrl& possibleRedirectUrl, const QUrl& oldRedirectUrl) const {
QUrl redirectUrl;
if (!possibleRedirectUrl.isEmpty() && possibleRedirectUrl != oldRedirectUrl) {
redirectUrl = possibleRedirectUrl;
}
return redirectUrl;
}

View file

@ -1,41 +0,0 @@
#ifndef WEBIMAGEVIEW_H_
#define WEBIMAGEVIEW_H_
#include <bb/cascades/ImageView>
#include <QUrl>
using namespace bb::cascades;
class QNetworkAccessManager;
class WebImageView: public bb::cascades::ImageView {
Q_OBJECT
Q_PROPERTY (QUrl url READ url WRITE setUrl NOTIFY urlChanged)
Q_PROPERTY (float loading READ loading NOTIFY loadingChanged)
public:
WebImageView();
const QUrl& url() const;
double loading() const;
public Q_SLOTS:
void setUrl(const QUrl& url);
private Q_SLOTS:
void imageLoaded();
void dowloadProgressed(qint64,qint64);
signals:
void urlChanged();
void loadingChanged();
private:
static QNetworkAccessManager * mNetManager;
static QNetworkDiskCache * mNetworkDiskCache;
QUrl mUrl;
QUrl mRedirectUrl;
float mLoading;
QUrl redirectUrl(const QUrl& possibleRedirectUrl, const QUrl& oldRedirectUrl) const;
};
#endif /* WEBIMAGEVIEW_H_ */

View file

@ -16,7 +16,6 @@
#include "applicationui.hpp"
#include "Pnut.h"
#include "WebImageView.h"
#include "ActiveFrameQML.h"
#include "netimagemanager.h"
#include "netimagetracker.h"
@ -57,7 +56,6 @@ ApplicationUI::ApplicationUI() :
qmlRegisterType<Pnut>("com.monkeystew.pnut", 1, 0, "Pnut");
qmlRegisterType<QTimer> ("com.monkeystew.qtimer", 1, 0, "QTimer");
qmlRegisterType<WebImageView>("org.labsquare", 1, 0, "WebImageView");
qmlRegisterType<NetImageTracker>("com.netimage", 1, 0, "NetImageTracker");
qmlRegisterType<NetImageManager>("com.netimage", 1, 0, "NetImageManager");