From 50d4e2cdd469e2c864d39aff57dd93909c9f3fcc Mon Sep 17 00:00:00 2001 From: Akinniranye Samuel Tomiwa Date: Sat, 7 Mar 2026 15:50:40 +0100 Subject: [PATCH] fix(ui): remove redundant guards and prevent partial group updates - Remove meaningless null-check on `ui` value member. - Remove redundant `!mModeratorsWidget` guard in `initUi()` as it is called once post-initialization. - Fix `service_updateGroup()` to return early on fetch failure, preventing the submission of default-constructed group data. - Refactor `addModeratorToList()` to use `findItems().empty()` for duplicate detection instead of a manual loop. --- .../src/gui/gxs/WikiGroupDialog.cpp | 78 ++++++++----------- 1 file changed, 34 insertions(+), 44 deletions(-) diff --git a/retroshare-gui/src/gui/gxs/WikiGroupDialog.cpp b/retroshare-gui/src/gui/gxs/WikiGroupDialog.cpp index 1b3a5eae7..0c19b9cb2 100644 --- a/retroshare-gui/src/gui/gxs/WikiGroupDialog.cpp +++ b/retroshare-gui/src/gui/gxs/WikiGroupDialog.cpp @@ -130,44 +130,38 @@ void WikiGroupDialog::initUi() setUiText(UITYPE_KEY_SHARE_CHECKBOX, tr("Add Wiki Moderators")); setUiText(UITYPE_CONTACTS_DOCK, tr("Select Wiki Moderators")); - if (ui.addAdmins_cb) - { - ui.addAdmins_cb->hide(); - ui.adminsList->hide(); - ui.filtercomboBox->hide(); - } + ui.addAdmins_cb->hide(); + ui.adminsList->hide(); + ui.filtercomboBox->hide(); - if (!mModeratorsWidget) - { - mModeratorsWidget = new QWidget(this); - auto *layout = new QVBoxLayout(mModeratorsWidget); + mModeratorsWidget = new QWidget(this); + auto *layout = new QVBoxLayout(mModeratorsWidget); - mModeratorsGroup = new QGroupBox(tr("Moderators"), mModeratorsWidget); - auto *groupLayout = new QVBoxLayout(mModeratorsGroup); + mModeratorsGroup = new QGroupBox(tr("Moderators"), mModeratorsWidget); + auto *groupLayout = new QVBoxLayout(mModeratorsGroup); - mModeratorsList = new QTreeWidget(mModeratorsGroup); - mModeratorsList->setToolTip(tr("List of users who can moderate this wiki")); - mModeratorsList->setColumnCount(2); - mModeratorsList->setHeaderLabels({tr("Moderator"), tr("Id")}); - mModeratorsList->setRootIsDecorated(false); - mModeratorsList->setSelectionMode(QAbstractItemView::SingleSelection); - mModeratorsList->setUniformRowHeights(true); - groupLayout->addWidget(mModeratorsList); + mModeratorsList = new QTreeWidget(mModeratorsGroup); + mModeratorsList->setToolTip(tr("List of users who can moderate this wiki")); + mModeratorsList->setColumnCount(2); + mModeratorsList->setHeaderLabels({tr("Moderator"), tr("Id")}); + mModeratorsList->setRootIsDecorated(false); + mModeratorsList->setSelectionMode(QAbstractItemView::SingleSelection); + mModeratorsList->setUniformRowHeights(true); + groupLayout->addWidget(mModeratorsList); - auto *buttonLayout = new QHBoxLayout(); - mAddModeratorButton = new QPushButton(tr("Add Moderator"), mModeratorsGroup); - mRemoveModeratorButton = new QPushButton(tr("Remove Moderator"), mModeratorsGroup); - buttonLayout->addWidget(mAddModeratorButton); - buttonLayout->addWidget(mRemoveModeratorButton); - buttonLayout->addStretch(); - groupLayout->addLayout(buttonLayout); + auto *buttonLayout = new QHBoxLayout(); + mAddModeratorButton = new QPushButton(tr("Add Moderator"), mModeratorsGroup); + mRemoveModeratorButton = new QPushButton(tr("Remove Moderator"), mModeratorsGroup); + buttonLayout->addWidget(mAddModeratorButton); + buttonLayout->addWidget(mRemoveModeratorButton); + buttonLayout->addStretch(); + groupLayout->addLayout(buttonLayout); - layout->addWidget(mModeratorsGroup); - injectExtraWidget(mModeratorsWidget); + layout->addWidget(mModeratorsGroup); + injectExtraWidget(mModeratorsWidget); - connect(mAddModeratorButton, SIGNAL(clicked()), this, SLOT(addModerator())); - connect(mRemoveModeratorButton, SIGNAL(clicked()), this, SLOT(removeModerator())); - } + connect(mAddModeratorButton, SIGNAL(clicked()), this, SLOT(addModerator())); + connect(mRemoveModeratorButton, SIGNAL(clicked()), this, SLOT(removeModerator())); updateModeratorControls(); } @@ -200,6 +194,12 @@ bool WikiGroupDialog::service_updateGroup(const RsGroupMetaData &editedMeta) { grp = existingGroups.front(); } + else + { + std::cerr << "WikiGroupDialog::service_updateGroup() Error: could not retrieve existing group data"; + std::cerr << std::endl; + return false; + } grp.mMeta = editedMeta; grp.mDescription = getDescription().toStdString(); @@ -345,19 +345,9 @@ void WikiGroupDialog::addModeratorToList(const RsGxsId &gxsId) // Column structure: column 0 = moderator name/avatar, column 1 = GxsId string QString idString = QString::fromStdString(gxsId.toStdString()); QList items = mModeratorsList->findItems(idString, Qt::MatchExactly, 1); - - // Verify by checking actual IDs to ensure robustness - for (QTreeWidgetItem* item : items) + if (!items.empty()) { - GxsIdRSTreeWidgetItem *gxsItem = dynamic_cast(item); - if (gxsItem) - { - RsGxsId existingId; - if (gxsItem->getId(existingId) && existingId == gxsId) - { - return; // ID already in list - } - } + return; // ID already in list } auto *item = new GxsIdRSTreeWidgetItem(nullptr, GxsIdDetails::ICON_TYPE_AVATAR, true, nullptr);