summary refs log tree commit diff
path: root/src/TimelineView.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-08-05 15:59:24 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-08-05 15:59:24 +0300
commitaf0f22fc9102e931a0d4cee43f642d084e5e539f (patch)
tree48e88e8163c25920de722ba7d10de7a410a256be /src/TimelineView.cc
parentParse utf-8 data properly (diff)
downloadnheko-af0f22fc9102e931a0d4cee43f642d084e5e539f.tar.xz
Keep fetching history until the scrollbar gets activated
Diffstat (limited to 'src/TimelineView.cc')
-rw-r--r--src/TimelineView.cc19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/TimelineView.cc b/src/TimelineView.cc

index 731e7db5..5968f9cf 100644 --- a/src/TimelineView.cc +++ b/src/TimelineView.cc
@@ -65,8 +65,10 @@ void TimelineView::sliderRangeChanged(int min, int max) { Q_UNUSED(min); - if (!scroll_area_->verticalScrollBar()->isVisible()) + if (!scroll_area_->verticalScrollBar()->isVisible()) { + scroll_area_->verticalScrollBar()->setValue(max); return; + } if (max - scroll_area_->verticalScrollBar()->value() < SCROLL_BAR_GAP) scroll_area_->verticalScrollBar()->setValue(max); @@ -84,7 +86,6 @@ void TimelineView::sliderRangeChanged(int min, int max) newPosition = max; scroll_area_->verticalScrollBar()->setValue(newPosition); - fetchHistory(); } } @@ -92,11 +93,14 @@ void TimelineView::fetchHistory() { bool hasEnoughMessages = scroll_area_->verticalScrollBar()->value() != 0; - if (!hasEnoughMessages && !isTimelineFinished && !isPaginationInProgress_) { + if (!hasEnoughMessages && !isTimelineFinished) { isPaginationInProgress_ = true; client_->messages(room_id_, prev_batch_token_); - scroll_area_->verticalScrollBar()->setValue(scroll_area_->verticalScrollBar()->maximum()); + paginationTimer_->start(500); + return; } + + paginationTimer_->stop(); } void TimelineView::scrollDown() @@ -169,10 +173,8 @@ void TimelineView::addBackwardsEvents(const QString &room_id, const RoomMessages oldPosition_ = scroll_area_->verticalScrollBar()->value(); oldHeight_ = scroll_widget_->size().height(); - for (const auto &item : items) { - item->adjustSize(); + for (const auto &item : items) addTimelineItem(item, TimelineDirection::Top); - } prev_batch_token_ = msgs.end(); isPaginationInProgress_ = false; @@ -323,6 +325,9 @@ void TimelineView::init() setLayout(top_layout_); + paginationTimer_ = new QTimer(this); + connect(paginationTimer_, &QTimer::timeout, this, &TimelineView::fetchHistory); + connect(client_.data(), &MatrixClient::messagesRetrieved, this, &TimelineView::addBackwardsEvents); connect(scroll_area_->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(sliderMoved(int)));