diff --git a/picard/file.py b/picard/file.py
index d4494ad1c..d90efb0cd 100644
--- a/picard/file.py
+++ b/picard/file.py
@@ -129,11 +129,14 @@ class File(LockableObject, Item):
self.orig_metadata.copy(self.metadata)
def copy_metadata(self, metadata):
- self.saved_metadata['musicip_puid'] = self.metadata['musicip_puid']
- self.saved_metadata['acoustid_id'] = self.metadata['acoustid_id']
+ exceptions = ['musicip_puid', 'acoustid_id']
+ if self.config.setting['preserved_tags']:
+ exceptions.extend(re.split(r'\s+', self.config.setting['preserved_tags']))
+ for tag in exceptions:
+ self.saved_metadata[tag] = self.metadata[tag]
self.metadata.copy(metadata)
- self.metadata['musicip_puid'] = self.saved_metadata.pop('musicip_puid')
- self.metadata['acoustid_id'] = self.saved_metadata.pop('acoustid_id')
+ for tag in exceptions:
+ self.metadata[tag] = self.saved_metadata.pop(tag)
def has_error(self):
return self.state == File.ERROR
diff --git a/picard/ui/options/tags.py b/picard/ui/options/tags.py
index 0d538342a..05b5fb0f8 100644
--- a/picard/ui/options/tags.py
+++ b/picard/ui/options/tags.py
@@ -33,6 +33,7 @@ class TagsOptionsPage(OptionsPage):
options = [
BoolOption("setting", "clear_existing_tags", False),
+ TextOption("setting", "preserved_tags", ""),
BoolOption("setting", "write_id3v1", True),
BoolOption("setting", "write_id3v23", True),
TextOption("setting", "id3v2_encoding", "utf-16"),
@@ -62,6 +63,7 @@ class TagsOptionsPage(OptionsPage):
self.ui.enc_utf8.setChecked(True)
self.ui.remove_ape_from_mp3.setChecked(self.config.setting["remove_ape_from_mp3"])
self.ui.remove_id3_from_flac.setChecked(self.config.setting["remove_id3_from_flac"])
+ self.ui.preserved_tags.setText(self.config.setting["preserved_tags"])
self.update_encodings()
def save(self):
@@ -77,6 +79,7 @@ class TagsOptionsPage(OptionsPage):
self.config.setting["id3v2_encoding"] = "utf-8"
self.config.setting["remove_ape_from_mp3"] = self.ui.remove_ape_from_mp3.isChecked()
self.config.setting["remove_id3_from_flac"] = self.ui.remove_id3_from_flac.isChecked()
+ self.config.setting["preserved_tags"] = unicode(self.ui.preserved_tags.text())
self.tagger.window.enable_tag_saving_action.setChecked(not self.config.setting["dont_write_tags"])
def update_encodings(self):
diff --git a/picard/ui/ui_options_tags.py b/picard/ui/ui_options_tags.py
index e1ac8e95e..b010edd07 100644
--- a/picard/ui/ui_options_tags.py
+++ b/picard/ui/ui_options_tags.py
@@ -2,8 +2,8 @@
# Form implementation generated from reading ui file 'ui/options_tags.ui'
#
-# Created: Thu Sep 15 13:39:09 2011
-# by: PyQt4 UI code generator 4.8.3
+# Created: Tue Mar 20 01:27:07 2012
+# by: PyQt4 UI code generator 4.9.1
#
# WARNING! All changes made in this file will be lost!
@@ -40,6 +40,12 @@ class Ui_TagsOptionsPage(object):
self.remove_ape_from_mp3 = QtGui.QCheckBox(self.rename_files)
self.remove_ape_from_mp3.setObjectName(_fromUtf8("remove_ape_from_mp3"))
self.vboxlayout1.addWidget(self.remove_ape_from_mp3)
+ self.preserved_tags_label = QtGui.QLabel(self.rename_files)
+ self.preserved_tags_label.setObjectName(_fromUtf8("preserved_tags_label"))
+ self.vboxlayout1.addWidget(self.preserved_tags_label)
+ self.preserved_tags = QtGui.QLineEdit(self.rename_files)
+ self.preserved_tags.setObjectName(_fromUtf8("preserved_tags"))
+ self.vboxlayout1.addWidget(self.preserved_tags)
self.vboxlayout.addWidget(self.rename_files)
self.rename_files_2 = QtGui.QGroupBox(TagsOptionsPage)
self.rename_files_2.setObjectName(_fromUtf8("rename_files_2"))
@@ -106,6 +112,7 @@ class Ui_TagsOptionsPage(object):
self.clear_existing_tags.setText(_("Clear existing tags"))
self.remove_id3_from_flac.setText(_("Remove ID3 tags from FLAC files"))
self.remove_ape_from_mp3.setText(_("Remove APEv2 tags from MP3 files"))
+ self.preserved_tags_label.setText(_("Preserve these tags from being cleared or overwritten with MusicBrainz data:"))
self.rename_files_2.setTitle(_("Tag compatibility"))
self.groupBox.setTitle(_("ID3v2 version"))
self.write_id3v24.setText(_("2.4"))
diff --git a/ui/options_tags.ui b/ui/options_tags.ui
index 914764ce7..cbe65f9aa 100644
--- a/ui/options_tags.ui
+++ b/ui/options_tags.ui
@@ -57,6 +57,16 @@
+ -
+
+
+ Preserve these tags from being cleared or overwritten with MusicBrainz data:
+
+
+
+ -
+
+