Ensure on removal of share that display string is updated for last (now non-)duplicate share

Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
This commit is contained in:
Claudio Cambra 2024-10-17 14:49:35 +08:00 committed by backportbot[bot]
parent 10ff7dddbd
commit d07cb2c69f

View file

@ -647,10 +647,26 @@ void ShareModel::slotRemoveShareWithId(const QString &shareId)
const auto sharee = share->getShareWith();
slotRemoveSharee(sharee);
beginRemoveRows({}, shareIndex.row(), shareIndex.row());
_shares.removeAt(shareIndex.row());
const auto shareRow = shareIndex.row();
beginRemoveRows({}, shareRow, shareRow);
_shares.removeAt(shareRow);
endRemoveRows();
// Handle display name duplicates now. First remove the index from the bucket it was in; then,
// check if this removal means the remaining index in the bucket is no longer a duplicate.
// If this is the case then handle the update for this item too.
const auto duplicateShares = _duplicateDisplayNameShareIndices.value(shareRow);
if (duplicateShares) {
duplicateShares->remove(shareRow);
if (duplicateShares->count() == 1) {
const auto noLongerDuplicateIndex = *(duplicateShares->begin());
_duplicateDisplayNameShareIndices.remove(noLongerDuplicateIndex);
const auto noLongerDuplicateModelIndex = index(noLongerDuplicateIndex);
Q_EMIT dataChanged(noLongerDuplicateModelIndex, noLongerDuplicateModelIndex, {Qt::DisplayRole});
}
_duplicateDisplayNameShareIndices.remove(shareRow);
}
handleLinkShare();
Q_EMIT sharesChanged();