72 lines
1.8 KiB
C++
72 lines
1.8 KiB
C++
|
#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;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|