[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;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.