Store duplicate indices as key-value pair with value storing bucket of all duplicates

Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
This commit is contained in:
Claudio Cambra 2024-10-17 14:48:58 +08:00 committed by backportbot[bot]
parent cc4e2591ec
commit 10ff7dddbd
2 changed files with 13 additions and 11 deletions

View file

@ -501,23 +501,24 @@ void ShareModel::slotSharesFetched(const QList<SharePtr> &shares)
continue;
}
auto hasDuplicates = false;
const auto duplicateIndices = QSharedPointer<QSet<unsigned int>>::create();
const auto handleDuplicateIndex = [this, duplicateIndices](const unsigned int idx) {
duplicateIndices->insert(idx);
_duplicateDisplayNameShareIndices[idx] = duplicateIndices;
const auto targetIdx = index(idx);
dataChanged(targetIdx, targetIdx, {Qt::DisplayRole});
};
for (auto j = i + 1; j < shareCount; ++j) {
const auto otherSharee = _shares.at(j)->getShareWith();
if (otherSharee == nullptr || sharee->format() != otherSharee->format()) {
continue;
}
hasDuplicates = true; // Reassign is faster
_duplicateDisplayNameShareIndices.insert(j);
const auto targetIndex = index(j);
dataChanged(targetIndex, targetIndex, {Qt::DisplayRole});
handleDuplicateIndex(j);
}
if (hasDuplicates) {
_duplicateDisplayNameShareIndices.insert(i);
const auto targetIndex = index(i);
dataChanged(targetIndex, targetIndex, {Qt::DisplayRole});
if (!duplicateIndices->isEmpty()) {
handleDuplicateIndex(i);
}
}

View file

@ -253,7 +253,8 @@ private:
QHash<QString, QPersistentModelIndex> _shareIdIndexHash;
QHash<QString, QString> _shareIdRecentlySetPasswords;
QVector<ShareePtr> _sharees;
QSet<unsigned int> _duplicateDisplayNameShareIndices;
// Buckets of sharees with the same display name
QHash<unsigned int, QSharedPointer<QSet<unsigned int>>> _duplicateDisplayNameShareIndices;
};
} // namespace OCC