Add album template value in ftintitle plugin

This commit is contained in:
asardaes 2025-11-15 15:59:35 +01:00 committed by Alexis Sardá
parent f79c125d15
commit 9c37f94171
5 changed files with 32 additions and 3 deletions

View file

@ -19,11 +19,11 @@ from __future__ import annotations
import re
from typing import TYPE_CHECKING
from beets import plugins, ui
from beets import config, plugins, ui
if TYPE_CHECKING:
from beets.importer import ImportSession, ImportTask
from beets.library import Item
from beets.library import Album, Item
def split_on_feat(
@ -98,6 +98,11 @@ def find_feat_part(
return feat_part
def _album_artist_no_feat(album: Album) -> str:
custom_words = config["ftintitle"]["custom_words"].as_str_seq()
return split_on_feat(album["albumartist"], False, list(custom_words))[0]
class FtInTitlePlugin(plugins.BeetsPlugin):
def __init__(self) -> None:
super().__init__()
@ -129,6 +134,10 @@ class FtInTitlePlugin(plugins.BeetsPlugin):
if self.config["auto"]:
self.import_stages = [self.imported]
self.album_template_fields["album_artist_no_feat"] = (
_album_artist_no_feat
)
def commands(self) -> list[ui.Subcommand]:
def func(lib, opts, args):
self.config.set_args(opts)

View file

@ -13,6 +13,7 @@ been dropped.
New features:
- :doc:`plugins/ftintitle`: Added argument for custom feat. words in ftintitle.
- :doc:`plugins/ftintitle`: Added album template value ``album_artist_no_feat``.
- :doc:`plugins/musicbrainz`: Allow selecting tags or genres to populate the
genres tag.
- :doc:`plugins/ftintitle`: Added argument to skip the processing of artist and

View file

@ -33,6 +33,14 @@ file. The available options are:
- **custom_words**: List of additional words that will be treated as a marker
for artist features. Default: ``[]``.
Path Template Values
--------------------
This plugin provides the ``album_artist_no_feat`` :ref:`template value
<templ_plugins>` that you can use in your :ref:`path-format-config` in
``paths.default``. Any ``custom_words`` in the configuration are taken into
account.
Running Manually
----------------

View file

@ -281,6 +281,8 @@ constructs include:
- ``$missing`` by :doc:`/plugins/missing`: The number of missing tracks per
album.
- ``$album_artist_no_feat`` by :doc:`/plugins/ftintitle`: The album artist
without any featured artists
- ``%bucket{text}`` by :doc:`/plugins/bucket`: Substitute a string by the range
it belongs to.
- ``%the{text}`` by :doc:`/plugins/the`: Moves English articles to ends of

View file

@ -18,7 +18,7 @@ from collections.abc import Generator
import pytest
from beets.library.models import Item
from beets.library.models import Album, Item
from beets.test.helper import PluginTestCase
from beetsplug import ftintitle
@ -364,3 +364,12 @@ def test_custom_words(
if custom_words is None:
custom_words = []
assert ftintitle.contains_feat(given, custom_words) is expected
def test_album_template_value():
album = Album()
album["albumartist"] = "Foo ft. Bar"
assert ftintitle._album_artist_no_feat(album) == "Foo"
album["albumartist"] = "Foobar"
assert ftintitle._album_artist_no_feat(album) == "Foobar"