Make the explore page search loading process more obvious

Adds progress bars, lots of them! Now it's easier to tell if NeoChat is
trying it's best to load the public room list.
This commit is contained in:
Joshua Goins
2023-08-17 17:37:24 -04:00
parent e53d63ad8b
commit 0a1c489401
3 changed files with 41 additions and 1 deletions

View File

@@ -41,6 +41,7 @@ void PublicRoomListModel::setConnection(Connection *conn)
if (job) {
job->abandon();
job = nullptr;
Q_EMIT loadingChanged();
}
if (m_connection) {
@@ -70,12 +71,14 @@ void PublicRoomListModel::setServer(const QString &value)
nextBatch = "";
attempted = false;
rooms.clear();
Q_EMIT loadingChanged();
endResetModel();
if (job) {
job->abandon();
job = nullptr;
Q_EMIT loadingChanged();
}
if (m_connection) {
@@ -110,6 +113,7 @@ void PublicRoomListModel::setKeyword(const QString &value)
if (job) {
job->abandon();
job = nullptr;
Q_EMIT loadingChanged();
}
if (m_connection) {
@@ -133,6 +137,7 @@ void PublicRoomListModel::next(int count)
}
job = m_connection->callApi<QueryPublicRoomsJob>(m_server, count, nextBatch, QueryPublicRoomsJob::Filter{m_keyword, {}});
Q_EMIT loadingChanged();
connect(job, &BaseJob::finished, this, [this] {
attempted = true;
@@ -150,6 +155,7 @@ void PublicRoomListModel::next(int count)
}
this->job = nullptr;
Q_EMIT loadingChanged();
});
}
@@ -253,4 +259,9 @@ bool PublicRoomListModel::hasMore() const
return !(attempted && nextBatch.isEmpty());
}
bool PublicRoomListModel::loading() const
{
return (job != nullptr) || isJobPending(job);
}
#include "moc_publicroomlistmodel.cpp"

View File

@@ -48,6 +48,11 @@ class PublicRoomListModel : public QAbstractListModel
*/
Q_PROPERTY(bool hasMore READ hasMore NOTIFY hasMoreChanged)
/**
* @biref Whether the model is still loading.
*/
Q_PROPERTY(bool loading READ loading NOTIFY loadingChanged)
public:
/**
* @brief Defines the model roles.
@@ -98,6 +103,8 @@ public:
[[nodiscard]] bool hasMore() const;
[[nodiscard]] bool loading() const;
/**
* @brief Load the next set of rooms.
*
@@ -111,6 +118,7 @@ private:
QString m_keyword;
bool attempted = false;
bool m_loading = false;
QString nextBatch;
QVector<Quotient::PublicRoomsChunk> rooms;
@@ -122,4 +130,5 @@ Q_SIGNALS:
void serverChanged();
void keywordChanged();
void hasMoreChanged();
void loadingChanged();
};

View File

@@ -7,7 +7,7 @@ import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15
import Qt.labs.qmlmodels 1.0
import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigami 2.19 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0
@@ -255,5 +255,25 @@ Kirigami.ScrollablePage {
}
}
}
footer: RowLayout {
width: parent.width
QQC2.ProgressBar {
visible: publicRoomsListView.model.loading && publicRoomsListView.count !== 0
indeterminate: true
padding: Kirigami.Units.largeSpacing * 2
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
Layout.topMargin: Kirigami.Units.largeSpacing
Layout.bottomMargin: Kirigami.Units.largeSpacing
Layout.leftMargin: Kirigami.Units.largeSpacing
Layout.rightMargin: Kirigami.Units.largeSpacing
}
}
Kirigami.LoadingPlaceholder {
anchors.centerIn: parent
visible: publicRoomsListView.model.loading && publicRoomsListView.count === 0
}
}
}