[network/ruqola] src: Use correct model
Laurent Montel <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit a3dc558c4d9151e481692b54eee9285655da9a12 by Laurent Montel.
Committed on 29/07/2026 at 06:15.
Pushed by mlaurent into branch 'master'.
Use correct model
M +39 -4 src/core/model/usersforroomfilterproxymodel.cpp
M +24 -6 src/widgets/room/usersinroomwidget.cpp
https://invent.kde.org/network/ruqola/-/commit/a3dc558c4d9151e481692b54eee9285655da9a12
diff --git a/src/core/model/usersforroomfilterproxymodel.cpp b/src/core/model/usersforroomfilterproxymodel.cpp
index 4137a68856..5ab640eac8 100644
--- a/src/core/model/usersforroomfilterproxymodel.cpp
+++ b/src/core/model/usersforroomfilterproxymodel.cpp
@@ -7,8 +7,31 @@
#include "usersforroomfilterproxymodel.h"
#include "usersforroommodel.h"
+#include <QAbstractProxyModel>
using namespace Qt::Literals::StringLiterals;
+
+namespace
+{
+[[nodiscard]] const UsersForRoomModel *sourceUsersForRoomModel(const QAbstractItemModel *model)
+{
+ const QAbstractItemModel *currentModel = model;
+ while (currentModel) {
+ if (const auto *usersModel = qobject_cast<const UsersForRoomModel *>(currentModel)) {
+ return usersModel;
+ }
+
+ const auto *proxyModel = qobject_cast<const QAbstractProxyModel *>(currentModel);
+ if (!proxyModel) {
+ return nullptr;
+ }
+ currentModel = proxyModel->sourceModel();
+ }
+
+ return nullptr;
+}
+}
+
UsersForRoomFilterProxyModel::UsersForRoomFilterProxyModel(QObject *parent)
: SortFilterProxyModelBase(parent)
{
@@ -28,7 +51,10 @@ void UsersForRoomFilterProxyModel::clearFilter()
bool UsersForRoomFilterProxyModel::hasFullList() const
{
- return static_cast<UsersForRoomModel *>(sourceModel())->hasFullList();
+ if (const auto *usersModel = sourceUsersForRoomModel(sourceModel())) {
+ return usersModel->hasFullList();
+ }
+ return false;
}
bool UsersForRoomFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
@@ -56,17 +82,26 @@ void UsersForRoomFilterProxyModel::setStatusType(UsersForRoomFilterProxyModel::F
bool UsersForRoomFilterProxyModel::loadMoreUsersInProgress() const
{
- return static_cast<UsersForRoomModel *>(sourceModel())->loadMoreUsersInProgress();
+ if (const auto *usersModel = sourceUsersForRoomModel(sourceModel())) {
+ return usersModel->loadMoreUsersInProgress();
+ }
+ return false;
}
int UsersForRoomFilterProxyModel::total() const
{
- return static_cast<UsersForRoomModel *>(sourceModel())->total();
+ if (const auto *usersModel = sourceUsersForRoomModel(sourceModel())) {
+ return usersModel->total();
+ }
+ return 0;
}
int UsersForRoomFilterProxyModel::numberOfUsers() const
{
- return static_cast<UsersForRoomModel *>(sourceModel())->usersCount();
+ if (const auto *usersModel = sourceUsersForRoomModel(sourceModel())) {
+ return usersModel->usersCount();
+ }
+ return 0;
}
bool UsersForRoomFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
diff --git a/src/widgets/room/usersinroomwidget.cpp b/src/widgets/room/usersinroomwidget.cpp
index 3d95c7df7f..f45549020c 100644
--- a/src/widgets/room/usersinroomwidget.cpp
+++ b/src/widgets/room/usersinroomwidget.cpp
@@ -23,6 +23,20 @@
#include <QVBoxLayout>
using namespace Qt::Literals::StringLiterals;
+
+namespace
+{
+[[nodiscard]] UsersForRoomModel *usersForRoomModelFromTreeView(const UsersInRoomTreeView *treeView)
+{
+ if (!treeView) {
+ return nullptr;
+ }
+ auto *const roomFilterProxy = treeView->usersForRoomFilterProxy();
+ auto *const headingsProxy = qobject_cast<UsersForRoomListHeadingsProxyModel *>(roomFilterProxy ? roomFilterProxy->sourceModel() : nullptr);
+ return headingsProxy ? qobject_cast<UsersForRoomModel *>(headingsProxy->sourceModel()) : nullptr;
+}
+}
+
UsersInRoomWidget::UsersInRoomWidget(RocketChatAccount *account, QWidget *parent)
: QWidget(parent)
, mListView(new UsersInRoomTreeView(this))
@@ -159,20 +173,24 @@ void UsersInRoomWidget::slotShowUserInfo(const QModelIndex &index)
void UsersInRoomWidget::updateLabel()
{
- auto *const roomFilterProxy = mListView->usersForRoomFilterProxy();
- if (roomFilterProxy->loadMoreUsersInProgress()) {
+ const auto *const usersForRoomModel = usersForRoomModelFromTreeView(mListView);
+ if (usersForRoomModel && usersForRoomModel->loadMoreUsersInProgress()) {
mMessageListInfo->setText(i18n("Loading…"));
} else {
- mMessageListInfo->setText(roomFilterProxy->numberOfUsers() == 0 ? i18n("No Message found") : displayShowMessageInRoom());
+ mMessageListInfo->setText((usersForRoomModel && usersForRoomModel->usersCount() > 0) ? displayShowMessageInRoom() : i18n("No Message found"));
}
}
QString UsersInRoomWidget::displayShowMessageInRoom() const
{
- auto *const roomFilterProxy = mListView->usersForRoomFilterProxy();
+ const auto *const usersForRoomModel = usersForRoomModelFromTreeView(mListView);
+ if (!usersForRoomModel) {
+ return {};
+ }
+
QString displayMessageStr =
- i18np("%1 User in room (Total: %2)", "%1 Users in room (Total: %2)", roomFilterProxy->numberOfUsers(), roomFilterProxy->total());
- if (!roomFilterProxy->hasFullList()) {
+ i18np("%1 User in room (Total: %2)", "%1 Users in room (Total: %2)", usersForRoomModel->usersCount(), usersForRoomModel->total());
+ if (!usersForRoomModel->hasFullList()) {
displayMessageStr += u" <a href=\"loadmoreelement\">%1</a>"_s.arg(i18n("(Click here for Loading more…)"));
}
return displayMessageStr;