Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions beetsplug/zero.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ def __init__(self):
"fields": [],
"keep_fields": [],
"update_database": False,
"omit_single_disc": False,
}
)

Expand Down Expand Up @@ -123,9 +124,14 @@ def set_fields(self, item, tags):
"""
fields_set = False

if "disc" in tags and self.config["omit_single_disc"].get(bool):
if item.disctotal == 1:
fields_set = True
self._log.debug("disc: {.disc} -> None", item)
tags["disc"] = None

if not self.fields_to_progs:
self._log.warning("no fields, nothing to do")
return False
self._log.warning("no fields list to remove")

for field, progs in self.fields_to_progs.items():
if field in tags:
Expand Down
4 changes: 4 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ Unreleased

New features:

- :doc:`plugins/zero`: Add new configuration option, ``omit_single_disc``, to
allow zeroing the disc number on write for single-disc albums. Defaults to
False.

Bug fixes:

For packagers:
Expand Down
3 changes: 3 additions & 0 deletions docs/plugins/zero.rst
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ to nullify and the conditions for nullifying them:
``keep_fields``---not both!
- To conditionally filter a field, use ``field: [regexp, regexp]`` to specify
regular expressions.
- Set ``omit_single_disc`` to ``True`` to omit writing the ``disc`` number for
albums with only a single disc (``disctotal == 1``). By default, beets will
number the disc even if the album contains only one disc in total.
- By default this plugin only affects files' tags; the beets database is left
unchanged. To update the tags in the database, set the ``update_database``
option to true.
Expand Down
48 changes: 48 additions & 0 deletions test/plugins/test_zero.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,54 @@ def test_fields_removes_preserved_tags(self):

assert "id" not in z.fields_to_progs

def test_omit_single_disc_with_tags_single(self):
item = self.add_item_fixture(
disctotal=1, disc=1, comments="test comment"
)
item.write()
with self.configure_plugin(
{"omit_single_disc": True, "fields": ["comments"]}
):
item.write()

mf = MediaFile(syspath(item.path))
assert mf.comments is None
assert mf.disc == 0

def test_omit_single_disc_with_tags_multi(self):
item = self.add_item_fixture(
disctotal=4, disc=1, comments="test comment"
)
item.write()
with self.configure_plugin(
{"omit_single_disc": True, "fields": ["comments"]}
):
item.write()

mf = MediaFile(syspath(item.path))
assert mf.comments is None
assert mf.disc == 1

def test_omit_single_disc_only_change_single(self):
item = self.add_item_fixture(disctotal=1, disc=1)
item.write()

with self.configure_plugin({"omit_single_disc": True}):
item.write()

mf = MediaFile(syspath(item.path))
assert mf.disc == 0

def test_omit_single_disc_only_change_multi(self):
item = self.add_item_fixture(disctotal=4, disc=1)
item.write()

with self.configure_plugin({"omit_single_disc": True}):
item.write()

mf = MediaFile(syspath(item.path))
assert mf.disc == 1

def test_empty_query_n_response_no_changes(self):
item = self.add_item_fixture(
year=2016, day=13, month=3, comments="test comment"
Expand Down