Skip to content

Commit

Permalink
PICARD-2729: Allow disabling date sanitazation for APE and Vorbis tags
Browse files Browse the repository at this point in the history
  • Loading branch information
ShubhamBhut committed Apr 17, 2024
1 parent 8e319e0 commit 4e75f53
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 4 deletions.
5 changes: 4 additions & 1 deletion picard/formats/apev2.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,8 @@ def _load(self, filename):
self.__casemap = {}
file = self._File(encode_filename(filename))
metadata = Metadata()
config = get_config()
date_sanitize = not config.setting['disable_date_sanitize']
if file.tags:
for origname, values in file.tags.items():
name_lower = origname.lower()
Expand All @@ -160,7 +162,8 @@ def _load(self, filename):
name = name_lower
if name == 'year':
name = 'date'
value = sanitize_date(value)
if date_sanitize:
value = sanitize_date(value)
elif name == 'track':
name = 'tracknumber'
track = value.split('/')
Expand Down
8 changes: 6 additions & 2 deletions picard/formats/vorbis.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,13 +136,16 @@ def _load(self, filename):
file = self._File(encode_filename(filename))
file.tags = file.tags or {}
metadata = Metadata()
config = get_config()
date_sanitize = not config.setting['disable_date_sanitize']
for origname, values in file.tags.items():
for value in values:
value = value.rstrip('\0')
name = origname
if name in {'date', 'originaldate', 'releasedate'}:
# YYYY-00-00 => YYYY
value = sanitize_date(value)
if date_sanitize:
value = sanitize_date(value)
elif name == 'performer' or name == 'comment':
# transform "performer=Joe Barr (Piano)" to "performer:Piano=Joe Barr"
name += ':'
Expand Down Expand Up @@ -280,7 +283,8 @@ def _save(self, filename, metadata):
name = 'lyrics'
elif name in {'date', 'originaldate', 'releasedate'}:
# YYYY-00-00 => YYYY
value = sanitize_date(value)
if not config.setting['disable_date_sanitize']:
value = sanitize_date(value)
elif name.startswith('performer:') or name.startswith('comment:'):
# transform "performer:Piano=Joe Barr" to "performer=Joe Barr (Piano)"
name, desc = name.split(':', 1)
Expand Down
1 change: 1 addition & 0 deletions picard/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class UserProfileGroups():
SettingDesc('convert_punctuation', ['convert_punctuation']),
SettingDesc('release_ars', ['release_ars']),
SettingDesc('track_ars', ['track_ars']),
SettingDesc('disable_date_sanitize', ['disable_date_sanitize']),
SettingDesc('guess_tracknumber_and_title', ['guess_tracknumber_and_title']),
SettingDesc('va_name', ['va_name']),
SettingDesc('nat_name', ['nat_name']),
Expand Down
3 changes: 3 additions & 0 deletions picard/ui/options/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ class MetadataOptionsPage(OptionsPage):
ListOption('setting', 'script_exceptions', [], title=N_("Translation script exceptions")),
BoolOption('setting', 'release_ars', True, title=N_("Use release relationships")),
BoolOption('setting', 'track_ars', False, title=N_("Use track and release relationships")),
BoolOption('setting', 'disable_date_sanitize', False, title=N_("Disable date sanitization for APE and Vorbis tags")),
BoolOption('setting', 'convert_punctuation', False, title=N_("Convert Unicode punctuation characters to ASCII")),
BoolOption('setting', 'standardize_artists', False, title=N_("Use standardized artist names")),
BoolOption('setting', 'standardize_instruments', True, title=N_("Use standardized instrument and vocal credits")),
Expand Down Expand Up @@ -121,6 +122,7 @@ def load(self):
self.ui.convert_punctuation.setChecked(config.setting['convert_punctuation'])
self.ui.release_ars.setChecked(config.setting['release_ars'])
self.ui.track_ars.setChecked(config.setting['track_ars'])
self.ui.disable_date_sanitize.setChecked(config.setting['disable_date_sanitize'])
self.ui.va_name.setText(config.setting['va_name'])
self.ui.nat_name.setText(config.setting['nat_name'])
self.ui.standardize_artists.setChecked(config.setting['standardize_artists'])
Expand Down Expand Up @@ -152,6 +154,7 @@ def save(self):
config.setting['convert_punctuation'] = self.ui.convert_punctuation.isChecked()
config.setting['release_ars'] = self.ui.release_ars.isChecked()
config.setting['track_ars'] = self.ui.track_ars.isChecked()
config.setting['disable_date_sanitize'] = self.ui.disable_date_sanitize.isChecked()
config.setting['va_name'] = self.ui.va_name.text()
nat_name = self.ui.nat_name.text()
if nat_name != config.setting['nat_name']:
Expand Down
7 changes: 6 additions & 1 deletion picard/ui/ui_options_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ def setupUi(self, MetadataOptionsPage):
self.guess_tracknumber_and_title = QtWidgets.QCheckBox(self.metadata_groupbox)
self.guess_tracknumber_and_title.setObjectName("guess_tracknumber_and_title")
self.verticalLayout_3.addWidget(self.guess_tracknumber_and_title)
self.disable_date_sanitize = QtWidgets.QCheckBox(self.metadata_groupbox)
self.disable_date_sanitize.setObjectName("disable_date_sanitize")
self.verticalLayout_3.addWidget(self.disable_date_sanitize)
self.verticalLayout.addWidget(self.metadata_groupbox)
self.custom_fields_groupbox = QtWidgets.QGroupBox(MetadataOptionsPage)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Maximum)
Expand Down Expand Up @@ -121,7 +124,8 @@ def setupUi(self, MetadataOptionsPage):
MetadataOptionsPage.setTabOrder(self.convert_punctuation, self.release_ars)
MetadataOptionsPage.setTabOrder(self.release_ars, self.track_ars)
MetadataOptionsPage.setTabOrder(self.track_ars, self.guess_tracknumber_and_title)
MetadataOptionsPage.setTabOrder(self.guess_tracknumber_and_title, self.va_name)
MetadataOptionsPage.setTabOrder(self.guess_tracknumber_and_title, self.disable_date_sanitize)
MetadataOptionsPage.setTabOrder(self.disable_date_sanitize, self.va_name)
MetadataOptionsPage.setTabOrder(self.va_name, self.va_name_default)
MetadataOptionsPage.setTabOrder(self.va_name_default, self.nat_name)
MetadataOptionsPage.setTabOrder(self.nat_name, self.nat_name_default)
Expand All @@ -139,6 +143,7 @@ def retranslateUi(self, MetadataOptionsPage):
self.release_ars.setText(_("Use release relationships"))
self.track_ars.setText(_("Use track relationships"))
self.guess_tracknumber_and_title.setText(_("Guess track number and title from filename if empty"))
self.disable_date_sanitize.setText(_("Disable sanitizing date for APE and Vorbis tags"))
self.custom_fields_groupbox.setTitle(_("Custom Fields"))
self.label_6.setText(_("Various artists:"))
self.label_7.setText(_("Standalone recordings:"))
Expand Down
1 change: 1 addition & 0 deletions test/formats/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
'replace_spaces_with_underscores': False,
'replace_dir_separator': '_',
'win_compat_replacements': {},
'disable_date_sanitize': False,
}


Expand Down

0 comments on commit 4e75f53

Please sign in to comment.