summary refs log tree commit diff
path: root/src/timeline/TimelineViewManager.cpp
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2023-04-23 20:55:28 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2023-04-23 20:55:28 +0200
commit6a03615413ef90e378df80fa1e3bc4ef031d5ea6 (patch)
treec577c21e1c3cda9f7c50a9545c7a57720de762b9 /src/timeline/TimelineViewManager.cpp
parentTranslated using Weblate (Ukrainian) (diff)
downloadnheko-6a03615413ef90e378df80fa1e3bc4ef031d5ea6.tar.xz
Copy image to clipboard
Fixes #599
Diffstat (limited to 'src/timeline/TimelineViewManager.cpp')
-rw-r--r--src/timeline/TimelineViewManager.cpp35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp

index b949e4c3..44f288c6 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp
@@ -5,7 +5,9 @@ #include "TimelineViewManager.h" #include <QApplication> +#include <QClipboard> #include <QFileDialog> +#include <QMimeData> #include <QStandardPaths> #include <QString> @@ -29,8 +31,6 @@ #include "voip/CallManager.h" #include "voip/WebRTCSession.h" -namespace msgs = mtx::events::msg; - namespace { template<template<class...> class Op, class... Args> using is_detected = typename nheko::detail::detector<nheko::nonesuch, void, Op, Args...>::value_t; @@ -319,6 +319,37 @@ TimelineViewManager::saveMedia(QString mxcUrl) } void +TimelineViewManager::copyImage(const QString &mxcUrl) const +{ + const auto url = mxcUrl.toStdString(); + QString mimeType; + + http::client()->download( + url, + [url, mimeType](const std::string &data, + const std::string &, + const std::string &, + mtx::http::RequestErr err) { + if (err) { + nhlog::net()->warn("failed to retrieve media {}: {} {}", + url, + err->matrix_error.error, + static_cast<int>(err->status_code)); + return; + } + + try { + auto img = utils::readImage(QByteArray(data.data(), (qsizetype)data.size())); + QGuiApplication::clipboard()->setImage(img); + + return; + } catch (const std::exception &e) { + nhlog::ui()->warn("Error while copying file to clipboard: {}", e.what()); + } + }); +} + +void TimelineViewManager::updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids) {