Implement fancy reply rendering
This currently assumes the event, that is replied to, is already
fetched. If it isn't, it will render an empty reply. In the future we
should fetch replies before rendering them.
2 files changed, 14 insertions, 3 deletions
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 0e7f5259..41d864bd 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -212,6 +212,14 @@ TimelineModel::rowCount(const QModelIndex &parent) const
return (int)this->eventOrder.size();
}
+QVariantMap
+TimelineModel::getDump(QString eventId) const
+{
+ if (events.contains(eventId))
+ return data(index(idToIndex(eventId), 0), Dump).toMap();
+ return {};
+}
+
QVariant
TimelineModel::data(const QModelIndex &index, int role) const
{
@@ -263,11 +271,13 @@ TimelineModel::data(const QModelIndex &index, int role) const
return QVariant(toRoomEventType(event));
case Body:
return QVariant(utils::replaceEmoji(QString::fromStdString(body(event))));
- case FormattedBody:
+ case FormattedBody: {
+ const static QRegularExpression replyFallback(
+ "<mx-reply>.*</mx-reply>", QRegularExpression::DotMatchesEverythingOption);
return QVariant(
utils::replaceEmoji(utils::linkifyMessage(formattedBodyWithFallback(event)))
- .remove("<mx-reply>")
- .remove("</mx-reply>"));
+ .remove(replyFallback));
+ }
case Url:
return QVariant(QString::fromStdString(url(event)));
case ThumbnailUrl:
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 0f18f7ef..61dd6b69 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -181,6 +181,7 @@ public slots:
void setCurrentIndex(int index);
int currentIndex() const { return idToIndex(currentId); }
void markEventsAsRead(const std::vector<QString> &event_ids);
+ QVariantMap getDump(QString eventId) const;
private slots:
// Add old events at the top of the timeline.
|