summary refs log tree commit diff
path: root/src/Utils.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-01-05 00:27:32 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-01-05 00:27:32 +0200
commit983aea7c76da65214463e725576e8b147fd02cdf (patch)
treeed652a099c5a7cce7d9cde091c14b72295ac879d /src/Utils.cc
parentRemove an extra colon from the receipt time (diff)
downloadnheko-983aea7c76da65214463e725576e8b147fd02cdf.tar.xz
Create widgets on demand for messages added to the end of the timeline
Diffstat (limited to 'src/Utils.cc')
-rw-r--r--src/Utils.cc121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/Utils.cc b/src/Utils.cc
new file mode 100644

index 00000000..663f7196 --- /dev/null +++ b/src/Utils.cc
@@ -0,0 +1,121 @@ +#include "Utils.h" +#include "timeline/TimelineViewManager.h" + +#include <variant.hpp> + +using TimelineEvent = mtx::events::collections::TimelineEvents; + +QString +utils::descriptiveTime(const QDateTime &then) +{ + const auto now = QDateTime::currentDateTime(); + const auto days = then.daysTo(now); + + if (days == 0) + return then.toString("HH:mm"); + else if (days < 2) + return QString("Yesterday"); + else if (days < 365) + return then.toString("dd/MM"); + + return then.toString("dd/MM/yy"); +} + +DescInfo +utils::getMessageDescription(const TimelineEvent &event, const QString &localUser) +{ + using Audio = mtx::events::RoomEvent<mtx::events::msg::Audio>; + using Emote = mtx::events::RoomEvent<mtx::events::msg::Emote>; + using File = mtx::events::RoomEvent<mtx::events::msg::File>; + using Image = mtx::events::RoomEvent<mtx::events::msg::Image>; + using Notice = mtx::events::RoomEvent<mtx::events::msg::Notice>; + using Text = mtx::events::RoomEvent<mtx::events::msg::Text>; + using Video = mtx::events::RoomEvent<mtx::events::msg::Video>; + + if (mpark::holds_alternative<Audio>(event)) { + const auto msg = mpark::get<Audio>(event); + QString sender = QString::fromStdString(msg.sender); + + const auto username = TimelineViewManager::displayName(sender); + const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts); + + return DescInfo{sender == localUser ? "You" : username, + sender, + " sent an audio clip", + utils::descriptiveTime(ts), + ts}; + } else if (mpark::holds_alternative<Emote>(event)) { + auto msg = mpark::get<Emote>(event); + QString sender = QString::fromStdString(msg.sender); + + const auto username = TimelineViewManager::displayName(sender); + const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts); + const auto body = QString::fromStdString(msg.content.body).trimmed(); + + return DescInfo{"", + sender, + QString("* %1 %2").arg(username).arg(body), + utils::descriptiveTime(ts), + ts}; + } else if (mpark::holds_alternative<File>(event)) { + const auto msg = mpark::get<File>(event); + QString sender = QString::fromStdString(msg.sender); + + const auto username = TimelineViewManager::displayName(sender); + const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts); + + return DescInfo{sender == localUser ? "You" : username, + sender, + " sent a file", + utils::descriptiveTime(ts), + ts}; + } else if (mpark::holds_alternative<Image>(event)) { + const auto msg = mpark::get<Image>(event); + QString sender = QString::fromStdString(msg.sender); + + const auto username = TimelineViewManager::displayName(sender); + const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts); + + return DescInfo{sender == localUser ? "You" : username, + sender, + " sent an image", + utils::descriptiveTime(ts), + ts}; + } else if (mpark::holds_alternative<Notice>(event)) { + const auto msg = mpark::get<Notice>(event); + QString sender = QString::fromStdString(msg.sender); + + const auto username = TimelineViewManager::displayName(sender); + const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts); + + return DescInfo{ + username, sender, " sent a notification", utils::descriptiveTime(ts), ts}; + } else if (mpark::holds_alternative<Text>(event)) { + const auto msg = mpark::get<Text>(event); + QString sender = QString::fromStdString(msg.sender); + + const auto username = TimelineViewManager::displayName(sender); + const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts); + const auto body = QString::fromStdString(msg.content.body).trimmed(); + + return DescInfo{sender == localUser ? "You" : username, + sender, + QString(": %1").arg(body), + utils::descriptiveTime(ts), + ts}; + } else if (mpark::holds_alternative<Video>(event)) { + const auto msg = mpark::get<Video>(event); + QString sender = QString::fromStdString(msg.sender); + + const auto username = TimelineViewManager::displayName(sender); + const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts); + + return DescInfo{sender == localUser ? "You" : username, + sender, + " sent a video clip", + utils::descriptiveTime(ts), + ts}; + } + + return DescInfo{}; +}