mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-11 03:21:29 +00:00
Fix loading images from URLs
This was broken when introducing loading images from the server. Now it first tries the server and if that fails tries the actual URL. Still, the image does not show up immediately, since the DivePictureModel is unavailable to the image downloader to be told to update the images. This needs to be fixed but in the mean time, the image is shown when the dive is reselected (possibly on the next run) since it is then loaded from the cache. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
8a59d78faa
commit
e32ae20ca3
2 changed files with 12 additions and 2 deletions
|
@ -24,6 +24,7 @@ ImageDownloader::~ImageDownloader()
|
||||||
|
|
||||||
void ImageDownloader::load(bool fromHash){
|
void ImageDownloader::load(bool fromHash){
|
||||||
QUrl url;
|
QUrl url;
|
||||||
|
loadFromHash = fromHash;
|
||||||
if(fromHash)
|
if(fromHash)
|
||||||
url = cloudImageURL(picture->hash);
|
url = cloudImageURL(picture->hash);
|
||||||
else
|
else
|
||||||
|
@ -45,8 +46,11 @@ void ImageDownloader::saveImage(QNetworkReply *reply)
|
||||||
QByteArray imageData = reply->readAll();
|
QByteArray imageData = reply->readAll();
|
||||||
QImage image = QImage();
|
QImage image = QImage();
|
||||||
image.loadFromData(imageData);
|
image.loadFromData(imageData);
|
||||||
if (image.isNull())
|
if (image.isNull()) {
|
||||||
|
if (loadFromHash)
|
||||||
|
load(false);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
QCryptographicHash hash(QCryptographicHash::Sha1);
|
QCryptographicHash hash(QCryptographicHash::Sha1);
|
||||||
hash.addData(imageData);
|
hash.addData(imageData);
|
||||||
QString path = QStandardPaths::standardLocations(QStandardPaths::CacheLocation).first();
|
QString path = QStandardPaths::standardLocations(QStandardPaths::CacheLocation).first();
|
||||||
|
@ -64,6 +68,11 @@ void ImageDownloader::saveImage(QNetworkReply *reply)
|
||||||
}
|
}
|
||||||
reply->manager()->deleteLater();
|
reply->manager()->deleteLater();
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
// This should be called to make the picture actually show.
|
||||||
|
// Problem is DivePictureModel is not in subsurface-core.
|
||||||
|
// Nevertheless, the image shows when the dive is selected the next time.
|
||||||
|
// DivePictureModel::instance()->updateDivePictures();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadPicture(struct picture *picture, bool fromHash)
|
void loadPicture(struct picture *picture, bool fromHash)
|
||||||
|
@ -74,7 +83,7 @@ void loadPicture(struct picture *picture, bool fromHash)
|
||||||
|
|
||||||
SHashedImage::SHashedImage(struct picture *picture) : QImage()
|
SHashedImage::SHashedImage(struct picture *picture) : QImage()
|
||||||
{
|
{
|
||||||
QUrl url = QUrl::fromUserInput(QString(picture->filename));
|
QUrl url = QUrl::fromUserInput(localFilePath(QString(picture->filename)));
|
||||||
if(url.isLocalFile())
|
if(url.isLocalFile())
|
||||||
load(url.toLocalFile());
|
load(url.toLocalFile());
|
||||||
if (isNull()) {
|
if (isNull()) {
|
||||||
|
|
|
@ -20,6 +20,7 @@ public:
|
||||||
private:
|
private:
|
||||||
struct picture *picture;
|
struct picture *picture;
|
||||||
QNetworkAccessManager manager;
|
QNetworkAccessManager manager;
|
||||||
|
bool loadFromHash;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void saveImage(QNetworkReply *reply);
|
void saveImage(QNetworkReply *reply);
|
||||||
|
|
Loading…
Reference in a new issue