mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 12:38:48 +03:00
Add visual indication that data is being fetched
This turns `paginationInProgress` field of `TimelineModel` into a `Q_PROPERTY`, so the Ui can bind to it. For the moment, I'm showing the same spinner as we do during initial sync. It's not ideal, on the count of being giant and in the middle but it's better than nothing. We can make it more subtle later.
This commit is contained in:
parent
19ec8d261d
commit
1f9d3024b1
3 changed files with 23 additions and 6 deletions
|
@ -93,7 +93,7 @@ Page {
|
||||||
|
|
||||||
BusyIndicator {
|
BusyIndicator {
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
running: timelineManager.isInitialSync
|
running: timelineManager.isInitialSync || chat.model.paginationInProgress
|
||||||
height: 200
|
height: 200
|
||||||
width: 200
|
width: 200
|
||||||
z: 3
|
z: 3
|
||||||
|
|
|
@ -432,15 +432,26 @@ TimelineModel::canFetchMore(const QModelIndex &) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TimelineModel::setPaginationInProgress(const bool paginationInProgress)
|
||||||
|
{
|
||||||
|
if (m_paginationInProgress == paginationInProgress) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_paginationInProgress = paginationInProgress;
|
||||||
|
emit paginationInProgressChanged(m_paginationInProgress);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TimelineModel::fetchMore(const QModelIndex &)
|
TimelineModel::fetchMore(const QModelIndex &)
|
||||||
{
|
{
|
||||||
if (paginationInProgress) {
|
if (m_paginationInProgress) {
|
||||||
nhlog::ui()->warn("Already loading older messages");
|
nhlog::ui()->warn("Already loading older messages");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
paginationInProgress = true;
|
setPaginationInProgress(true);
|
||||||
mtx::http::MessagesOpts opts;
|
mtx::http::MessagesOpts opts;
|
||||||
opts.room_id = room_id_.toStdString();
|
opts.room_id = room_id_.toStdString();
|
||||||
opts.from = prev_batch_token_.toStdString();
|
opts.from = prev_batch_token_.toStdString();
|
||||||
|
@ -455,12 +466,13 @@ TimelineModel::fetchMore(const QModelIndex &)
|
||||||
mtx::errors::to_string(err->matrix_error.errcode),
|
mtx::errors::to_string(err->matrix_error.errcode),
|
||||||
err->matrix_error.error,
|
err->matrix_error.error,
|
||||||
err->parse_error);
|
err->parse_error);
|
||||||
paginationInProgress = false;
|
emit oldMessagesRetrieved(std::move(res));
|
||||||
|
setPaginationInProgress(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
emit oldMessagesRetrieved(std::move(res));
|
emit oldMessagesRetrieved(std::move(res));
|
||||||
paginationInProgress = false;
|
setPaginationInProgress(false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -124,6 +124,7 @@ class TimelineModel : public QAbstractListModel
|
||||||
Q_PROPERTY(std::vector<QString> typingUsers READ typingUsers WRITE updateTypingUsers NOTIFY
|
Q_PROPERTY(std::vector<QString> typingUsers READ typingUsers WRITE updateTypingUsers NOTIFY
|
||||||
typingUsersChanged)
|
typingUsersChanged)
|
||||||
Q_PROPERTY(QString reply READ reply WRITE setReply NOTIFY replyChanged RESET resetReply)
|
Q_PROPERTY(QString reply READ reply WRITE setReply NOTIFY replyChanged RESET resetReply)
|
||||||
|
Q_PROPERTY(bool paginationInProgress READ paginationInProgress NOTIFY paginationInProgressChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit TimelineModel(TimelineViewManager *manager,
|
explicit TimelineModel(TimelineViewManager *manager,
|
||||||
|
@ -208,6 +209,7 @@ public slots:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::vector<QString> typingUsers() const { return typingUsers_; }
|
std::vector<QString> typingUsers() const { return typingUsers_; }
|
||||||
|
bool paginationInProgress() const { return m_paginationInProgress; }
|
||||||
|
|
||||||
QString reply() const { return reply_; }
|
QString reply() const { return reply_; }
|
||||||
void setReply(QString newReply)
|
void setReply(QString newReply)
|
||||||
|
@ -246,6 +248,7 @@ signals:
|
||||||
void eventFetched(QString requestingEvent, mtx::events::collections::TimelineEvents event);
|
void eventFetched(QString requestingEvent, mtx::events::collections::TimelineEvents event);
|
||||||
void typingUsersChanged(std::vector<QString> users);
|
void typingUsersChanged(std::vector<QString> users);
|
||||||
void replyChanged(QString reply);
|
void replyChanged(QString reply);
|
||||||
|
void paginationInProgressChanged(const bool);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DecryptionResult decryptEvent(
|
DecryptionResult decryptEvent(
|
||||||
|
@ -261,6 +264,8 @@ private:
|
||||||
mtx::http::RequestErr err);
|
mtx::http::RequestErr err);
|
||||||
void readEvent(const std::string &id);
|
void readEvent(const std::string &id);
|
||||||
|
|
||||||
|
void setPaginationInProgress(const bool paginationInProgress);
|
||||||
|
|
||||||
QHash<QString, mtx::events::collections::TimelineEvents> events;
|
QHash<QString, mtx::events::collections::TimelineEvents> events;
|
||||||
QSet<QString> read;
|
QSet<QString> read;
|
||||||
QList<QString> pending;
|
QList<QString> pending;
|
||||||
|
@ -270,8 +275,8 @@ private:
|
||||||
QString prev_batch_token_;
|
QString prev_batch_token_;
|
||||||
|
|
||||||
bool isInitialSync = true;
|
bool isInitialSync = true;
|
||||||
bool paginationInProgress = false;
|
|
||||||
bool decryptDescription = true;
|
bool decryptDescription = true;
|
||||||
|
bool m_paginationInProgress = false;
|
||||||
|
|
||||||
QString currentId;
|
QString currentId;
|
||||||
QString reply_;
|
QString reply_;
|
||||||
|
|
Loading…
Reference in a new issue