forked from mirror/nheko
parent
a7e84b63ac
commit
983aea7c76
@ -0,0 +1,20 @@ |
||||
#pragma once |
||||
|
||||
#include "RoomInfoListItem.h" |
||||
|
||||
#include <QDateTime> |
||||
#include <mtx/events/collections.hpp> |
||||
|
||||
namespace utils { |
||||
|
||||
using TimelineEvent = mtx::events::collections::TimelineEvents; |
||||
|
||||
//! Human friendly timestamp representation.
|
||||
QString |
||||
descriptiveTime(const QDateTime &then); |
||||
|
||||
//! Generate a message description from the event to be displayed
|
||||
//! in the RoomList.
|
||||
DescInfo |
||||
getMessageDescription(const TimelineEvent &event, const QString &localUser); |
||||
} |
@ -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{}; |
||||
} |
Loading…
Reference in new issue