summary refs log tree commit diff
path: root/src/timeline/EventStore.cpp
diff options
context:
space:
mode:
authorDeepBlueV7.X <nicolas.werner@hotmail.de>2021-01-12 00:07:20 +0100
committerGitHub <noreply@github.com>2021-01-12 00:07:20 +0100
commitb6f2acfed581eed3593768c2be00479ac7102b7c (patch)
treea26a596d0638956994d39cf6b443521f4ca2ff10 /src/timeline/EventStore.cpp
parentForgot to save res.qrc (diff)
parentFix timeline becoming corrupted on backfill (diff)
downloadnheko-b6f2acfed581eed3593768c2be00479ac7102b7c.tar.xz
Merge pull request #373 from Nheko-Reborn/misc-fixes
Misc fixes
Diffstat (limited to 'src/timeline/EventStore.cpp')
-rw-r--r--src/timeline/EventStore.cpp32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp

index e561d099..6cf8e602 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp
@@ -67,11 +67,25 @@ EventStore::EventStore(std::string room_id, QObject *) if (newFirst == first) fetchMore(); else { - emit beginInsertRows(toExternalIdx(newFirst), - toExternalIdx(this->first - 1)); - this->first = newFirst; - emit endInsertRows(); - emit fetchedMore(); + if (this->last != std::numeric_limits<uint64_t>::max()) { + emit beginInsertRows(toExternalIdx(newFirst), + toExternalIdx(this->first - 1)); + this->first = newFirst; + emit endInsertRows(); + emit fetchedMore(); + } else { + auto range = cache::client()->getTimelineRange(room_id_); + + if (range && range->last - range->first != 0) { + emit beginInsertRows(0, int(range->last - range->first)); + this->first = range->first; + this->last = range->last; + emit endInsertRows(); + emit fetchedMore(); + } else { + fetchMore(); + } + } } }, Qt::QueuedConnection); @@ -247,15 +261,19 @@ EventStore::handleSync(const mtx::responses::Timeline &events) nhlog::db()->warn("{} called from a different thread!", __func__); auto range = cache::client()->getTimelineRange(room_id_); - if (!range) + if (!range) { + emit beginResetModel(); + this->first = std::numeric_limits<uint64_t>::max(); + this->last = std::numeric_limits<uint64_t>::max(); + emit endResetModel(); return; + } if (events.limited) { emit beginResetModel(); this->last = range->last; this->first = range->first; emit endResetModel(); - } else if (range->last > this->last) { emit beginInsertRows(toExternalIdx(this->last + 1), toExternalIdx(range->last)); this->last = range->last;