diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2015-11-06 10:39:59 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-11-06 11:30:11 -0800 |
commit | 9edb4f3fa91b3907809375794d75a1b1a77c94a0 (patch) | |
tree | cd3b194081d0b928c5cb56aed0df7b9bc469fdd7 /desktop-widgets | |
parent | bb566f7798f1bc7fe8e4d40813823dca0f6ea9a3 (diff) | |
download | subsurface-9edb4f3fa91b3907809375794d75a1b1a77c94a0.tar.gz |
Move ImageDownloader out of the desktop widgets
This required a bit more untangling, but with this it seems we can build
subsurface-mobile again (at least on the desktop).
Interesting is the removal from inside the ImageDownloader of the call to
DivePictureModel::instance()->updateDivePictures() - which actually could
cause some interesting recursion issues. If it turns out we did indeed
need this, it needs to be re-architected.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'desktop-widgets')
-rw-r--r-- | desktop-widgets/divepicturewidget.cpp | 73 | ||||
-rw-r--r-- | desktop-widgets/divepicturewidget.h | 13 |
2 files changed, 0 insertions, 86 deletions
diff --git a/desktop-widgets/divepicturewidget.cpp b/desktop-widgets/divepicturewidget.cpp index bed3d3bd1..d095929ad 100644 --- a/desktop-widgets/divepicturewidget.cpp +++ b/desktop-widgets/divepicturewidget.cpp @@ -15,79 +15,6 @@ #include <qthelper.h> #include <QStandardPaths> -void loadPicture(struct picture *picture) -{ - ImageDownloader download(picture); - download.load(); -} - -SHashedImage::SHashedImage(struct picture *picture) : QImage() -{ - QUrl url = QUrl::fromUserInput(QString(picture->filename)); - if(url.isLocalFile()) - load(url.toLocalFile()); - if (isNull()) { - // Hash lookup. - load(fileFromHash(picture->hash)); - if (!isNull()) { - QtConcurrent::run(updateHash, picture); - } else { - QtConcurrent::run(loadPicture, picture); - } - } else { - QByteArray hash = hashFile(url.toLocalFile()); - free(picture->hash); - picture->hash = strdup(hash.toHex().data()); - } -} - -ImageDownloader::ImageDownloader(struct picture *pic) -{ - picture = pic; -} - -void ImageDownloader::load(){ - QUrl url = QUrl::fromUserInput(QString(picture->filename)); - if (url.isValid()) { - QEventLoop loop; - QNetworkRequest request(url); - connect(&manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(saveImage(QNetworkReply *))); - QNetworkReply *reply = manager.get(request); - while (reply->isRunning()) { - loop.processEvents(); - sleep(1); - } - } - -} - -void ImageDownloader::saveImage(QNetworkReply *reply) -{ - QByteArray imageData = reply->readAll(); - QImage image = QImage(); - image.loadFromData(imageData); - if (image.isNull()) - return; - QCryptographicHash hash(QCryptographicHash::Sha1); - hash.addData(imageData); - QString path = QStandardPaths::standardLocations(QStandardPaths::CacheLocation).first(); - QDir dir(path); - if (!dir.exists()) - dir.mkpath(path); - QFile imageFile(path.append("/").append(hash.result().toHex())); - if (imageFile.open(QIODevice::WriteOnly)) { - QDataStream stream(&imageFile); - stream.writeRawData(imageData.data(), imageData.length()); - imageFile.waitForBytesWritten(-1); - imageFile.close(); - add_hash(imageFile.fileName(), hash.result()); - learnHash(picture, hash.result()); - DivePictureModel::instance()->updateDivePictures(); - } - reply->manager()->deleteLater(); - reply->deleteLater(); -} - DivePictureWidget::DivePictureWidget(QWidget *parent) : QListView(parent) { connect(this, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(doubleClicked(const QModelIndex &))); diff --git a/desktop-widgets/divepicturewidget.h b/desktop-widgets/divepicturewidget.h index 54f5bb826..3dc9767f1 100644 --- a/desktop-widgets/divepicturewidget.h +++ b/desktop-widgets/divepicturewidget.h @@ -5,19 +5,6 @@ #include <QListView> #include <QThread> #include <QFuture> -#include <QNetworkReply> - -class ImageDownloader : public QObject { - Q_OBJECT; -public: - ImageDownloader(struct picture *picture); - void load(); -private: - struct picture *picture; - QNetworkAccessManager manager; -private slots: - void saveImage(QNetworkReply *reply); -}; class DivePictureWidget : public QListView { Q_OBJECT |