From 09c382f9469f475618307fbaf35698705cdca78e Mon Sep 17 00:00:00 2001 From: Philipp Wolfer Date: Mon, 21 Sep 2020 17:21:09 +0200 Subject: [PATCH] PICARD-259: Execute tagger script when file gets moved to track This allows using file specific metadata and variables (such as e.g. %_bitrate%) to be used in tagger script. Also fixes PICARD-23 --- picard/track.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/picard/track.py b/picard/track.py index 939e8a2d2..9730881e0 100644 --- a/picard/track.py +++ b/picard/track.py @@ -170,7 +170,12 @@ class Track(DataObject, Item): def update_file_metadata(self, file): if file not in self.linked_files: return - file.copy_metadata(self.metadata) + # Run the scripts for the file to allow usage of + # file specific metadata and variables + metadata = Metadata(file.metadata) + metadata.update(self.orig_metadata) + self.run_scripts(metadata) + file.copy_metadata(metadata) file.metadata['~extension'] = file.orig_metadata['~extension'] file.update(signal=False) self.update() @@ -189,6 +194,16 @@ class Track(DataObject, Item): if self.item.isSelected(): self.tagger.window.refresh_metadatabox() + @staticmethod + def run_scripts(metadata): + for s_name, s_text in enabled_tagger_scripts_texts(): + parser = ScriptParser() + try: + parser.eval(s_text, metadata) + except ScriptError: + log.exception("Failed to run tagger script %s on track", s_name) + metadata.strip_whitespace() + def update(self): if self.item: self.item.update() @@ -403,14 +418,7 @@ class NonAlbumTrack(Track): self.orig_metadata.copy(m) self._customize_metadata() run_track_metadata_processors(self.album, m, recording) - for s_name, s_text in enabled_tagger_scripts_texts(): - parser = ScriptParser() - try: - parser.eval(s_text, m) - except ScriptError: - log.exception("Failed to run tagger script %s on track", s_name) - m.strip_whitespace() - + self.run_scripts(m) self.loaded = True self.status = None if self.callback: