From f626de04470de57d5443737804739cff27416d04 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 29 Apr 2021 21:46:49 +0200 Subject: Copy link to message fixes #499 --- src/timeline/TimelineModel.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src/timeline/TimelineModel.cpp') diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index 5a0f9bad..2f7bfdd2 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -9,13 +9,16 @@ #include #include +#include #include #include +#include #include #include #include #include +#include "Cache_p.h" #include "ChatPage.h" #include "Config.h" #include "EventAccessors.h" @@ -1336,6 +1339,47 @@ TimelineModel::scrollTimerEvent() } } +void +TimelineModel::copyLinkToEvent(QString eventId) const +{ + QStringList vias; + + auto alias = cache::client()->getRoomAliases(room_id_.toStdString()); + QString room; + if (alias) { + room = QString::fromStdString(alias->alias); + if (room.isEmpty() && !alias->alt_aliases.empty()) { + room = QString::fromStdString(alias->alt_aliases.front()); + } + } + + if (room.isEmpty()) + room = room_id_; + + vias.push_back(QString("via=%1").arg(QString( + QUrl::toPercentEncoding(QString::fromStdString(http::client()->user_id().hostname()))))); + auto members = cache::getMembers(room_id_.toStdString(), 0, 100); + for (const auto &m : members) { + if (vias.size() >= 4) + break; + + auto user_id = + mtx::identifiers::parse(m.user_id.toStdString()); + QString server = QString("via=%1").arg( + QString(QUrl::toPercentEncoding(QString::fromStdString(user_id.hostname())))); + + if (!vias.contains(server)) + vias.push_back(server); + } + + auto link = QString("https://matrix.to/#/%1/%2?%3") + .arg(QString(QUrl::toPercentEncoding(room)), + QString(QUrl::toPercentEncoding(eventId)), + vias.join('&')); + + QGuiApplication::clipboard()->setText(link); +} + QString TimelineModel::formatTypingUsers(const std::vector &users, QColor bg) { -- cgit 1.5.1