diff --git a/src/app/commoncomponents/TextMessageDelegate.qml b/src/app/commoncomponents/TextMessageDelegate.qml index 7b3f756c5a72d209deb572d2f2210cceb264a98b..41f2ecc85b91e821a43c0c7b6408ee529b7fff9d 100644 --- a/src/app/commoncomponents/TextMessageDelegate.qml +++ b/src/app/commoncomponents/TextMessageDelegate.qml @@ -52,7 +52,12 @@ SBSMessageBase { padding: isEmojiOnly ? 0 : JamiTheme.preferredMarginSize anchors.right: isOutgoing ? parent.right : undefined - text: Body === "" ? "*("+ JamiStrings.deletedMessage +")*" : Body + text: { + if (LinkifiedBody !== "" && Linkified.length === 0) { + MessagesAdapter.parseMessageUrls(Id, Body, UtilsAdapter.getAppValue(Settings.DisplayHyperlinkPreviews), root.colorUrl) + } + return (LinkifiedBody !== "") ? LinkifiedBody : "*("+ JamiStrings.deletedMessage +")*" + } horizontalAlignment: Text.AlignLeft HoverHandler { @@ -268,7 +273,7 @@ SBSMessageBase { opacity: 0 Behavior on opacity { NumberAnimation { duration: 100 } } Component.onCompleted: { - if (!Linkified) { + if (Linkified.length === 0) { MessagesAdapter.parseMessageUrls(Id, Body, UtilsAdapter.getAppValue(Settings.DisplayHyperlinkPreviews), root.colorUrl) } opacity = 1 diff --git a/src/app/mainview/components/EditContainer.qml b/src/app/mainview/components/EditContainer.qml index 55d5a192d6880b2cc5952fc9c2c648cf88234406..e4576fc3c4048395efe3b332df1319aea1cc810b 100644 --- a/src/app/mainview/components/EditContainer.qml +++ b/src/app/mainview/components/EditContainer.qml @@ -34,8 +34,7 @@ Rectangle { property var body: { if (MessagesAdapter.editId === "") return "" - - return MessagesAdapter.dataForInteraction(MessagesAdapter.editId, MessageList.Body) + return MessagesAdapter.dataForInteraction(MessagesAdapter.editId, MessageList.LinkifiedBody) } RowLayout { diff --git a/src/libclient/api/interaction.h b/src/libclient/api/interaction.h index ea7f9f9a0d32fc02eec388fa77ab7c302451ec1a..26b5a3861aa6ae252e6ee8f3880e21a965752685 100644 --- a/src/libclient/api/interaction.h +++ b/src/libclient/api/interaction.h @@ -312,7 +312,7 @@ struct Info bool isRead = false; MapStringString commit; QVariantMap linkPreviewInfo = {}; - bool linkified = false; + QString linkified; QVariantMap reactions; QString react_to; QVector<Body> previousBodies; diff --git a/src/libclient/messagelistmodel.cpp b/src/libclient/messagelistmodel.cpp index 0c55b0725456b2fd65d90b19b5bc2215de2ac27e..19fb865ba12f6976bb2fda612a7cfc1bf5ac5630 100644 --- a/src/libclient/messagelistmodel.cpp +++ b/src/libclient/messagelistmodel.cpp @@ -455,6 +455,12 @@ MessageListModel::dataForItem(item_t item, int, int role) const return QVariant(item.second.linkPreviewInfo); case Role::Linkified: return QVariant(item.second.linkified); + case Role::LinkifiedBody: { + if (!item.second.linkified.isEmpty()) { + return QVariant(item.second.linkified); + } + return QVariant(item.second.body); + } case Role::ActionUri: return QVariant(item.second.commit["uri"]); case Role::ConfId: @@ -474,10 +480,14 @@ MessageListModel::dataForItem(item_t item, int, int role) const return QVariant(replyId); case Role::ReplyToAuthor: return repliedMsg == -1 ? QVariant("") : QVariant(data(repliedMsg, Role::Author)); - case Role::ReplyToBody: - return repliedMsg == -1 - ? QVariant("") - : QVariant(data(repliedMsg, Role::Body).toString().replace("\n", " ")); + case Role::ReplyToBody: { + if (repliedMsg == -1) + return QVariant(""); + auto linkified = data(repliedMsg, Role::Linkified).toString(); + if (!linkified.isEmpty()) + return QVariant(linkified.replace("\n", " ")); + return QVariant(data(repliedMsg, Role::Body).toString().replace("\n", " ")); + } case Role::TotalSize: return QVariant(item.second.commit["totalSize"].toInt()); case Role::TransferName: @@ -545,9 +555,8 @@ MessageListModel::linkifyMessage(const QString& messageId, const QString& linkif return; } QModelIndex modelIndex = QAbstractListModel::index(index, 0); - interactions_[index].second.body = linkified; - interactions_[index].second.linkified = true; - Q_EMIT dataChanged(modelIndex, modelIndex, {Role::Body, Role::Linkified}); + interactions_[index].second.linkified = linkified; + Q_EMIT dataChanged(modelIndex, modelIndex, {Role::Linkified, Role::LinkifiedBody}); } void @@ -700,9 +709,12 @@ MessageListModel::editMessage(const QString& msgId, interaction::Info& info) } } info.body = it->rbegin()->body; + info.linkified.clear(); editedBodies_.erase(it); emitDataChanged(msgId, {MessageList::Role::Body, + MessageList::Role::Linkified, + MessageList::Role::LinkifiedBody, MessageList::Role::PreviousBodies, MessageList::Role::IsEmojiOnly}); diff --git a/src/libclient/messagelistmodel.h b/src/libclient/messagelistmodel.h index 12c1e02b6600bd25787f88e791991df8a0b892f2..fc133bd85233e04c4d30bb0bb8709022ae2bfc13 100644 --- a/src/libclient/messagelistmodel.h +++ b/src/libclient/messagelistmodel.h @@ -46,6 +46,7 @@ struct Info; X(DeviceId) \ X(LinkPreviewInfo) \ X(Linkified) \ + X(LinkifiedBody) \ X(PreviousBodies) \ X(Reactions) \ X(ReplyTo) \