summary refs log tree commit diff
path: root/src/timeline/TimelineModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/timeline/TimelineModel.cpp')
-rw-r--r--src/timeline/TimelineModel.cpp75
1 files changed, 44 insertions, 31 deletions
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 8746a31f..3dafb8c2 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -349,6 +349,50 @@ TimelineModel::data(const QModelIndex &index, int role) const
         }
 }
 
+bool
+TimelineModel::canFetchMore(const QModelIndex &) const
+{
+        if (eventOrder.empty())
+                return true;
+        if (!std::holds_alternative<mtx::events::StateEvent<mtx::events::state::Create>>(
+              events[eventOrder.back()]))
+                return true;
+        else
+
+                return false;
+}
+
+void
+TimelineModel::fetchMore(const QModelIndex &)
+{
+        if (paginationInProgress) {
+                nhlog::ui()->warn("Already loading older messages");
+                return;
+        }
+
+        paginationInProgress = true;
+        mtx::http::MessagesOpts opts;
+        opts.room_id = room_id_.toStdString();
+        opts.from    = prev_batch_token_.toStdString();
+
+        nhlog::ui()->debug("Paginationg room {}", opts.room_id);
+
+        http::client()->messages(
+          opts, [this, opts](const mtx::responses::Messages &res, mtx::http::RequestErr err) {
+                  if (err) {
+                          nhlog::net()->error("failed to call /messages ({}): {} - {}",
+                                              opts.room_id,
+                                              mtx::errors::to_string(err->matrix_error.errcode),
+                                              err->matrix_error.error);
+                          paginationInProgress = false;
+                          return;
+                  }
+
+                  emit oldMessagesRetrieved(std::move(res));
+                  paginationInProgress = false;
+          });
+}
+
 void
 TimelineModel::addEvents(const mtx::responses::Timeline &timeline)
 {
@@ -466,37 +510,6 @@ TimelineModel::internalAddEvents(
 }
 
 void
-TimelineModel::fetchHistory()
-{
-        if (paginationInProgress) {
-                nhlog::ui()->warn("Already loading older messages");
-                return;
-        }
-
-        paginationInProgress = true;
-        mtx::http::MessagesOpts opts;
-        opts.room_id = room_id_.toStdString();
-        opts.from    = prev_batch_token_.toStdString();
-
-        nhlog::ui()->info("Paginationg room {}", opts.room_id);
-
-        http::client()->messages(
-          opts, [this, opts](const mtx::responses::Messages &res, mtx::http::RequestErr err) {
-                  if (err) {
-                          nhlog::net()->error("failed to call /messages ({}): {} - {}",
-                                              opts.room_id,
-                                              mtx::errors::to_string(err->matrix_error.errcode),
-                                              err->matrix_error.error);
-                          paginationInProgress = false;
-                          return;
-                  }
-
-                  emit oldMessagesRetrieved(std::move(res));
-                  paginationInProgress = false;
-          });
-}
-
-void
 TimelineModel::setCurrentIndex(int index)
 {
         auto oldIndex = idToIndex(currentId);