summary refs log tree commit diff
path: root/src/timeline/EventStore.cpp
diff options
context:
space:
mode:
authorJoseph Donofry <joedonofry@gmail.com>2021-01-11 20:22:57 -0500
committerJoseph Donofry <joedonofry@gmail.com>2021-01-11 20:22:57 -0500
commita8877c39f40d805213f8805b3467d3d0ac165350 (patch)
treeda62c02c28f32d3288ffa62846893db7beb1f839 /src/timeline/EventStore.cpp
parentAdd ripple to completer (diff)
parentMerge pull request #373 from Nheko-Reborn/misc-fixes (diff)
downloadnheko-a8877c39f40d805213f8805b3467d3d0ac165350.tar.xz
Merge branch 'master' of ssh://github.com/Nheko-Reborn/nheko
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;