From a43789d9e984f22488203b4035b0206a73c270dc Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 29 Dec 2016 02:24:37 +0530 Subject: [PATCH 1/9] Add supports_tag method to apev --- picard/formats/apev2.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/picard/formats/apev2.py b/picard/formats/apev2.py index efa951c5a..0bcac79bd 100644 --- a/picard/formats/apev2.py +++ b/picard/formats/apev2.py @@ -204,6 +204,12 @@ class APEv2File(File): else: return name.title() + def supports_tag(self, name): + if self._get_tag_name(name): + return True + else: + return False + class MusepackFile(APEv2File): From 43e5e5fa827889df570510c608900899b882d801 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 29 Dec 2016 02:25:13 +0530 Subject: [PATCH 2/9] Add supports_tag method to vorbis --- picard/formats/vorbis.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/picard/formats/vorbis.py b/picard/formats/vorbis.py index 40c1ec11c..3e5559795 100644 --- a/picard/formats/vorbis.py +++ b/picard/formats/vorbis.py @@ -260,6 +260,12 @@ class VCommentFile(File): else: return name + def supports_tag(self, name): + if self._get_tag_name(name): + return True + else: + return False + class FLACFile(VCommentFile): From 4ec78b4c2513640a5db2215ec249a9e4e2a33f61 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 29 Dec 2016 02:25:26 +0530 Subject: [PATCH 3/9] Add supports_tag method to wav --- picard/formats/wav.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/picard/formats/wav.py b/picard/formats/wav.py index 8e2e50566..a0abf11b3 100644 --- a/picard/formats/wav.py +++ b/picard/formats/wav.py @@ -43,3 +43,7 @@ class WAVFile(File): def _save(self, filename, metadata): log.debug("Saving file %r", filename) pass + + def supports_tag(self, name): + # WAVFile does not support any tag + return False From 9921b6c0ad36793b09d6ad570c506f13691a4739 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 29 Dec 2016 02:25:55 +0530 Subject: [PATCH 4/9] Display only supported tags in metadata box --- picard/ui/metadatabox.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/picard/ui/metadatabox.py b/picard/ui/metadatabox.py index b0cd01c96..66b62e034 100644 --- a/picard/ui/metadatabox.py +++ b/picard/ui/metadatabox.py @@ -462,12 +462,17 @@ class MetadataBox(QtGui.QTableWidget): self.setRowCount(0) return - self.setRowCount(len(result.tag_names)) - orig_flags = QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled new_flags = orig_flags | QtCore.Qt.ItemIsEditable + if len(self.files) == 1: + current_file = list(self.files)[0] + display_tags = filter(lambda x: current_file.supports_tag(x), + result.tag_names) + else: + display_tags = result.tag_names + self.setRowCount(len(display_tags)) - for i, name in enumerate(result.tag_names): + for i, name in enumerate(display_tags): length = name == "~length" tag_item = self.item(i, 0) orig_item = self.item(i, 1) From 951165b984a1ccf0f9cdb54cbd80238f99e5c7ab Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 29 Dec 2016 02:26:27 +0530 Subject: [PATCH 5/9] Show only supported tags in edit tag dialog --- picard/ui/edittagdialog.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/picard/ui/edittagdialog.py b/picard/ui/edittagdialog.py index e7fcea140..b8e1fceb1 100644 --- a/picard/ui/edittagdialog.py +++ b/picard/ui/edittagdialog.py @@ -37,6 +37,10 @@ class EditTagDialog(PicardDialog): self.different = False self.default_tags = sorted( set(TAG_NAMES.keys() + self.metadata_box.tag_diff.tag_names)) + if len(self.metadata_box.files) == 1: + current_file = list(self.metadata_box.files)[0] + self.default_tags = filter(lambda x: current_file.supports_tag(x), + self.default_tags) tag_names = self.ui.tag_names tag_names.editTextChanged.connect(self.tag_changed) tag_names.addItem("") From 8cd2eb02ec30a1e640de3de0816b577612b1555b Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 29 Dec 2016 17:29:25 +0530 Subject: [PATCH 6/9] Refactor supports_tag method --- picard/formats/apev2.py | 5 +---- picard/formats/vorbis.py | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/picard/formats/apev2.py b/picard/formats/apev2.py index 0bcac79bd..94fe98da6 100644 --- a/picard/formats/apev2.py +++ b/picard/formats/apev2.py @@ -205,10 +205,7 @@ class APEv2File(File): return name.title() def supports_tag(self, name): - if self._get_tag_name(name): - return True - else: - return False + return bool(self._get_tag_name(name)) class MusepackFile(APEv2File): diff --git a/picard/formats/vorbis.py b/picard/formats/vorbis.py index 3e5559795..bb58042eb 100644 --- a/picard/formats/vorbis.py +++ b/picard/formats/vorbis.py @@ -261,10 +261,7 @@ class VCommentFile(File): return name def supports_tag(self, name): - if self._get_tag_name(name): - return True - else: - return False + return bool(self._get_tag_name(name)) class FLACFile(VCommentFile): From 1bfbc683d5d580ebdfbf127bc97ab221b0ce6050 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 29 Dec 2016 17:29:45 +0530 Subject: [PATCH 7/9] Remove wav specific supports_tag --- picard/formats/wav.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/picard/formats/wav.py b/picard/formats/wav.py index a0abf11b3..8e2e50566 100644 --- a/picard/formats/wav.py +++ b/picard/formats/wav.py @@ -43,7 +43,3 @@ class WAVFile(File): def _save(self, filename, metadata): log.debug("Saving file %r", filename) pass - - def supports_tag(self, name): - # WAVFile does not support any tag - return False From 3ef6eb889af84c2133a9b6514b35ade84f1d64c6 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sat, 31 Dec 2016 16:41:25 +0530 Subject: [PATCH 8/9] Change check for supports_tag in apev/vorbis They support free-form tags so no need to call _get_tag_name --- picard/formats/apev2.py | 2 +- picard/formats/vorbis.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/picard/formats/apev2.py b/picard/formats/apev2.py index 94fe98da6..ff3e8198d 100644 --- a/picard/formats/apev2.py +++ b/picard/formats/apev2.py @@ -205,7 +205,7 @@ class APEv2File(File): return name.title() def supports_tag(self, name): - return bool(self._get_tag_name(name)) + return bool(name) class MusepackFile(APEv2File): diff --git a/picard/formats/vorbis.py b/picard/formats/vorbis.py index bb58042eb..120c38b2d 100644 --- a/picard/formats/vorbis.py +++ b/picard/formats/vorbis.py @@ -261,7 +261,7 @@ class VCommentFile(File): return name def supports_tag(self, name): - return bool(self._get_tag_name(name)) + return bool(name) class FLACFile(VCommentFile): From 07d246380e1f1c234d8d2d94314aa0eb4fa6f8ff Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sat, 31 Dec 2016 16:45:18 +0530 Subject: [PATCH 9/9] Change supports_tag in id3 to add user text tags id3 support free form tags in form of TXXX frame. Earlier supports tag only returned true to pre defined tags --- picard/formats/id3.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/picard/formats/id3.py b/picard/formats/id3.py index fbb8fec4e..1601f33e2 100644 --- a/picard/formats/id3.py +++ b/picard/formats/id3.py @@ -419,11 +419,7 @@ class ID3File(File): del tags[real_name] def supports_tag(self, name): - return (name in self.__rtranslate - or name in self.__rtranslate_freetext - or name.startswith('performer:') - or name.startswith('lyrics:') or name == 'lyrics' - or name in self.__other_supported_tags) + return ((name and not name.startswith("~")) or name == "~rating") def _get_tag_name(self, name): if name in self.__rtranslate: