PICARD-1339: Remove O(n^2) complexity when deleting files

This change basically makes sure calls to update_metadata_images are done only once per cluster / track when multiple files get removed. Since update_metadata_images iterates over all files inside a cluster doing this after deletion reduces the complexity significantly.
This commit is contained in:
Philipp Wolfer
2018-09-08 14:00:46 +02:00
committed by Laurent Monin
parent c2437c412b
commit d034e5c6fa
3 changed files with 9 additions and 0 deletions

View File

@@ -114,6 +114,8 @@ class Cluster(QtCore.QObject, Item):
self.item.remove_file(file)
if not self.special and self.get_num_files() == 0:
self.tagger.remove_cluster(self)
def finalize_remove_files(self):
self.update_metadata_images()
self._update_related_album()

View File

@@ -603,12 +603,17 @@ class Tagger(QtWidgets.QApplication):
def remove_files(self, files, from_parent=True):
"""Remove files from the tagger."""
parents = set()
for file in files:
if file.filename in self.files:
file.clear_lookup_task()
self._acoustid.stop_analyze(file)
del self.files[file.filename]
file.remove(from_parent)
parents.add(file.parent)
if from_parent:
for parent in parents:
parent.finalize_remove_files()
def remove_album(self, album):
"""Remove the specified album."""

View File

@@ -100,6 +100,8 @@ class Track(DataObject, Item):
file.copy_metadata(file.orig_metadata, preserve_deleted=False)
self.album._remove_file(self, file)
file.metadata_images_changed.disconnect(self.update_orig_metadata_images)
def finalize_remove_files(self):
self.update()
def update(self):