mirror of
https://github.com/fergalmoran/picard.git
synced 2026-04-28 23:31:18 +00:00
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:
committed by
Laurent Monin
parent
c2437c412b
commit
d034e5c6fa
@@ -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()
|
||||
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user