diff --git a/imports/NeoChat/Component/Timeline/TextDelegate.qml b/imports/NeoChat/Component/Timeline/TextDelegate.qml
index 95931c1ac..5a2791ff9 100644
--- a/imports/NeoChat/Component/Timeline/TextDelegate.qml
+++ b/imports/NeoChat/Component/Timeline/TextDelegate.qml
@@ -15,7 +15,7 @@ TextEdit {
property bool isEmote: false
- text: "" + (isEmote ? "* " + author.displayName + " " : "") + display
+ text: "" + (isEmote ? "* " + author.displayName + " " : "") + display + (isEdited ? (" " + i18n("(edited)") + "") : "")
color: Kirigami.Theme.textColor
font.pointSize: isEmoji.test(display) ? Kirigami.Theme.defaultFont.pointSize * 4 : Kirigami.Theme.defaultFont.pointSize
diff --git a/src/messageeventmodel.cpp b/src/messageeventmodel.cpp
index d17f6a657..1490aa1d1 100644
--- a/src/messageeventmodel.cpp
+++ b/src/messageeventmodel.cpp
@@ -45,6 +45,7 @@ QHash MessageEventModel::roleNames() const
roles[ShowAuthorRole] = "showAuthor";
roles[ShowSectionRole] = "showSection";
roles[ReactionRole] = "reaction";
+ roles[IsEditedRole] = "isEdited";
return roles;
}
@@ -453,6 +454,13 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const
return EventStatus::Normal;
}
+ if (role == IsEditedRole) {
+ if (auto e = eventCast(&evt)) {
+ return !e->unsignedJson().isEmpty() && e->unsignedJson().contains("m.relations") && e->unsignedJson()["m.relations"].toObject().contains("m.replace");
+ }
+ return false;
+ }
+
if (role == EventIdRole) {
return !evt.id().isEmpty() ? evt.id() : evt.transactionId();
}
diff --git a/src/messageeventmodel.h b/src/messageeventmodel.h
index 5c6d8c767..776640f9d 100644
--- a/src/messageeventmodel.h
+++ b/src/messageeventmodel.h
@@ -40,6 +40,8 @@ public:
ReactionRole,
+ IsEditedRole,
+
// For debugging
EventResolvedTypeRole,
};