From 8ad01f520af30bfd2d3441a2b893ec71d5e220ea Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Thu, 6 Sep 2018 22:34:41 +0300 Subject: Add initial support for displaying formatted messages --- src/Utils.h | 16 ++++++++++++++++ src/timeline/TimelineItem.cpp | 37 +++++++++++++++++-------------------- 2 files changed, 33 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/Utils.h b/src/Utils.h index 90c8d9f6..347ece80 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -12,6 +12,7 @@ #include #include #include +#include namespace utils { @@ -195,4 +196,19 @@ humanReadableFingerprint(const std::string &ed25519); QString humanReadableFingerprint(const QString &ed25519); + +//! Retrieve the message body taking into account the `formatted_body` field. +//! If the `format` of the message is not supported we fallback to `body`. +template +QString +get_message_body(const RoomMessageT &event) +{ + if (event.content.format.empty()) + return QString::fromStdString(event.content.body); + + if (event.content.format != common::FORMAT_MSG_TYPE) + return QString::fromStdString(event.content.body); + + return QString::fromStdString(event.content.formatted_body); +} } diff --git a/src/timeline/TimelineItem.cpp b/src/timeline/TimelineItem.cpp index 8726ec59..7548a5a5 100644 --- a/src/timeline/TimelineItem.cpp +++ b/src/timeline/TimelineItem.cpp @@ -436,7 +436,9 @@ TimelineItem::TimelineItem(const mtx::events::RoomEvent"); - body = "" + body + ""; + formatted_body = "" + formatted_body + ""; if (with_sender) { auto displayName = Cache::displayName(room_id_, sender); - generateBody(sender, displayName, body); + generateBody(sender, displayName, formatted_body); setupAvatarLayout(displayName); AvatarProvider::resolve( room_id_, sender, this, [this](const QImage &img) { setUserAvatar(img); }); } else { - generateBody(body); + generateBody(formatted_body); setupSimpleLayout(); } @@ -484,26 +484,25 @@ TimelineItem::TimelineItem(const mtx::events::RoomEvent event_id_ = QString::fromStdString(event.event_id); const auto sender = QString::fromStdString(event.sender); - auto body = QString::fromStdString(event.content.body).trimmed(); + auto formatted_body = utils::get_message_body(event).trimmed(); + auto body = QString::fromStdString(event.content.body).trimmed(); + auto timestamp = QDateTime::fromMSecsSinceEpoch(event.origin_server_ts); auto displayName = Cache::displayName(room_id_, sender); - auto emoteMsg = QString("* %1 %2").arg(displayName).arg(body); + auto emoteMsg = QString("* %1 %2").arg(displayName).arg(formatted_body); descriptionMsg_ = {"", sender, emoteMsg, utils::descriptiveTime(timestamp), timestamp}; generateTimestamp(timestamp); - emoteMsg = emoteMsg.toHtmlEscaped(); - emoteMsg.replace(conf::strings::url_regex, conf::strings::url_html); - emoteMsg.replace("\n", "
"); if (with_sender) { - generateBody(sender, displayName, emoteMsg); + generateBody(sender, displayName, formatted_body); setupAvatarLayout(displayName); AvatarProvider::resolve( room_id_, sender, this, [this](const QImage &img) { setUserAvatar(img); }); } else { - generateBody(emoteMsg); + generateBody(formatted_body); setupSimpleLayout(); } @@ -528,7 +527,9 @@ TimelineItem::TimelineItem(const mtx::events::RoomEvent event_id_ = QString::fromStdString(event.event_id); const auto sender = QString::fromStdString(event.sender); - auto body = QString::fromStdString(event.content.body).trimmed(); + auto formatted_body = utils::get_message_body(event).trimmed(); + auto body = QString::fromStdString(event.content.body).trimmed(); + auto timestamp = QDateTime::fromMSecsSinceEpoch(event.origin_server_ts); auto displayName = Cache::displayName(room_id_, sender); @@ -541,18 +542,14 @@ TimelineItem::TimelineItem(const mtx::events::RoomEvent generateTimestamp(timestamp); - body = body.toHtmlEscaped(); - body.replace(conf::strings::url_regex, conf::strings::url_html); - body.replace("\n", "
"); - if (with_sender) { - generateBody(sender, displayName, body); + generateBody(sender, displayName, formatted_body); setupAvatarLayout(displayName); AvatarProvider::resolve( room_id_, sender, this, [this](const QImage &img) { setUserAvatar(img); }); } else { - generateBody(body); + generateBody(formatted_body); setupSimpleLayout(); } -- cgit 1.5.1