diff --git a/beets/autotag/__init__.py b/beets/autotag/__init__.py index 90d294c61..a71b9b0a6 100644 --- a/beets/autotag/__init__.py +++ b/beets/autotag/__init__.py @@ -142,34 +142,46 @@ def apply_metadata(album_info, mapping): # Compilation flag. item.comp = album_info.va - # Miscellaneous metadata. - for field in ('albumtype', - 'label', - 'asin', - 'catalognum', - 'script', - 'language', - 'country', - 'albumstatus', - 'albumdisambig', - 'releasegroupdisambig', - 'data_source',): - value = getattr(album_info, field) - if value is not None: - item[field] = value - if track_info.disctitle is not None: - item.disctitle = track_info.disctitle - - if track_info.media is not None: - item.media = track_info.media - - if track_info.lyricist is not None: - item.lyricist = track_info.lyricist - if track_info.composer is not None: - item.composer = track_info.composer - if track_info.composer_sort is not None: - item.composer_sort = track_info.composer_sort - if track_info.arranger is not None: - item.arranger = track_info.arranger - + # Track alt. item.track_alt = track_info.track_alt + + # Miscellaneous/nullable metadata. + misc_fields = { + 'album': ( + 'albumtype', + 'label', + 'asin', + 'catalognum', + 'script', + 'language', + 'country', + 'albumstatus', + 'albumdisambig', + 'releasegroupdisambig', + 'data_source', + ), + 'track': ( + 'disctitle', + 'lyricist', + 'media', + 'composer', + 'composer_sort', + 'arranger', + ) + } + + # Don't overwrite fields with empty values unless the + # field is explicitly allowed to be overwritten + for field in misc_fields['album']: + clobber = field in config['overwrite_null']['album'].as_str_seq() + value = getattr(album_info, field) + if value is None and not clobber: + continue + item[field] = value + + for field in misc_fields['track']: + clobber = field in config['overwrite_null']['track'].as_str_seq() + value = getattr(track_info, field) + if value is None and not clobber: + continue + item[field] = value diff --git a/beets/config_default.yaml b/beets/config_default.yaml index 26babde55..cf9ae6bf9 100644 --- a/beets/config_default.yaml +++ b/beets/config_default.yaml @@ -53,6 +53,9 @@ aunique: disambiguators: albumtype year label catalognum albumdisambig releasegroupdisambig bracket: '[]' +overwrite_null: + album: [] + track: [] plugins: [] pluginpath: [] diff --git a/docs/reference/config.rst b/docs/reference/config.rst index 57cb6c295..684dea20c 100644 --- a/docs/reference/config.rst +++ b/docs/reference/config.rst @@ -303,6 +303,7 @@ The defaults look like this:: See :ref:`aunique` for more details. + .. _terminal_encoding: terminal_encoding