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
This commit is contained in:
Philipp Wolfer
2020-09-21 17:21:09 +02:00
parent 1e9f86a24a
commit 09c382f946

View File

@@ -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: