Use iter_unique in scriptsmenu

This commit is contained in:
Philipp Wolfer
2020-12-03 11:21:27 +01:00
parent bab8447c8e
commit 024a809cf2

View File

@@ -3,7 +3,7 @@
# Picard, the next-generation MusicBrainz tagger
#
# Copyright (C) 2018 Laurent Monin
# Copyright (C) 2018 Philipp Wolfer
# Copyright (C) 2018, 2020 Philipp Wolfer
# Copyright (C) 2018 Yvan Rivière
#
# This program is free software; you can redistribute it and/or
@@ -36,7 +36,7 @@ from picard.script import (
ScriptParser,
)
from picard.track import Track
from picard.util import uniqify
from picard.util import iter_unique
class ScriptsMenu(QtWidgets.QMenu):
@@ -53,7 +53,7 @@ class ScriptsMenu(QtWidgets.QMenu):
s_text = script[3]
parser = ScriptParser()
for obj in self._get_unique_metadata_objects():
for obj in self._iter_unique_metadata_objects():
try:
parser.eval(s_text, obj.metadata)
obj.update()
@@ -66,20 +66,17 @@ class ScriptsMenu(QtWidgets.QMenu):
}
self.tagger.window.set_statusbar_message(msg, mparms)
def _get_unique_metadata_objects(self):
objs = self._get_metadata_objects(self.tagger.window.selected_objects)
return uniqify(objs)
def _iter_unique_metadata_objects(self):
return iter_unique(self._iter_metadata_objects(self.tagger.window.selected_objects))
def _get_metadata_objects(self, objs):
def _iter_metadata_objects(self, objs):
for obj in objs:
if hasattr(obj, 'metadata'):
yield obj
if isinstance(obj, Cluster):
yield from self._get_metadata_objects(obj.files)
if isinstance(obj, ClusterList):
yield from self._get_metadata_objects(obj)
if isinstance(obj, Album):
yield from self._get_metadata_objects(obj.tracks)
yield from self._get_metadata_objects(obj.unmatched_files.iterfiles())
if isinstance(obj, Track):
yield from self._get_metadata_objects(obj.files)
if isinstance(obj, Cluster) or isinstance(obj, Track):
yield from self._iter_metadata_objects(obj.iterfiles())
elif isinstance(obj, ClusterList):
yield from self._iter_metadata_objects(obj)
elif isinstance(obj, Album):
yield from self._iter_metadata_objects(obj.tracks)
yield from self._iter_metadata_objects(obj.unmatched_files.iterfiles())