summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlexander Bantyev <balsoft@balsoft.ru>2021-06-18 20:25:44 +0300
committerAlexander Bantyev <balsoft@balsoft.ru>2021-06-18 20:25:44 +0300
commitf8d2564e462abbaf4d33f089d1fb8af7d5100234 (patch)
tree3c3f9bb24d25e11016c18d4887e8a3b2ee847ce2 /src
parentAllow editing unsent messages (diff)
downloadnheko-f8d2564e462abbaf4d33f089d1fb8af7d5100234.tar.xz
fixup! Allow editing unsent messages
Diffstat (limited to '')
-rw-r--r--src/timeline/EventStore.cpp25
-rw-r--r--src/timeline/TimelineModel.cpp3
2 files changed, 21 insertions, 7 deletions
diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp
index 3667433b..956698da 100644
--- a/src/timeline/EventStore.cpp
+++ b/src/timeline/EventStore.cpp
@@ -193,6 +193,19 @@ EventStore::EventStore(std::string room_id, QObject *)
                                     cache::client()->getEvent(room_id_, related_event_id).value();
                                   auto relations = mtx::accessors::relations(related_event.data);
 
+                                  // Replace the blockquote in fallback reply
+                                  auto related_text =
+                                    std::get_if<mtx::events::RoomEvent<mtx::events::msg::Text>>(
+                                      &related_event.data);
+                                  if (related_text && relations.reply_to() == txn_id) {
+                                          size_t index =
+                                            related_text->content.formatted_body.find(txn_id);
+                                          if (index != std::string::npos) {
+                                                  related_text->content.formatted_body.replace(
+                                                    index, event_id.length(), event_id);
+                                          }
+                                  }
+
                                   for (mtx::common::Relation &rel : relations.relations) {
                                           if (rel.event_id == txn_id)
                                                   rel.event_id = event_id;
@@ -203,12 +216,10 @@ EventStore::EventStore(std::string room_id, QObject *)
                                   cache::client()->replaceEvent(
                                     room_id_, related_event_id, related_event);
 
-                                  auto id = idToIndex(event_id);
+                                  auto idx = idToIndex(related_event_id);
 
                                   events_by_id_.remove({room_id_, related_event_id});
-                                  events_.remove({room_id_, toInternalIdx(*id)});
-
-                                  emit dataChanged(*id, *id);
+                                  events_.remove({room_id_, toInternalIdx(*idx)});
                           }
                   }
 
@@ -220,10 +231,10 @@ EventStore::EventStore(std::string room_id, QObject *)
                             }
                     });
 
-                  auto id = idToIndex(event_id);
+                  auto idx = idToIndex(event_id);
 
-                  if (id)
-                          emit dataChanged(id.value(), id.value());
+                  if (idx)
+                          emit dataChanged(*idx, *idx);
 
                   cache::client()->removePendingStatus(room_id_, txn_id);
                   this->current_txn             = "";
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index e2e5551b..321179b4 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -383,6 +383,9 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj
                                 edit_ = QString::fromStdString(event_id);
                                 emit editChanged(edit_);
                         }
+                        if (reply_.toStdString() == txn_id) {
+                                reply_ = QString::fromStdString(event_id);
+                        }
                 });
 
         showEventTimer.callOnTimeout(this, &TimelineModel::scrollTimerEvent);