Skip to content
Snippets Groups Projects
Commit 28bcd83d authored by Nicolas Werner's avatar Nicolas Werner
Browse files

Prevent loading older messages while loading older messages

parent 6f66771b
No related branches found
No related tags found
No related merge requests found
......@@ -136,7 +136,7 @@ template <class T>::EventType::Type toRoomEventType(const Event<T> &e) {
::EventType::Type toRoomEventType(const Event<mtx::events::msg::Video> &e) { return ::EventType::VideoMessage; }
} // namespace
Room::Room(QObject *parent) {
Room::Room(QObject *parent) : loadingOlderMessages(false) {
Q_UNUSED(parent);
connect(this, &Room::newEvents, this, &Room::addEvents, Qt::QueuedConnection);
connect(this, &Room::newTags, this, &Room::setTags, Qt::QueuedConnection);
......@@ -291,6 +291,10 @@ void Room::addEvents(std::vector<mtx::events::collections::TimelineEvents> event
}
void Room::fetchOlderMessages() {
if (this->loadingOlderMessages.exchange(true)) {
qDebug() << "Already loading older messages";
return;
}
mtx::http::MessagesOpts opts = {};
opts.from = this->prev_batch;
opts.limit = 100;
......@@ -298,10 +302,12 @@ void Room::fetchOlderMessages() {
http::client().messages(opts, [this](const mtx::responses::Messages &res, mtx::http::RequestErr err) {
if (err) {
qDebug() << "failed to retrieve messages: " << *err;
this->loadingOlderMessages = false;
return;
}
emit newEvents({res.chunk.rbegin(), res.chunk.rend()}, res.end, res.start);
this->loadingOlderMessages = false;
});
}
......
#pragma once
#include <atomic>
#include <map>
#include <set>
#include <string>
......@@ -163,6 +164,7 @@ struct Room : public QAbstractListModel {
std::vector<mtx::events::collections::TimelineEvents> events;
std::string prev_batch;
std::string next_batch;
std::atomic<bool> loadingOlderMessages;
std::map<QString, QColor> userColors;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment