diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
index c42cd6e9..3651a6f1 100644
--- a/resources/qml/TimelineView.qml
+++ b/resources/qml/TimelineView.qml
@@ -93,7 +93,7 @@ Page {
BusyIndicator {
anchors.centerIn: parent
- running: timelineManager.isInitialSync
+ running: timelineManager.isInitialSync || chat.model.paginationInProgress
height: 200
width: 200
z: 3
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index e3a1a781..af5bdc82 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -433,14 +433,25 @@ TimelineModel::canFetchMore(const QModelIndex &) const
}
void
+TimelineModel::setPaginationInProgress(const bool paginationInProgress)
+{
+ if (m_paginationInProgress == paginationInProgress) {
+ return;
+ }
+
+ m_paginationInProgress = paginationInProgress;
+ emit paginationInProgressChanged(m_paginationInProgress);
+}
+
+void
TimelineModel::fetchMore(const QModelIndex &)
{
- if (paginationInProgress) {
+ if (m_paginationInProgress) {
nhlog::ui()->warn("Already loading older messages");
return;
}
- paginationInProgress = true;
+ setPaginationInProgress(true);
mtx::http::MessagesOpts opts;
opts.room_id = room_id_.toStdString();
opts.from = prev_batch_token_.toStdString();
@@ -455,12 +466,13 @@ TimelineModel::fetchMore(const QModelIndex &)
mtx::errors::to_string(err->matrix_error.errcode),
err->matrix_error.error,
err->parse_error);
- paginationInProgress = false;
+ emit oldMessagesRetrieved(std::move(res));
+ setPaginationInProgress(false);
return;
}
emit oldMessagesRetrieved(std::move(res));
- paginationInProgress = false;
+ setPaginationInProgress(false);
});
}
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index ae468c09..14276a5a 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -124,6 +124,7 @@ class TimelineModel : public QAbstractListModel
Q_PROPERTY(std::vector<QString> typingUsers READ typingUsers WRITE updateTypingUsers NOTIFY
typingUsersChanged)
Q_PROPERTY(QString reply READ reply WRITE setReply NOTIFY replyChanged RESET resetReply)
+ Q_PROPERTY(bool paginationInProgress READ paginationInProgress NOTIFY paginationInProgressChanged)
public:
explicit TimelineModel(TimelineViewManager *manager,
@@ -208,6 +209,7 @@ public slots:
}
}
std::vector<QString> typingUsers() const { return typingUsers_; }
+ bool paginationInProgress() const { return m_paginationInProgress; }
QString reply() const { return reply_; }
void setReply(QString newReply)
@@ -246,6 +248,7 @@ signals:
void eventFetched(QString requestingEvent, mtx::events::collections::TimelineEvents event);
void typingUsersChanged(std::vector<QString> users);
void replyChanged(QString reply);
+ void paginationInProgressChanged(const bool);
private:
DecryptionResult decryptEvent(
@@ -261,6 +264,8 @@ private:
mtx::http::RequestErr err);
void readEvent(const std::string &id);
+ void setPaginationInProgress(const bool paginationInProgress);
+
QHash<QString, mtx::events::collections::TimelineEvents> events;
QSet<QString> read;
QList<QString> pending;
@@ -270,8 +275,8 @@ private:
QString prev_batch_token_;
bool isInitialSync = true;
- bool paginationInProgress = false;
bool decryptDescription = true;
+ bool m_paginationInProgress = false;
QString currentId;
QString reply_;
|