From 567078d39f3c85f260efd68aeb5c99f8e4ffe348 Mon Sep 17 00:00:00 2001
From: Nicolas Werner <nicolas.werner@hotmail.de>
Date: Sun, 30 May 2021 01:09:16 +0200
Subject: [PATCH] Try to get rid of an allocation

---
 src/timeline/EventStore.cpp    | 14 ++++++--------
 src/timeline/EventStore.h      |  2 +-
 src/timeline/TimelineModel.cpp |  4 ++--
 3 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp
index 883d384c0..4a9f0fffa 100644
--- a/src/timeline/EventStore.cpp
+++ b/src/timeline/EventStore.cpp
@@ -770,7 +770,7 @@ EventStore::decryptEvent(const IdIndex &idx,
 }
 
 mtx::events::collections::TimelineEvents *
-EventStore::get(std::string_view id, std::string_view related_to, bool decrypt, bool resolve_edits)
+EventStore::get(std::string id, std::string_view related_to, bool decrypt, bool resolve_edits)
 {
         if (this->thread() != QThread::currentThread())
                 nhlog::db()->warn("{} called from a different thread!", __func__);
@@ -778,7 +778,7 @@ EventStore::get(std::string_view id, std::string_view related_to, bool decrypt,
         if (id.empty())
                 return nullptr;
 
-        IdIndex index{room_id_, std::string(id)};
+        IdIndex index{room_id_, std::move(id)};
         if (resolve_edits) {
                 auto edits_ = edits(index.id);
                 if (!edits_.empty()) {
@@ -796,14 +796,12 @@ EventStore::get(std::string_view id, std::string_view related_to, bool decrypt,
                         http::client()->get_event(
                           room_id_,
                           index.id,
-                          [this,
-                           relatedTo = std::string(related_to.data(), related_to.size()),
-                           id = index.id](const mtx::events::collections::TimelineEvents &timeline,
-                                          mtx::http::RequestErr err) {
+                          [this, relatedTo = std::string(related_to), id = index.id](
+                            const mtx::events::collections::TimelineEvents &timeline,
+                            mtx::http::RequestErr err) {
                                   if (err) {
                                           nhlog::net()->error(
-                                            "Failed to retrieve event with id {}, which "
-                                            "was "
+                                            "Failed to retrieve event with id {}, which was "
                                             "requested to show the replyTo for event {}",
                                             relatedTo,
                                             id);
diff --git a/src/timeline/EventStore.h b/src/timeline/EventStore.h
index c7a7588b6..d9bb86cb1 100644
--- a/src/timeline/EventStore.h
+++ b/src/timeline/EventStore.h
@@ -70,7 +70,7 @@ public:
 
         // optionally returns the event or nullptr and fetches it, after which it emits a
         // relatedFetched event
-        mtx::events::collections::TimelineEvents *get(std::string_view id,
+        mtx::events::collections::TimelineEvents *get(std::string id,
                                                       std::string_view related_to,
                                                       bool decrypt       = true,
                                                       bool resolve_edits = true);
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 8f4a85647..cd3febd5e 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -574,7 +574,7 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r
                                 !event_id(event).empty() && event_id(event).front() == '$');
         case IsEncrypted: {
                 auto id              = event_id(event);
-                auto encrypted_event = events.get(id, id, false);
+                auto encrypted_event = events.get(id, "", false);
                 return encrypted_event &&
                        std::holds_alternative<
                          mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(
@@ -583,7 +583,7 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r
 
         case Trustlevel: {
                 auto id              = event_id(event);
-                auto encrypted_event = events.get(id, id, false);
+                auto encrypted_event = events.get(id, "", false);
                 if (encrypted_event) {
                         if (auto encrypted =
                               std::get_if<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(
-- 
GitLab