[graphics/digikam] /: Uses QSet instead QList to prepare build fingerprints and speed-up pre-processing with large collections.
Gilles Caulier <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit b06de7a3eda2478500c73ca56aecbf010566b08a by Gilles Caulier.
Committed on 17/08/2026 at 22:22.
Pushed by cgilles into branch 'master'.
Uses QSet instead QList to prepare build fingerprints and speed-up pre-processing with large collections.
BUGS: 524383
FIXED-IN: 9.2.0
M +1 -1 NEWS
M +4 -10 core/utilities/maintenance/tools/fingerprints/fingerprintsgenerator.cpp
https://invent.kde.org/graphics/digikam/-/commit/b06de7a3eda2478500c73ca56aecbf010566b08a
diff --git a/NEWS b/NEWS
index d7ff969aa1..c8332e5489 100644
--- a/NEWS
+++ b/NEWS
@@ -69,7 +69,7 @@ BUGFIXES:
043 --> 524196 - Solved for me after performing the mention steps.
044 --> 524254 - Unable to add /usr/bin/tesseract binary to digiKam.
045 --> 511758 - digiKam is almost unusable when mysql is not connected over lan.
-046 -->
+046 --> 524383 - Fingerprint maintenance stuck at 0% for hours on large collections — calculateAffectedAlbums() is O(N²) due to QList::contains() per item.
047 -->
048 -->
049 -->
diff --git a/core/utilities/maintenance/tools/fingerprints/fingerprintsgenerator.cpp b/core/utilities/maintenance/tools/fingerprints/fingerprintsgenerator.cpp
index e81668a729..d16eb9aeb9 100644
--- a/core/utilities/maintenance/tools/fingerprints/fingerprintsgenerator.cpp
+++ b/core/utilities/maintenance/tools/fingerprints/fingerprintsgenerator.cpp
@@ -55,7 +55,7 @@ public:
AlbumList albumList;
- QList<qlonglong> allItemIds;
+ QSet<qlonglong> allItemIds;
QFuture<void> affectedAlbumTask;
QFutureWatcher<void> affectedAlbumWatcher;
@@ -137,7 +137,7 @@ void FingerPrintsGenerator::slotAffectedAlbumsFinished()
setTotalItems(d->allItemIds.count());
- d->thread->generateFingerprints(d->allItemIds, d->rebuildAll);
+ d->thread->generateFingerprints(d->allItemIds.values(), d->rebuildAll);
d->thread->start();
}
@@ -159,10 +159,7 @@ void FingerPrintsGenerator::calculateAffectedAlbums()
for (const qlonglong& id : ids)
{
- if (!d->allItemIds.contains(id))
- {
- d->allItemIds << id;
- }
+ d->allItemIds.insert(id);
}
}
else if ((*it)->type() == Album::TAG)
@@ -171,10 +168,7 @@ void FingerPrintsGenerator::calculateAffectedAlbums()
for (const qlonglong& id : ids)
{
- if (!d->allItemIds.contains(id))
- {
- d->allItemIds << id;
- }
+ d->allItemIds.insert(id);
}
}
}