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, };