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.
This commit is contained in:
Akinniranye Samuel Tomiwa 2026-03-07 15:50:40 +01:00 committed by GitHub
parent 00c69e135e
commit 50d4e2cdd4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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<QTreeWidgetItem*> 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<GxsIdRSTreeWidgetItem*>(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);