summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--resources/qml/TimelineView.qml2
-rw-r--r--src/timeline/TimelineModel.cpp20
-rw-r--r--src/timeline/TimelineModel.h7
3 files changed, 23 insertions, 6 deletions
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_;