+class UI_TweakFilenameFilter(object):
+ def setupUi(self, TweakFilenameOptionsPage):
+ top = QtWidgets.QVBoxLayout(TweakFilenameOptionsPage)
+
+ group = QtWidgets.QGroupBox(TweakFilenameOptionsPage)
+ group.setTitle("Filename Sanitizer")
+ top.addWidget(group)
+
+ box = QtWidgets.QVBoxLayout(group)
+
+ msg = QtWidgets.QLabel(group)
+ msg.setText('''<em>Picard normally replaces slashes and backslashes
+ with underscores in all metadata tags prior to running the file-naming
+ script. This substitution may be customized here. Replacement text
+ may use <a href='https://docs.python.org/3/library/re.html#re.sub'
+ >backslash sequences supported by <code>re.sub</code></a>.</em>''')
+ msg.setOpenExternalLinks(True)
+ box.addWidget(msg)
+
+ self.replace_slashes = QtWidgets.QCheckBox(group)
+ self.replace_slashes.setText("Replace slashes in metadata")
+ self.replace_slashes.setChecked(True)
+ self.replace_slashes.setEnabled(False)
+ box.addWidget(self.replace_slashes)
+
+ self.replace_backslashes = QtWidgets.QCheckBox(group)
+ self.replace_backslashes.setText("Replace backslashes in metadata")
+ box.addWidget(self.replace_backslashes)
+
+ label = QtWidgets.QLabel()
+ label.setText("Replacement text:")
+ box.addWidget(label)
+
+ self.sanitize_replacement = QtWidgets.QLineEdit(group)
+ box.addWidget(self.sanitize_replacement)
+ label.setBuddy(self.sanitize_replacement)
+
+ top.addStretch()
+
+class TweakFilenameOptionsPage(OptionsPage):
+ NAME = PLUGIN_NAME
+ TITLE = PLUGIN_NAME
+ PARENT = None
+ SORT_ORDER = 99
+ ACTIVE = True
+
+ options = [
+ config.TextOption("setting", "tweak_file_replacement_char", "_"),
+ config.BoolOption("setting", "tweak_file_replace_backslash", True)
+ ]
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.ui = UI_TweakFilenameFilter()
+ self.ui.setupUi(self)
+
+ def load(self):
+ self.ui.replace_backslashes.setChecked(
+ config.setting["tweak_file_replace_backslash"]
+ )
+ self.ui.sanitize_replacement.setText(
+ config.setting["tweak_file_replacement_char"]
+ )
+
+ def check(self):
+ test = SanitizeHook(self.ui.replace_backslashes.isChecked())
+ test.replacement = self.ui.sanitize_replacement.text()
+ try:
+ test.sub("xyzzy", "a/b/c")
+ except sre_constants.error as err:
+ raise OptionsCheckError(_("Error"),
+ "Error in substitution: %s" % err);
+
+ def save(self):
+ config.setting["tweak_file_replace_backslash"] = \
+ self.ui.replace_backslashes.isChecked()
+ config.setting["tweak_file_replacement_char"] = \
+ self.ui.sanitize_replacement.text()
+ picard.util._re_slashes.__init__()
+