summary refs log tree commit diff
path: root/src/timeline/widgets/ImageItem.cpp
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-09-07 12:24:09 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-09-07 12:24:09 +0300
commit896fe069b6e1f0406ba483dd82480e32ffe2a5df (patch)
tree53aa546185b39970093b180344d75b775ca5b7f3 /src/timeline/widgets/ImageItem.cpp
parentPut back removed links (diff)
downloadnheko-896fe069b6e1f0406ba483dd82480e32ffe2a5df.tar.xz
Use proxy objects on lambdas instead of raw pointers
When the object is destroyed the connections will be removed
automatically by Qt.

fixes #433
Diffstat (limited to 'src/timeline/widgets/ImageItem.cpp')
-rw-r--r--src/timeline/widgets/ImageItem.cpp29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/timeline/widgets/ImageItem.cpp b/src/timeline/widgets/ImageItem.cpp

index b66b82ae..4c68d683 100644 --- a/src/timeline/widgets/ImageItem.cpp +++ b/src/timeline/widgets/ImageItem.cpp
@@ -33,11 +33,14 @@ void ImageItem::downloadMedia(const QUrl &url) { + auto proxy = std::make_shared<MediaProxy>(); + connect(proxy.get(), &MediaProxy::imageDownloaded, this, &ImageItem::setImage); + http::client()->download(url.toString().toStdString(), - [this, url](const std::string &data, - const std::string &, - const std::string &, - mtx::http::RequestErr err) { + [proxy = std::move(proxy), url](const std::string &data, + const std::string &, + const std::string &, + mtx::http::RequestErr err) { if (err) { nhlog::net()->warn( "failed to retrieve image {}: {} {}", @@ -49,7 +52,8 @@ ImageItem::downloadMedia(const QUrl &url) QPixmap img; img.loadFromData(QByteArray(data.data(), data.size())); - emit imageDownloaded(img); + + emit proxy->imageDownloaded(img); }); } @@ -76,8 +80,6 @@ ImageItem::init() setCursor(Qt::PointingHandCursor); setAttribute(Qt::WA_Hover, true); - connect(this, &ImageItem::imageDownloaded, this, &ImageItem::setImage); - connect(this, &ImageItem::imageSaved, this, &ImageItem::saveImage); downloadMedia(url_); } @@ -240,12 +242,15 @@ ImageItem::saveAs() const auto url = url_.toString().toStdString(); + auto proxy = std::make_shared<MediaProxy>(); + connect(proxy.get(), &MediaProxy::imageSaved, this, &ImageItem::saveImage); + http::client()->download( url, - [this, filename, url](const std::string &data, - const std::string &, - const std::string &, - mtx::http::RequestErr err) { + [proxy = std::move(proxy), filename, url](const std::string &data, + const std::string &, + const std::string &, + mtx::http::RequestErr err) { if (err) { nhlog::net()->warn("failed to retrieve image {}: {} {}", url, @@ -254,6 +259,6 @@ ImageItem::saveAs() return; } - emit imageSaved(filename, QByteArray(data.data(), data.size())); + emit proxy->imageSaved(filename, QByteArray(data.data(), data.size())); }); }