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);
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 4161a0fc..0f18f7ef 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -154,6 +154,9 @@ public:
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ bool canFetchMore(const QModelIndex &) const override;
+ void fetchMore(const QModelIndex &) override;
+
Q_INVOKABLE QColor userColor(QString id, QColor background);
Q_INVOKABLE QString displayName(QString id) const;
Q_INVOKABLE QString avatarUrl(QString id) const;
@@ -175,7 +178,6 @@ public:
void sendMessage(const T &msg);
public slots:
- void fetchHistory();
void setCurrentIndex(int index);
int currentIndex() const { return idToIndex(currentId); }
void markEventsAsRead(const std::vector<QString> &event_ids);
|