summary refs log tree commit diff
path: root/src/timeline/widgets/FileItem.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/timeline/widgets/FileItem.cc')
-rw-r--r--src/timeline/widgets/FileItem.cc51
1 files changed, 28 insertions, 23 deletions
diff --git a/src/timeline/widgets/FileItem.cc b/src/timeline/widgets/FileItem.cc

index f3906a04..4ce4d256 100644 --- a/src/timeline/widgets/FileItem.cc +++ b/src/timeline/widgets/FileItem.cc
@@ -16,13 +16,13 @@ */ #include <QBrush> -#include <QDebug> #include <QDesktopServices> #include <QFile> #include <QFileDialog> #include <QPainter> #include <QPixmap> +#include "Logging.hpp" #include "MatrixClient.h" #include "Utils.h" @@ -49,17 +49,9 @@ FileItem::init() icon_.addFile(":/icons/icons/ui/arrow-pointing-down.png"); - 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); - setFixedHeight(Height); + + connect(this, &FileItem::fileDownloadedCb, this, &FileItem::fileDownloaded); } FileItem::FileItem(const mtx::events::RoomEvent<mtx::events::msg::File> &event, QWidget *parent) @@ -89,8 +81,15 @@ FileItem::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)) + nhlog::ui()->warn("Could not open url: {}", urlToOpen.toStdString()); } QSize @@ -115,14 +114,20 @@ FileItem::mousePressEvent(QMouseEvent *event) if (filenameToSave_.isEmpty()) return; - auto proxy = http::client()->downloadFile(url_); - connect(proxy.data(), - &DownloadMediaProxy::fileDownloaded, - this, - [proxy, this](const QByteArray &data) { - proxy->deleteLater(); - fileDownloaded(data); - }); + http::v2::client()->download( + url_.toString().toStdString(), + [this](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()); + return; + } + + emit fileDownloadedCb(QByteArray(data.data(), data.size())); + }); } else { openUrl(); } @@ -139,8 +144,8 @@ FileItem::fileDownloaded(const QByteArray &data) file.write(data); file.close(); - } catch (const std::exception &ex) { - qDebug() << "Error while saving file to:" << ex.what(); + } catch (const std::exception &e) { + nhlog::ui()->warn("Error while saving file to: {}", e.what()); } }