summary refs log tree commit diff
path: root/src/timeline/TimelineModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/timeline/TimelineModel.cpp')
-rw-r--r--src/timeline/TimelineModel.cpp44
1 files changed, 44 insertions, 0 deletions
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 <type_traits> #include <QCache> +#include <QClipboard> #include <QDesktopServices> #include <QFileDialog> +#include <QGuiApplication> #include <QMimeDatabase> #include <QRegularExpression> #include <QSettings> #include <QStandardPaths> +#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<mtx::identifiers::User>(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<QString> &users, QColor bg) {