summary refs log tree commit diff
path: root/src/timeline/widgets/ImageItem.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-06-09 16:03:14 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-06-09 16:03:14 +0300
commitb89257a34b2a98b737f4ae544f7e436b9000b240 (patch)
tree81d7f355721541afbd91dc9a085abbb4666f3565 /src/timeline/widgets/ImageItem.cc
parentInstall missing dependencies in travis-ci/appveyor (diff)
downloadnheko-b89257a34b2a98b737f4ae544f7e436b9000b240.tar.xz
Migrate to mtxclient for the http calls
Diffstat (limited to 'src/timeline/widgets/ImageItem.cc')
-rw-r--r--src/timeline/widgets/ImageItem.cc138
1 files changed, 70 insertions, 68 deletions
diff --git a/src/timeline/widgets/ImageItem.cc b/src/timeline/widgets/ImageItem.cc

index 66cd31ab..6aa010a4 100644 --- a/src/timeline/widgets/ImageItem.cc +++ b/src/timeline/widgets/ImageItem.cc
@@ -30,37 +30,62 @@ #include "dialogs/ImageOverlay.h" #include "timeline/widgets/ImageItem.h" -ImageItem::ImageItem(const mtx::events::RoomEvent<mtx::events::msg::Image> &event, QWidget *parent) - : QWidget(parent) - , event_{event} +void +ImageItem::downloadMedia(const QUrl &url) { - setMouseTracking(true); - setCursor(Qt::PointingHandCursor); - setAttribute(Qt::WA_Hover, true); + http::v2::client()->download(url.toString().toStdString(), + [this, url](const std::string &data, + const std::string &, + const std::string &, + mtx::http::RequestErr err) { + if (err) { + qWarning() + << "failed to retrieve image:" << url; + return; + } - url_ = QString::fromStdString(event.content.url); - text_ = QString::fromStdString(event.content.body); + QPixmap img; + img.loadFromData(QByteArray(data.data(), data.size())); + emit imageDownloaded(img); + }); +} - QList<QString> url_parts = url_.toString().split("mxc://"); +void +ImageItem::saveImage(const QString &filename, const QByteArray &data) +{ + try { + QFile file(filename); - if (url_parts.size() != 2) { - qDebug() << "Invalid format for image" << url_.toString(); - return; + if (!file.open(QIODevice::WriteOnly)) + return; + + file.write(data); + file.close(); + } catch (const std::exception &ex) { + qDebug() << "Error while saving file to:" << ex.what(); } +} + +void +ImageItem::init() +{ + setMouseTracking(true); + setCursor(Qt::PointingHandCursor); + setAttribute(Qt::WA_Hover, true); - QString media_params = url_parts[1]; - url_ = QString("%1/_matrix/media/r0/download/%2") - .arg(http::client()->getHomeServer().toString(), media_params); + connect(this, &ImageItem::imageDownloaded, this, &ImageItem::setImage); + connect(this, &ImageItem::imageSaved, this, &ImageItem::saveImage); + downloadMedia(url_); +} - auto proxy = http::client()->downloadImage(url_); +ImageItem::ImageItem(const mtx::events::RoomEvent<mtx::events::msg::Image> &event, QWidget *parent) + : QWidget(parent) + , event_{event} +{ + url_ = QString::fromStdString(event.content.url); + text_ = QString::fromStdString(event.content.body); - connect(proxy.data(), - &DownloadMediaProxy::imageDownloaded, - this, - [this, proxy](const QPixmap &img) { - proxy->deleteLater(); - setImage(img); - }); + init(); } ImageItem::ImageItem(const QString &url, const QString &filename, uint64_t size, QWidget *parent) @@ -69,31 +94,7 @@ ImageItem::ImageItem(const QString &url, const QString &filename, uint64_t size, , text_{filename} { Q_UNUSED(size); - - setMouseTracking(true); - setCursor(Qt::PointingHandCursor); - setAttribute(Qt::WA_Hover, true); - - QList<QString> url_parts = url_.toString().split("mxc://"); - - if (url_parts.size() != 2) { - qDebug() << "Invalid format for image" << url_.toString(); - return; - } - - QString media_params = url_parts[1]; - url_ = QString("%1/_matrix/media/r0/download/%2") - .arg(http::client()->getHomeServer().toString(), media_params); - - auto proxy = http::client()->downloadImage(url_); - - connect(proxy.data(), - &DownloadMediaProxy::imageDownloaded, - this, - [proxy, this](const QPixmap &img) { - proxy->deleteLater(); - setImage(img); - }); + init(); } void @@ -102,8 +103,15 @@ ImageItem::openUrl() if (url_.toString().isEmpty()) return; - if (!QDesktopServices::openUrl(url_)) - qWarning() << "Could not open url" << url_.toString(); + auto mxc_parts = mtx::client::utils::parse_mxc_url(url_.toString().toStdString()); + auto urlToOpen = QString("https://%1:%2/_matrix/media/r0/download/%3/%4") + .arg(QString::fromStdString(http::v2::client()->server())) + .arg(http::v2::client()->port()) + .arg(QString::fromStdString(mxc_parts.server)) + .arg(QString::fromStdString(mxc_parts.media_id)); + + if (!QDesktopServices::openUrl(urlToOpen)) + qWarning() << "Could not open url" << urlToOpen; } QSize @@ -231,23 +239,17 @@ ImageItem::saveAs() if (filename.isEmpty()) return; - auto proxy = http::client()->downloadFile(url_); - connect(proxy.data(), - &DownloadMediaProxy::fileDownloaded, - this, - [proxy, filename](const QByteArray &data) { - proxy->deleteLater(); - - try { - QFile file(filename); - - if (!file.open(QIODevice::WriteOnly)) - return; + http::v2::client()->download( + url_.toString().toStdString(), + [this, filename](const std::string &data, + const std::string &, + const std::string &, + mtx::http::RequestErr err) { + if (err) { + qWarning() << "failed to retrieve image:" << url_; + return; + } - file.write(data); - file.close(); - } catch (const std::exception &ex) { - qDebug() << "Error while saving file to:" << ex.what(); - } - }); + emit imageSaved(filename, QByteArray(data.data(), data.size())); + }); }