badfiles: added config options to automatically take action on error/warning

This commit is contained in:
Tommy Schnabel-Jones 2026-01-16 11:26:58 -05:00
parent 4572a7dc8a
commit 7310532a9c
3 changed files with 60 additions and 0 deletions

View file

@ -170,16 +170,68 @@ class BadFiles(BeetsPlugin):
if checks_failed:
task._badfiles_checks_failed = checks_failed
def handle_import_action(self, action, failure_type):
if action == "abort":
ui.print_(
f"{ui.colorize('text_warning', 'Aborting')}"
f" due to import_action_on_{failure_type} configuration"
)
raise importer.ImportAbortError()
elif action == "skip":
ui.print_(
f"{ui.colorize('text_warning', 'Skipping')}"
f" due to import_action_on_{failure_type} configuration"
)
return importer.Action.SKIP
elif action == "continue":
ui.print_(
f"{ui.colorize('text_warning', 'Continuing')}"
f" due to import_action_on_{failure_type} configuration"
)
return None
else:
ui.print_(
ui.colorize(
"text_warning",
f"Got invalid import_action_on_{failure_type}"
f" configuration: {action}",
)
)
ui.print_(
ui.colorize(
"text_warning",
f"import_action_on_{failure_type} should be one of:"
f" ask abort skip continue",
)
)
raise importer.ImportAbortError()
def on_import_task_before_choice(self, task, session):
if hasattr(task, "_badfiles_checks_failed"):
warning_action = self.config["import_action_on_warning"].get("ask")
error_action = self.config["import_action_on_error"].get("ask")
ui.print_(
f"{ui.colorize('text_warning', 'BAD')} one or more files failed"
" checks:"
)
found_warning = False
found_error = False
for error in task._badfiles_checks_failed:
for error_line in error:
if "warning" in error_line.lower():
found_warning = True
if "error" in error_line.lower():
found_error = True
ui.print_(error_line)
if found_error and error_action != "ask":
return self.handle_import_action(error_action, "error")
elif found_warning and warning_action != "ask":
return self.handle_import_action(warning_action, "warning")
ui.print_()
ui.print_("What would you like to do?")

View file

@ -12,6 +12,7 @@ been dropped.
New features:
- :doc:`plugins/badfiles`: Added settings for auto error and warning actions.
- :doc:`plugins/fetchart`: Added config setting for a fallback cover art image.
- :doc:`plugins/ftintitle`: Added argument for custom feat. words in ftintitle.
- :doc:`plugins/ftintitle`: Added album template value ``album_artist_no_feat``.

View file

@ -20,6 +20,8 @@ You can also add custom commands for a specific extension, like this:
badfiles:
check_on_import: yes
import_action_on_error: skip
import_action_on_warning: continue
commands:
ogg: myoggchecker --opt1 --opt2
flac: flac --test --warnings-as-errors --silent
@ -32,6 +34,11 @@ You can run the checkers when importing files by using the ``check_on_import``
option. When on, checkers will be run against every imported file and warnings
and errors will be presented when selecting a tagging option.
`import_action_on_error` and `import_action_on_warning` can be used to take
automatic action on warning and errors. Both options default to `ask`.
Valid options for both `import_action_on_(warning|error)` are
`ask skip abort continue`.
.. _flac: https://xiph.org/flac/
.. _mp3val: http://mp3val.sourceforge.net/