summary refs log tree commit diff
path: root/src/timeline
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
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')
-rw-r--r--src/timeline/widgets/AudioItem.cpp16
-rw-r--r--src/timeline/widgets/AudioItem.h3
-rw-r--r--src/timeline/widgets/FileItem.cpp17
-rw-r--r--src/timeline/widgets/FileItem.h3
-rw-r--r--src/timeline/widgets/ImageItem.cpp29
-rw-r--r--src/timeline/widgets/ImageItem.h4
6 files changed, 35 insertions, 37 deletions
diff --git a/src/timeline/widgets/AudioItem.cpp b/src/timeline/widgets/AudioItem.cpp

index 1e3eb0f0..0c4bf9e4 100644 --- a/src/timeline/widgets/AudioItem.cpp +++ b/src/timeline/widgets/AudioItem.cpp
@@ -55,7 +55,6 @@ AudioItem::init() player_->setVolume(100); player_->setNotifyInterval(1000); - connect(this, &AudioItem::fileDownloadedCb, this, &AudioItem::fileDownloaded); connect(player_, &QMediaPlayer::stateChanged, this, [this](QMediaPlayer::State state) { if (state == QMediaPlayer::StoppedState) { state_ = AudioState::Play; @@ -120,19 +119,22 @@ AudioItem::mousePressEvent(QMouseEvent *event) if (filenameToSave_.isEmpty()) return; + auto proxy = std::make_shared<MediaProxy>(); + connect(proxy.get(), &MediaProxy::fileDownloaded, this, &AudioItem::fileDownloaded); + http::client()->download( url_.toString().toStdString(), - [this](const std::string &data, - const std::string &, - const std::string &, - mtx::http::RequestErr err) { + [proxy = std::move(proxy), url = url_](const std::string &data, + const std::string &, + const std::string &, + mtx::http::RequestErr err) { if (err) { nhlog::net()->info("failed to retrieve m.audio content: {}", - url_.toString().toStdString()); + url.toString().toStdString()); return; } - emit fileDownloadedCb(QByteArray(data.data(), data.size())); + emit proxy->fileDownloaded(QByteArray(data.data(), data.size())); }); } } diff --git a/src/timeline/widgets/AudioItem.h b/src/timeline/widgets/AudioItem.h
index 7b0781a2..c32b7731 100644 --- a/src/timeline/widgets/AudioItem.h +++ b/src/timeline/widgets/AudioItem.h
@@ -69,9 +69,6 @@ protected: void resizeEvent(QResizeEvent *event) override; void mousePressEvent(QMouseEvent *event) override; -signals: - void fileDownloadedCb(const QByteArray &data); - private slots: void fileDownloaded(const QByteArray &data); diff --git a/src/timeline/widgets/FileItem.cpp b/src/timeline/widgets/FileItem.cpp
index f8d3272d..850941ae 100644 --- a/src/timeline/widgets/FileItem.cpp +++ b/src/timeline/widgets/FileItem.cpp
@@ -50,8 +50,6 @@ FileItem::init() icon_.addFile(":/icons/icons/ui/arrow-pointing-down.png"); setFixedHeight(Height); - - connect(this, &FileItem::fileDownloadedCb, this, &FileItem::fileDownloaded); } FileItem::FileItem(const mtx::events::RoomEvent<mtx::events::msg::File> &event, QWidget *parent) @@ -110,19 +108,22 @@ FileItem::mousePressEvent(QMouseEvent *event) if (filenameToSave_.isEmpty()) return; + auto proxy = std::make_shared<MediaProxy>(); + connect(proxy.get(), &MediaProxy::fileDownloaded, this, &FileItem::fileDownloaded); + http::client()->download( url_.toString().toStdString(), - [this](const std::string &data, - const std::string &, - const std::string &, - mtx::http::RequestErr err) { + [proxy = std::move(proxy), url = url_](const std::string &data, + const std::string &, + const std::string &, + mtx::http::RequestErr err) { if (err) { nhlog::ui()->warn("failed to retrieve m.file content: {}", - url_.toString().toStdString()); + url.toString().toStdString()); return; } - emit fileDownloadedCb(QByteArray(data.data(), data.size())); + emit proxy->fileDownloaded(QByteArray(data.data(), data.size())); }); } else { openUrl(); diff --git a/src/timeline/widgets/FileItem.h b/src/timeline/widgets/FileItem.h
index 66543e79..d63cce88 100644 --- a/src/timeline/widgets/FileItem.h +++ b/src/timeline/widgets/FileItem.h
@@ -52,9 +52,6 @@ public: QColor iconColor() const { return iconColor_; } QColor backgroundColor() const { return backgroundColor_; } -signals: - void fileDownloadedCb(const QByteArray &data); - protected: void paintEvent(QPaintEvent *event) override; void mousePressEvent(QMouseEvent *event) override; 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())); }); } diff --git a/src/timeline/widgets/ImageItem.h b/src/timeline/widgets/ImageItem.h
index e9d823f4..65bd962d 100644 --- a/src/timeline/widgets/ImageItem.h +++ b/src/timeline/widgets/ImageItem.h
@@ -48,10 +48,6 @@ public slots: void setImage(const QPixmap &image); void saveImage(const QString &filename, const QByteArray &data); -signals: - void imageDownloaded(const QPixmap &img); - void imageSaved(const QString &filename, const QByteArray &data); - protected: void paintEvent(QPaintEvent *event) override; void mousePressEvent(QMouseEvent *event) override;