diff --git a/src/Cache.cc b/src/Cache.cc
index 416d95a6..699774ce 100644
--- a/src/Cache.cc
+++ b/src/Cache.cc
@@ -26,6 +26,7 @@
#include <variant.hpp>
#include "Cache.h"
+#include "Utils.h"
//! Should be changed when a breaking change occurs in the cache format.
//! This will reset client's data.
diff --git a/src/RoomList.cc b/src/RoomList.cc
index a3195196..c0447f9a 100644
--- a/src/RoomList.cc
+++ b/src/RoomList.cc
@@ -27,6 +27,7 @@
#include "RoomInfoListItem.h"
#include "RoomList.h"
#include "UserSettingsPage.h"
+#include "Utils.h"
RoomList::RoomList(QSharedPointer<MatrixClient> client,
QSharedPointer<UserSettings> userSettings,
diff --git a/src/Utils.cc b/src/Utils.cc
index 0aca8303..d9b06b52 100644
--- a/src/Utils.cc
+++ b/src/Utils.cc
@@ -1,7 +1,5 @@
#include "Utils.h"
-#include "Cache.h"
-
#include <variant.hpp>
using TimelineEvent = mtx::events::collections::TimelineEvents;
@@ -36,100 +34,21 @@ utils::getMessageDescription(const TimelineEvent &event,
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 = Cache::displayName(room_id, 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};
+ return createDescriptionInfo<Audio>(event, localUser, room_id);
} else if (mpark::holds_alternative<Emote>(event)) {
- auto msg = mpark::get<Emote>(event);
- QString sender = QString::fromStdString(msg.sender);
-
- const auto username = Cache::displayName(room_id, 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};
+ return createDescriptionInfo<Emote>(event, localUser, room_id);
} else if (mpark::holds_alternative<File>(event)) {
- const auto msg = mpark::get<File>(event);
- QString sender = QString::fromStdString(msg.sender);
-
- const auto username = Cache::displayName(room_id, sender);
- const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts);
-
- return DescInfo{sender == localUser ? "You" : username,
- sender,
- " sent a file",
- utils::descriptiveTime(ts),
- ts};
+ return createDescriptionInfo<File>(event, localUser, room_id);
} else if (mpark::holds_alternative<Image>(event)) {
- const auto msg = mpark::get<Image>(event);
- QString sender = QString::fromStdString(msg.sender);
-
- const auto username = Cache::displayName(room_id, sender);
- const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts);
-
- return DescInfo{sender == localUser ? "You" : username,
- sender,
- " sent an image",
- utils::descriptiveTime(ts),
- ts};
+ return createDescriptionInfo<Image>(event, localUser, room_id);
} else if (mpark::holds_alternative<Notice>(event)) {
- const auto msg = mpark::get<Notice>(event);
- QString sender = QString::fromStdString(msg.sender);
-
- const auto username = Cache::displayName(room_id, sender);
- const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts);
-
- return DescInfo{
- username, sender, " sent a notification", utils::descriptiveTime(ts), ts};
+ return createDescriptionInfo<Notice>(event, localUser, room_id);
} else if (mpark::holds_alternative<Text>(event)) {
- const auto msg = mpark::get<Text>(event);
- QString sender = QString::fromStdString(msg.sender);
-
- const auto username = Cache::displayName(room_id, 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};
+ return createDescriptionInfo<Text>(event, localUser, room_id);
} else if (mpark::holds_alternative<Video>(event)) {
- const auto msg = mpark::get<Video>(event);
- QString sender = QString::fromStdString(msg.sender);
-
- const auto username = Cache::displayName(room_id, 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 createDescriptionInfo<Video>(event, localUser, room_id);
} else if (mpark::holds_alternative<mtx::events::Sticker>(event)) {
- const auto msg = mpark::get<mtx::events::Sticker>(event);
- QString sender = QString::fromStdString(msg.sender);
-
- const auto username = Cache::displayName(room_id, sender);
- const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts);
-
- return DescInfo{sender == localUser ? "You" : username,
- sender,
- " sent a sticker",
- utils::descriptiveTime(ts),
- ts};
+ return createDescriptionInfo<mtx::events::Sticker>(event, localUser, room_id);
}
return DescInfo{};
diff --git a/src/timeline/TimelineItem.cc b/src/timeline/TimelineItem.cc
index ce82ebd8..2b5ffbf3 100644
--- a/src/timeline/TimelineItem.cc
+++ b/src/timeline/TimelineItem.cc
@@ -152,7 +152,7 @@ TimelineItem::TimelineItem(ImageItem *image,
{
init();
- setupLocalWidgetLayout<ImageItem>(image, userid, "sent an image", withSender);
+ setupLocalWidgetLayout<ImageItem>(image, userid, withSender);
addSaveImageAction(image);
}
@@ -167,7 +167,7 @@ TimelineItem::TimelineItem(FileItem *file,
{
init();
- setupLocalWidgetLayout<FileItem>(file, userid, "sent a file", withSender);
+ setupLocalWidgetLayout<FileItem>(file, userid, withSender);
}
TimelineItem::TimelineItem(AudioItem *audio,
@@ -180,7 +180,7 @@ TimelineItem::TimelineItem(AudioItem *audio,
{
init();
- setupLocalWidgetLayout<AudioItem>(audio, userid, "sent an audio clip", withSender);
+ setupLocalWidgetLayout<AudioItem>(audio, userid, withSender);
}
TimelineItem::TimelineItem(VideoItem *video,
@@ -193,7 +193,7 @@ TimelineItem::TimelineItem(VideoItem *video,
{
init();
- setupLocalWidgetLayout<VideoItem>(video, userid, "sent a video clip", withSender);
+ setupLocalWidgetLayout<VideoItem>(video, userid, withSender);
}
TimelineItem::TimelineItem(ImageItem *image,
@@ -205,7 +205,7 @@ TimelineItem::TimelineItem(ImageItem *image,
, room_id_{room_id}
{
setupWidgetLayout<mtx::events::RoomEvent<mtx::events::msg::Image>, ImageItem>(
- image, event, " sent an image", with_sender);
+ image, event, with_sender);
addSaveImageAction(image);
}
@@ -218,8 +218,7 @@ TimelineItem::TimelineItem(StickerItem *image,
: QWidget(parent)
, room_id_{room_id}
{
- setupWidgetLayout<mtx::events::Sticker, StickerItem>(
- image, event, " sent a sticker", with_sender);
+ setupWidgetLayout<mtx::events::Sticker, StickerItem>(image, event, with_sender);
addSaveImageAction(image);
}
@@ -233,7 +232,7 @@ TimelineItem::TimelineItem(FileItem *file,
, room_id_{room_id}
{
setupWidgetLayout<mtx::events::RoomEvent<mtx::events::msg::File>, FileItem>(
- file, event, " sent a file", with_sender);
+ file, event, with_sender);
}
TimelineItem::TimelineItem(AudioItem *audio,
@@ -245,7 +244,7 @@ TimelineItem::TimelineItem(AudioItem *audio,
, room_id_{room_id}
{
setupWidgetLayout<mtx::events::RoomEvent<mtx::events::msg::Audio>, AudioItem>(
- audio, event, " sent an audio clip", with_sender);
+ audio, event, with_sender);
}
TimelineItem::TimelineItem(VideoItem *video,
@@ -257,7 +256,7 @@ TimelineItem::TimelineItem(VideoItem *video,
, room_id_{room_id}
{
setupWidgetLayout<mtx::events::RoomEvent<mtx::events::msg::Video>, VideoItem>(
- video, event, " sent a video clip", with_sender);
+ video, event, with_sender);
}
/*
diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc
index d7f674d4..3a8e1c3d 100644
--- a/src/timeline/TimelineView.cc
+++ b/src/timeline/TimelineView.cc
@@ -19,6 +19,7 @@
#include <QFileInfo>
#include <QTimer>
+#include "Cache.h"
#include "ChatPage.h"
#include "Config.h"
#include "FloatingButton.h"
@@ -212,8 +213,9 @@ TimelineView::addBackwardsEvents(const QString &room_id, const mtx::responses::M
isTimelineFinished = false;
// Queue incoming messages to be rendered later.
- for (auto const &e : msgs.chunk)
- topMessages_.emplace_back(e);
+ topMessages_.insert(topMessages_.end(),
+ std::make_move_iterator(msgs.chunk.begin()),
+ std::make_move_iterator(msgs.chunk.end()));
// The RoomList message preview will be updated only if this
// is the first batch of messages received through /messages
@@ -361,8 +363,9 @@ TimelineView::addEvents(const mtx::responses::Timeline &timeline)
isInitialSync = false;
}
- for (const auto &e : timeline.events)
- bottomMessages_.push_back(e);
+ bottomMessages_.insert(bottomMessages_.end(),
+ std::make_move_iterator(timeline.events.begin()),
+ std::make_move_iterator(timeline.events.end()));
if (!bottomMessages_.empty())
notifyForLastEvent(findLastViewableEvent(bottomMessages_));
|