Skip to content
Snippets Groups Projects
Commit a76fc7d2 authored by Loren Burkholder's avatar Loren Burkholder
Browse files

Add a fancy loading spinner to the member list

parent e1acf5d3
No related branches found
No related tags found
No related merge requests found
......@@ -109,6 +109,13 @@ ApplicationWindow {
}
}
}
footer: BusyIndicator {
// This is not a wonderful solution, but it is the best way to calculate whether
// all users are loaded while keeping canFetchMore() const
running: members.numUsersLoaded < members.memberCount
anchors.centerIn: parent
}
}
}
}
......
......@@ -34,7 +34,10 @@ MemberList::MemberList(const QString &room_id, QWidget *parent)
}
try {
addUsers(cache::getMembers(room_id_.toStdString()));
auto members = cache::getMembers(room_id_.toStdString());
addUsers(members);
numUsersLoaded_ = members.size();
emit numUsersLoadedChanged();
} catch (const lmdb::error &e) {
nhlog::db()->critical("Failed to retrieve members from cache: {}", e.what());
}
......@@ -83,11 +86,17 @@ bool
MemberList::canFetchMore(const QModelIndex &) const
{
const size_t numMembers = rowCount();
return (numMembers > 1 && numMembers < info_.member_count);
if (numMembers > 1 && numMembers < info_.member_count)
return true;
else
return false;
}
void
MemberList::fetchMore(const QModelIndex &)
{
addUsers(cache::getMembers(room_id_.toStdString(), rowCount()));
auto members = cache::getMembers(room_id_.toStdString(), rowCount());
addUsers(members);
numUsersLoaded_ = members.size();
emit numUsersLoadedChanged();
}
......@@ -15,6 +15,7 @@ class MemberList : public QAbstractListModel
Q_PROPERTY(size_t memberCount READ memberCount NOTIFY memberCountChanged)
Q_PROPERTY(QString avatarUrl READ avatarUrl NOTIFY avatarUrlChanged)
Q_PROPERTY(QString roomId READ roomId NOTIFY roomIdChanged)
Q_PROPERTY(int numUsersLoaded READ numUsersLoaded NOTIFY numUsersLoadedChanged)
public:
enum Roles
......@@ -37,12 +38,14 @@ public:
size_t memberCount() const { return info_.member_count; }
QString avatarUrl() const { return QString::fromStdString(info_.avatar_url); }
QString roomId() const { return room_id_; }
int numUsersLoaded() const { return numUsersLoaded_; }
signals:
void roomNameChanged();
void memberCountChanged();
void avatarUrlChanged();
void roomIdChanged();
void numUsersLoadedChanged();
public slots:
void addUsers(const std::vector<RoomMember> &users);
......@@ -55,4 +58,5 @@ private:
QVector<QPair<RoomMember, QString>> m_memberList;
QString room_id_;
RoomInfo info_;
int numUsersLoaded_;
};
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