From 3eafd4396e57f15bda517e090b81623c542bd452 Mon Sep 17 00:00:00 2001
From: Nicolas Werner <nicolas.werner@hotmail.de>
Date: Wed, 15 Jun 2022 15:36:58 +0200
Subject: [PATCH] Fix pins not refreshing after being loaded

---
 resources/qml/TopBar.qml       |  7 ++++++-
 src/timeline/EventStore.cpp    | 10 +++++++---
 src/timeline/EventStore.h      |  1 +
 src/timeline/TimelineModel.cpp |  1 +
 4 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml
index 20eff7f31..c9d26019c 100644
--- a/resources/qml/TopBar.qml
+++ b/resources/qml/TopBar.qml
@@ -271,7 +271,12 @@ Pane {
                         height: implicitHeight
 
                         Reply {
-                            property var e: room ? room.getDump(modelData, "") : {}
+                            id: reply
+                            property var e: room ? room.getDump(modelData, "pins") : {}
+                            Connections {
+                                function onPinnedMessagesChanged() { reply.e = room.getDump(modelData, "pins") }
+                                target: room
+                            }
                             Layout.fillWidth: true
                             Layout.preferredHeight: height
 
diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp
index 264cde779..b0ea07ecf 100644
--- a/src/timeline/EventStore.cpp
+++ b/src/timeline/EventStore.cpp
@@ -48,9 +48,13 @@ EventStore::EventStore(std::string room_id, QObject *)
           cache::client()->storeEvent(room_id_, id, {timeline});
 
           if (!relatedTo.empty()) {
-              auto idx = idToIndex(relatedTo);
-              if (idx)
-                  emit dataChanged(*idx, *idx);
+              if (relatedTo == "pins") {
+                  emit pinsChanged();
+              } else {
+                  auto idx = idToIndex(relatedTo);
+                  if (idx)
+                      emit dataChanged(*idx, *idx);
+              }
           }
       },
       Qt::QueuedConnection);
diff --git a/src/timeline/EventStore.h b/src/timeline/EventStore.h
index 6317cbbe4..5cfab7276 100644
--- a/src/timeline/EventStore.h
+++ b/src/timeline/EventStore.h
@@ -101,6 +101,7 @@ signals:
     void beginResetModel();
     void endResetModel();
     void dataChanged(int from, int to);
+    void pinsChanged();
     void newEncryptedImage(mtx::crypto::EncryptedFile encryptionInfo);
     void eventFetched(std::string id,
                       std::string relatedTo,
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 578d63b7d..53559644f 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -398,6 +398,7 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj
           "data changed {} to {}", events.size() - to - 1, events.size() - from - 1);
         emit dataChanged(index(events.size() - to - 1, 0), index(events.size() - from - 1, 0));
     });
+    connect(&events, &EventStore::pinsChanged, this, &TimelineModel::pinnedMessagesChanged);
 
     connect(&events, &EventStore::beginInsertRows, this, [this](int from, int to) {
         int first = events.size() - to;
-- 
GitLab