diff --git a/src/TimelineView.cc b/src/TimelineView.cc
index 0b6c09eb..1d6dd59a 100644
--- a/src/TimelineView.cc
+++ b/src/TimelineView.cc
@@ -153,7 +153,6 @@ void TimelineView::addBackwardsEvents(const QString &room_id, const RoomMessages
}
isTimelineFinished = false;
- last_sender_backwards_.clear();
QList<TimelineItem *> items;
// Parse in reverse order to determine where we should not show sender's name.
@@ -183,6 +182,11 @@ void TimelineView::addBackwardsEvents(const QString &room_id, const RoomMessages
// Exclude the top stretch.
if (!msgs.chunk().isEmpty() && scroll_layout_->count() > 1)
notifyForLastEvent();
+
+ // If this batch is the first being rendered (i.e the first and the last events
+ // originate from this batch), set the last sender.
+ if (lastSender_.isEmpty() && !items.isEmpty())
+ lastSender_ = items.constFirst()->descriptionMessage().userid;
}
TimelineItem *TimelineView::parseMessageEvent(const QJsonObject &event, TimelineDirection direction)
@@ -279,12 +283,11 @@ int TimelineView::addEvents(const Timeline &timeline)
for (const auto &event : timeline.events()) {
TimelineItem *item = parseMessageEvent(event.toObject(), TimelineDirection::Bottom);
- auto sender = event.toObject().value("sender").toString();
if (item != nullptr) {
addTimelineItem(item, TimelineDirection::Bottom);
- if (sender != localUser)
+ if (localUser != event.toObject().value("sender").toString())
message_count += 1;
}
}
@@ -342,17 +345,17 @@ void TimelineView::init()
void TimelineView::updateLastSender(const QString &user_id, TimelineDirection direction)
{
if (direction == TimelineDirection::Bottom)
- last_sender_ = user_id;
+ lastSender_ = user_id;
else
- last_sender_backwards_ = user_id;
+ firstSender_ = user_id;
}
bool TimelineView::isSenderRendered(const QString &user_id, TimelineDirection direction)
{
if (direction == TimelineDirection::Bottom)
- return last_sender_ != user_id;
+ return lastSender_ != user_id;
else
- return last_sender_backwards_ != user_id;
+ return firstSender_ != user_id;
}
TimelineItem *TimelineView::createTimelineItem(const events::MessageEvent<msgs::Image> &event, const QString &color, bool with_sender)
@@ -428,7 +431,7 @@ void TimelineView::addUserTextMessage(const QString &body, int txn_id)
QSettings settings;
auto user_id = settings.value("auth/user_id").toString();
- auto with_sender = last_sender_ != user_id;
+ auto with_sender = lastSender_ != user_id;
auto color = TimelineViewManager::getUserColor(user_id);
TimelineItem *view_item;
@@ -440,7 +443,7 @@ void TimelineView::addUserTextMessage(const QString &body, int txn_id)
scroll_layout_->addWidget(view_item);
- last_sender_ = user_id;
+ lastSender_ = user_id;
PendingMessage message(txn_id, body, "", view_item);
|