Ejemplo n.º 1
0
 def test_discard(self):
     preserved = PreservedTags()
     self.assertIn("tag1", preserved)
     preserved.discard("tag1")
     self.assertNotIn("tag1", preserved)
     # Discard must persists the change
     self.assertNotIn("tag1", PreservedTags())
Ejemplo n.º 2
0
 def test_add(self):
     preserved = PreservedTags()
     self.assertNotIn("tag3", preserved)
     preserved.add("tag3")
     self.assertIn("tag3", preserved)
     # Add must persists the change
     self.assertIn("tag3", PreservedTags())
Ejemplo n.º 3
0
 def test_order(self):
     preserved = PreservedTags()
     preserved.add('tag3')
     preserved.add('tag2')
     preserved.add('tag1')
     preserved.discard('tag2')
     self.assertEqual(config.setting[PreservedTags.opt_name], 'tag1, tag3')
Ejemplo n.º 4
0
 def __init__(self, parent):
     super().__init__(parent)
     config = get_config()
     self.parent = parent
     self.setAccessibleName(_("metadata view"))
     self.setAccessibleDescription(
         _("Displays original and new tags for the selected files"))
     self.setColumnCount(3)
     self.setHorizontalHeaderLabels(
         (_("Tag"), _("Original Value"), _("New Value")))
     self.horizontalHeader().setStretchLastSection(True)
     self.horizontalHeader().setSectionResizeMode(
         QtWidgets.QHeaderView.ResizeMode.Stretch)
     self.horizontalHeader().setSectionsClickable(False)
     self.verticalHeader().setDefaultSectionSize(21)
     self.verticalHeader().setVisible(False)
     self.setHorizontalScrollMode(
         QtWidgets.QAbstractItemView.ScrollMode.ScrollPerPixel)
     self.setSelectionMode(
         QtWidgets.QAbstractItemView.SelectionMode.ExtendedSelection)
     self.setTabKeyNavigation(False)
     self.setStyleSheet("QTableWidget {border: none;}")
     self.setAttribute(QtCore.Qt.WidgetAttribute.WA_MacShowFocusRect, 1)
     self.setItemDelegate(TableTagEditorDelegate(self))
     self.setWordWrap(False)
     self.files = set()
     self.tracks = set()
     self.objects = set()
     self.selection_mutex = QtCore.QMutex()
     self.selection_dirty = False
     self.editing = None  # the QTableWidgetItem being edited
     self.clipboard = [""]
     self.add_tag_action = QtWidgets.QAction(_("Add New Tag..."), parent)
     self.add_tag_action.triggered.connect(partial(self.edit_tag, ""))
     self.changes_first_action = QtWidgets.QAction(_("Show Changes First"),
                                                   parent)
     self.changes_first_action.setCheckable(True)
     self.changes_first_action.setChecked(
         config.persist["show_changes_first"])
     self.changes_first_action.toggled.connect(self.toggle_changes_first)
     # TR: Keyboard shortcut for "Add New Tag..."
     self.add_tag_shortcut = QtWidgets.QShortcut(
         QtGui.QKeySequence(_("Alt+Shift+A")), self,
         partial(self.edit_tag, ""))
     self.add_tag_action.setShortcut(self.add_tag_shortcut.key())
     # TR: Keyboard shortcut for "Edit..." (tag)
     self.edit_tag_shortcut = QtWidgets.QShortcut(
         QtGui.QKeySequence(_("Alt+Shift+E")), self,
         partial(self.edit_selected_tag))
     # TR: Keyboard shortcut for "Remove" (tag)
     self.remove_tag_shortcut = QtWidgets.QShortcut(
         QtGui.QKeySequence(_("Alt+Shift+R")), self,
         self.remove_selected_tags)
     self.preserved_tags = PreservedTags()
     self._single_file_album = False
     self._single_track_album = False
     self.tagger.clipboard().dataChanged.connect(self.update_clipboard)
Ejemplo n.º 5
0
    def copy_metadata(self, metadata, preserve_deleted=True):
        acoustid = self.metadata["acoustid_id"]
        saved_metadata = {}

        preserved_tags = PreservedTags()
        for tag, values in self.orig_metadata.rawitems():
            if tag in preserved_tags or tag in PRESERVED_TAGS:
                saved_metadata[tag] = values
        deleted_tags = self.metadata.deleted_tags
        self.metadata.copy(metadata)
        if preserve_deleted:
            for tag in deleted_tags:
                del self.metadata[tag]
        for tag, values in saved_metadata.items():
            self.metadata[tag] = values

        if acoustid and "acoustid_id" not in metadata.deleted_tags:
            self.metadata["acoustid_id"] = acoustid
        self.metadata_images_changed.emit()
Ejemplo n.º 6
0
    def copy_metadata(self, metadata, preserve_deleted=True):
        acoustid = self.metadata["acoustid_id"]
        saved_metadata = {}

        preserved_tags = PreservedTags()
        for tag, values in self.orig_metadata.rawitems():
            if tag in preserved_tags or tag in PRESERVED_TAGS:
                saved_metadata[tag] = values
        deleted_tags = self.metadata.deleted_tags
        images_changed = self.metadata.images != metadata.images
        self.metadata.copy(metadata)
        for info in FILE_INFO_TAGS:
            metadata[info] = self.orig_metadata[info]
        if preserve_deleted:
            for tag in deleted_tags:
                del self.metadata[tag]
        self.metadata.update(saved_metadata)

        if acoustid and "acoustid_id" not in metadata.deleted_tags:
            self.metadata["acoustid_id"] = acoustid
        if images_changed:
            self.metadata_images_changed.emit()
Ejemplo n.º 7
0
 def test_discard_case_insensitive(self):
     preserved = PreservedTags()
     self.assertIn("tag1", preserved)
     preserved.discard("TAG1")
     self.assertNotIn("tag1", preserved)
Ejemplo n.º 8
0
 def test_add_case_insensitive(self):
     preserved = PreservedTags()
     self.assertNotIn("tag3", preserved)
     preserved.add("TAG3")
     self.assertIn("tag3", preserved)
Ejemplo n.º 9
0
 def test_load_and_contains(self):
     preserved = PreservedTags()
     self.assertIn("tag1", preserved)
     self.assertIn("tag2", preserved)
     self.assertIn("TAG1", preserved)
     self.assertIn(" tag1", preserved)