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())
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())
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')
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)
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()
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()
def test_discard_case_insensitive(self): preserved = PreservedTags() self.assertIn("tag1", preserved) preserved.discard("TAG1") self.assertNotIn("tag1", preserved)
def test_add_case_insensitive(self): preserved = PreservedTags() self.assertNotIn("tag3", preserved) preserved.add("TAG3") self.assertIn("tag3", preserved)
def test_load_and_contains(self): preserved = PreservedTags() self.assertIn("tag1", preserved) self.assertIn("tag2", preserved) self.assertIn("TAG1", preserved) self.assertIn(" tag1", preserved)