From 85570eea1ea8c6a4454ce98b4deb8505b1a2a187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Wei=C3=9Fl?= Date: Mon, 19 Mar 2012 23:15:49 +0100 Subject: [PATCH] Add option to exclude some tags from being cleared or overwritten (PICARD-19) --- picard/file.py | 11 +++++++---- picard/ui/options/tags.py | 3 +++ picard/ui/ui_options_tags.py | 11 +++++++++-- ui/options_tags.ui | 10 ++++++++++ 4 files changed, 29 insertions(+), 6 deletions(-) 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: + + + + + +