-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
beet write
: false positive for changes in fields with multiple values
#5371
Labels
Comments
And similarly for old_item = lib.get_item(item.id)
if old_item.albumtype in item.albumtypes:
item.albumtype = old_item.albumtype before checking for the changes here: Line 1685 in b88c097
|
Thank you, this is an amazing investigation! Linking this to the issue where this problem has been reported first: #5265 |
snejus
added a commit
that referenced
this issue
Dec 15, 2024
…types` fields (#5540) This PR fixes an issue where the `beet write` command repeatedly shows differences for certain fields (`mb_artistid`, `mb_albumartistid`, `albumtype`) even after writing the tags. This happens because these fields are actually stored as lists in the media files (`mb_artistids`, `mb_albumartistids`, `albumtypes`), but beets maintains both single and list versions in its database. This PR addresses this issue in a non-invasive way: the fix ensures consistency between single fields and their list counterparts by: 1. When setting a single field value, making it the first element of the corresponding list 2. When setting a list, using its first element as the single field value This resolves long-standing issues #5265, #5371, and #4715 where users experienced persistent "differences" in these fields despite writing tags multiple times. Changes: - Added `ensure_consistent_list_fields()` function to synchronize field pairs - Applied this function during metadata application - Added tests for all field combinations Fixes #5265, #5371, #4715 **Note**: your music needs to be reimported with `beet import -LI` or synchronised with `beet mbsync` in order to fix these fields!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Problem
It seems that for fields which allow multiple tags, the write command might incorrectly say there are changes to be made.
Backstory
I am using the albumtypes plugin to set the 'soundtrack' album type.
My relevant config looks like this:
(I opened a related discussion, which was solved.)
Basically, if 'soundtrack' appears at all in MusicBrainz's
albumtypes
list, I'll set the main albumtype to soundtrack. This is because I prefer soundtrack to be the highest priority when something belongs to multiple types.This does work; I checked the database manually, and the types are set correctly:
I also checked the files themselves and found the data to also be correct.
My issue is that when I run
beet write
, it tells me there are many changes to be made like:This never clears; if I run the command again, it tries to do this again.
The issue seems to related to this part in
mediafile
:ListMediaField.single_field
returns the first item inalbumtypes
.This comes up in the
write
command,write_items()
, where a 'clean_item` is created from the file on disk:beets/beets/ui/commands.py
Line 2285 in b88c097
It's a bit tricky, because both the file and the database are already correct, but because the write command thought there is a difference, it will attempt to write the corrections anyway.
albumtypes
) and single fields (albumtype
) for that entry, and the single field can be configured by the user to choose which one from the multiple fieldIf the above is always true, a workaround which works for me is to add
before checking for the changes here:
beets/beets/ui/commands.py
Line 2293 in b88c097
I'm not sure if this is the most robust though.
Also, I guess it could apply to other 'multiple' fields too:
Setup
The text was updated successfully, but these errors were encountered: