diff --git a/picard/formats/apev2.py b/picard/formats/apev2.py index efa951c5a..ff3e8198d 100644 --- a/picard/formats/apev2.py +++ b/picard/formats/apev2.py @@ -204,6 +204,9 @@ class APEv2File(File): else: return name.title() + def supports_tag(self, name): + return bool(name) + class MusepackFile(APEv2File): diff --git a/picard/formats/id3.py b/picard/formats/id3.py index 7004b818d..e93b2f479 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: diff --git a/picard/formats/vorbis.py b/picard/formats/vorbis.py index 9801f81b7..d451f4cfa 100644 --- a/picard/formats/vorbis.py +++ b/picard/formats/vorbis.py @@ -260,6 +260,9 @@ class VCommentFile(File): else: return name + def supports_tag(self, name): + return bool(name) + class FLACFile(VCommentFile): 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("") 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)