From 07bb95fbcdbbb3da9bf1162792e16f8c4e928949 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 19 Jul 2022 18:57:08 +0200 Subject: Fix crash when creating link to room preview --- src/Utils.cpp | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'src/Utils.cpp') diff --git a/src/Utils.cpp b/src/Utils.cpp index b85d7916..ffbaecab 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -881,3 +881,63 @@ utils::markRoomAsDirect(QString roomid, std::vector members) }); }); } + +std::vector +utils::roomVias(const std::string &roomid) +{ + std::vector vias; + + { + auto members = cache::getMembers(roomid, 0, 100); + if (!members.empty()) { + vias.push_back(http::client()->user_id().hostname()); + for (const auto &m : members) { + if (vias.size() >= 4) + break; + + auto user_id = + mtx::identifiers::parse(m.user_id.toStdString()); + + auto server = user_id.hostname(); + if (std::find(begin(vias), end(vias), server) == vias.end()) + vias.push_back(server); + } + } + } + + if (vias.empty()) { + auto members = cache::getMembersFromInvite(roomid, 0, 100); + if (!members.empty()) { + vias.push_back(http::client()->user_id().hostname()); + for (const auto &m : members) { + if (vias.size() >= 4) + break; + + auto user_id = + mtx::identifiers::parse(m.user_id.toStdString()); + + auto server = user_id.hostname(); + if (std::find(begin(vias), end(vias), server) == vias.end()) + vias.push_back(server); + } + } + } + + if (vias.empty()) { + auto parents = cache::client()->getParentRoomIds(roomid); + for (const auto &p : parents) { + auto child = + cache::client()->getStateEvent(p, roomid); + if (child && child->content.via) + vias.insert(vias.end(), child->content.via->begin(), child->content.via->end()); + } + + std::sort(begin(vias), end(vias)); + auto last = std::unique(begin(vias), end(vias)); + vias.erase(last, end(vias)); + + // if (vias.size()> 3) + // vias.erase(begin(vias)+3, end(vias)); + } + return vias; +} -- cgit 1.5.1