mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 20:48:52 +03:00
Don't keep fetching history on non-visible timelines
If the user switched to another timeline before the current timeline filled up with messages, nheko would keep fetching history. Now it will check periodically if the timeline became visible so it can decide whether or not to stop fetching history.
This commit is contained in:
parent
9dcdd70a35
commit
9d763c4de9
2 changed files with 13 additions and 6 deletions
|
@ -27,13 +27,14 @@
|
|||
#include <QStyle>
|
||||
#include <QStyleOption>
|
||||
|
||||
#include <mtx.hpp>
|
||||
#include <mtx/events.hpp>
|
||||
#include <mtx/responses/messages.hpp>
|
||||
|
||||
#include "MatrixClient.h"
|
||||
#include "ScrollBar.h"
|
||||
#include "TimelineItem.h"
|
||||
|
||||
class FloatingButton;
|
||||
class ScrollBar;
|
||||
struct DescInfo;
|
||||
|
||||
// Contains info about a message shown in the history view
|
||||
|
@ -122,6 +123,7 @@ private:
|
|||
void updateLastSender(const QString &user_id, TimelineDirection direction);
|
||||
void notifyForLastEvent();
|
||||
void readLastEvent() const;
|
||||
bool isScrollbarActivated() { return scroll_area_->verticalScrollBar()->value() != 0; }
|
||||
QString getLastEventId() const;
|
||||
QString getEventSender(const mtx::events::collections::TimelineEvents &event) const;
|
||||
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
|
||||
#include "FloatingButton.h"
|
||||
#include "RoomMessages.h"
|
||||
#include "ScrollBar.h"
|
||||
|
||||
#include "timeline/TimelineView.h"
|
||||
#include "timeline/widgets/AudioItem.h"
|
||||
|
@ -83,12 +82,18 @@ TimelineView::sliderRangeChanged(int min, int max)
|
|||
void
|
||||
TimelineView::fetchHistory()
|
||||
{
|
||||
bool hasEnoughMessages = scroll_area_->verticalScrollBar()->isVisible();
|
||||
if (!isScrollbarActivated() && !isTimelineFinished) {
|
||||
if (!isVisible()) {
|
||||
// Check again later if the timeline became visible.
|
||||
// TODO: Use a backoff strategy.
|
||||
paginationTimer_->start(3000);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasEnoughMessages && !isTimelineFinished) {
|
||||
isPaginationInProgress_ = true;
|
||||
client_->messages(room_id_, prev_batch_token_);
|
||||
paginationTimer_->start(500);
|
||||
paginationTimer_->start(1500);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue