summary refs log tree commit diff
path: root/src/timeline2/TimelineModel.cpp
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2019-09-09 20:33:22 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2019-11-23 20:06:14 +0100
commit4efac5a247721c1c5ba4c072be0bce21ee620039 (patch)
treef7ef3f9fe6a87879e2655caab50cd42211bc4f2f /src/timeline2/TimelineModel.cpp
parentFix shadow error (diff)
downloadnheko-4efac5a247721c1c5ba4c072be0bce21ee620039.tar.xz
Try to fix duplicate messages in certain edge cases (i.e. sync and pagination at the same time)
Diffstat (limited to 'src/timeline2/TimelineModel.cpp')
-rw-r--r--src/timeline2/TimelineModel.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/timeline2/TimelineModel.cpp b/src/timeline2/TimelineModel.cpp

index d3d6f5c7..54f03b56 100644 --- a/src/timeline2/TimelineModel.cpp +++ b/src/timeline2/TimelineModel.cpp
@@ -324,10 +324,16 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline) QString id = boost::apply_visitor([](const auto &e) -> QString { return eventId(e); }, e); + if (this->events.contains(id)) + continue; + this->events.insert(id, e); ids.push_back(id); } + if (ids.empty) + return; + beginInsertRows(QModelIndex(), static_cast<int>(this->eventOrder.size()), static_cast<int>(this->eventOrder.size() + ids.size() - 1)); @@ -372,13 +378,18 @@ TimelineModel::addBackwardsEvents(const mtx::responses::Messages &msgs) QString id = boost::apply_visitor([](const auto &e) -> QString { return eventId(e); }, e); + if (this->events.contains(id)) + continue; + this->events.insert(id, e); ids.push_back(id); } - beginInsertRows(QModelIndex(), 0, static_cast<int>(ids.size() - 1)); - this->eventOrder.insert(this->eventOrder.begin(), ids.rbegin(), ids.rend()); - endInsertRows(); + if (!ids.empty()) { + beginInsertRows(QModelIndex(), 0, static_cast<int>(ids.size() - 1)); + this->eventOrder.insert(this->eventOrder.begin(), ids.rbegin(), ids.rend()); + endInsertRows(); + } prev_batch_token_ = QString::fromStdString(msgs.end);