Add options for standardized track, release, and artist names. The interface for this in the options page is still a WIP.

Also allow dragging in a recording URL to load as a NAT.
This commit is contained in:
Michael Wiencek
2011-06-04 06:37:13 -05:00
parent 3a52dc341e
commit c020ee2bdf
8 changed files with 628 additions and 113 deletions

View File

@@ -143,7 +143,7 @@ class Cluster(QtCore.QObject, Item):
total += similarity2(a, b) * self.comparison_weights['title']
a = self.metadata['artist']
b = artist_credit_from_node(release.artist_credit[0])[0]
b = artist_credit_from_node(release.artist_credit[0], self.config)[0]
total += similarity2(a, b) * self.comparison_weights['artist']
a = len(self.files)

View File

@@ -454,7 +454,7 @@ class File(LockableObject, Item):
if 'artist' in self.metadata:
a = self.metadata['artist']
b = artist_credit_from_node(track.artist_credit[0])[0]
b = artist_credit_from_node(track.artist_credit[0], self.config)[0]
parts.append((similarity2(a, b), 4))
total += 4

View File

@@ -105,13 +105,14 @@ def _set_artist_item(m, release, albumname, name, value):
m[name] = value
def artist_credit_from_node(node):
def artist_credit_from_node(node, config=None):
artist = ""
artistsort = ""
standardize_name = config and config.setting["standardize_artists"]
for credit in node.name_credit:
a = credit.artist[0]
artistsort += a.sort_name[0].text
if 'name' in credit.children:
if 'name' in credit.children and not standardize_name:
artist += credit.name[0].text
else:
artist += a.name[0].text
@@ -121,10 +122,10 @@ def artist_credit_from_node(node):
return (artist, artistsort)
def artist_credit_to_metadata(node, m=None, release=None):
def artist_credit_to_metadata(node, m=None, release=None, config=None):
ids = [n.artist[0].id for n in node.name_credit]
_set_artist_item(m, release, 'musicbrainz_albumartistid', 'musicbrainz_artistid', ids)
artist, artistsort = artist_credit_from_node(node)
artist, artistsort = artist_credit_from_node(node, config)
_set_artist_item(m, release, 'albumartist', 'artist', artist)
_set_artist_item(m, release, 'albumartistsort', 'artistsort', artistsort)
@@ -133,17 +134,19 @@ def track_to_metadata(node, track, config=None):
m = track.metadata
recording_to_metadata(node.recording[0], track, config)
# overwrite with data we have on the track
standardize_title = config and config.setting["standardize_tracks"]
standardize_artist = config and config.setting["standardize_artists"]
for name, nodes in node.children.iteritems():
if not nodes:
continue
if name == 'title':
if name == 'title' and not standardize_title:
m['title'] = nodes[0].text
if name == 'position':
m['tracknumber'] = nodes[0].text
elif name == 'length' and nodes[0].text:
m.length = int(nodes[0].text)
elif name == 'artist_credit':
artist_credit_to_metadata(nodes[0], m)
elif name == 'artist_credit' and not standardize_artist:
artist_credit_to_metadata(nodes[0], m, config=config)
def recording_to_metadata(node, track, config=None):
@@ -158,7 +161,7 @@ def recording_to_metadata(node, track, config=None):
elif name == 'length' and nodes[0].text:
m.length = int(nodes[0].text)
elif name == 'artist_credit':
artist_credit_to_metadata(nodes[0], m)
artist_credit_to_metadata(nodes[0], m, config=config)
if name == 'relation_list':
_relations_to_metadata(nodes, m, config)
elif name == 'release_list' and nodes[0].count != '0':
@@ -176,6 +179,7 @@ def recording_to_metadata(node, track, config=None):
def release_to_metadata(node, m, config=None, album=None):
"""Make metadata dict from a XML 'release' node."""
m['musicbrainz_albumid'] = node.attribs['id']
standardize_title = config and config.setting["standardize_releases"]
for name, nodes in node.children.iteritems():
if not nodes:
@@ -183,14 +187,16 @@ def release_to_metadata(node, m, config=None, album=None):
if name == 'release_group':
if 'type' in nodes[0].attribs:
m['releasetype'] = nodes[0].type.lower()
if standardize_title:
m['album'] = nodes[0].title[0].text
elif name == 'status':
m['releasestatus'] = nodes[0].text.lower()
elif name == 'title':
elif name == 'title' and not standardize_title:
m['album'] = nodes[0].text
elif name == 'asin':
m['asin'] = nodes[0].text
elif name == 'artist_credit':
artist_credit_to_metadata(nodes[0], m, True)
artist_credit_to_metadata(nodes[0], m, True, config=config)
elif name == 'date':
m['date'] = nodes[0].text
elif name == 'country':

View File

@@ -34,7 +34,7 @@ class CDLookupDialog(QtGui.QDialog):
for release in self.releases:
item = QtGui.QTreeWidgetItem(self.ui.release_list)
item.setText(0, release.title[0].text)
item.setText(1, artist_credit_from_node(release.artist_credit[0])[0])
item.setText(1, artist_credit_from_node(release.artist_credit[0], self.config)[0])
item.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(release.id))
self.ui.release_list.setCurrentItem(self.ui.release_list.topLevelItem(0))
self.ui.ok_button.setEnabled(True)

View File

@@ -497,9 +497,15 @@ class BaseTreeView(QtGui.QTreeWidget):
files.append(filename)
elif url.scheme() == "http":
path = unicode(url.path())
match = re.search(r"release/([0-9a-z\-]{36})", path)
if match:
self.tagger.load_album(match.group(1))
match = re.search(r"/(release|recording)/([0-9a-z\-]{36})", path)
if not match:
continue
entity = match.group(1)
mbid = match.group(2)
if entity == "release":
self.tagger.load_album(mbid)
elif entity == "recording":
self.tagger.load_nat(mbid)
if files:
self.tagger.add_files(files)

View File

@@ -41,6 +41,9 @@ class MetadataOptionsPage(OptionsPage):
BoolOption("setting", "track_ars", False),
BoolOption("setting", "folksonomy_tags", False),
BoolOption("setting", "convert_punctuation", False),
BoolOption("setting", "standardize_tracks", False),
BoolOption("setting", "standardize_releases", False),
BoolOption("setting", "standardize_artists", False),
]
def __init__(self, parent=None):
@@ -58,6 +61,9 @@ class MetadataOptionsPage(OptionsPage):
self.ui.folksonomy_tags.setChecked(self.config.setting["folksonomy_tags"])
self.ui.va_name.setText(self.config.setting["va_name"])
self.ui.nat_name.setText(self.config.setting["nat_name"])
self.ui.standardize_tracks.setChecked(self.config.setting["standardize_tracks"])
self.ui.standardize_releases.setChecked(self.config.setting["standardize_releases"])
self.ui.standardize_artists.setChecked(self.config.setting["standardize_artists"])
def save(self):
self.config.setting["translate_artist_names"] = self.ui.translate_artist_names.isChecked()
@@ -67,6 +73,9 @@ class MetadataOptionsPage(OptionsPage):
self.config.setting["folksonomy_tags"] = self.ui.folksonomy_tags.isChecked()
self.config.setting["va_name"] = self.ui.va_name.text()
self.config.setting["nat_name"] = self.ui.nat_name.text()
self.config.setting["standardize_tracks"] = self.ui.standardize_tracks.isChecked()
self.config.setting["standardize_releases"] = self.ui.standardize_releases.isChecked()
self.config.setting["standardize_artists"] = self.ui.standardize_artists.isChecked()
def set_va_name_default(self):
self.ui.va_name.setText(self.options[0].default)

View File

@@ -2,8 +2,8 @@
# Form implementation generated from reading ui file 'ui/options_metadata.ui'
#
# Created: Sun Apr 10 19:32:51 2011
# by: PyQt4 UI code generator 4.7.4
# Created: Fri Jun 3 19:41:05 2011
# by: PyQt4 UI code generator 4.8.4
#
# WARNING! All changes made in this file will be lost!
@@ -12,59 +12,189 @@ from PyQt4 import QtCore, QtGui
class Ui_MetadataOptionsPage(object):
def setupUi(self, MetadataOptionsPage):
MetadataOptionsPage.setObjectName("MetadataOptionsPage")
MetadataOptionsPage.resize(423, 445)
MetadataOptionsPage.resize(423, 485)
self.verticalLayout = QtGui.QVBoxLayout(MetadataOptionsPage)
self.verticalLayout.setContentsMargins(-1, 0, -1, -1)
self.verticalLayout.setObjectName("verticalLayout")
self.verticalLayout_2 = QtGui.QVBoxLayout()
self.verticalLayout_2.setSpacing(0)
self.verticalLayout_2.setSizeConstraint(QtGui.QLayout.SetDefaultConstraint)
self.verticalLayout_2.setContentsMargins(-1, 0, -1, -1)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.rename_files = QtGui.QGroupBox(MetadataOptionsPage)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.rename_files.sizePolicy().hasHeightForWidth())
self.rename_files.setSizePolicy(sizePolicy)
self.rename_files.setMinimumSize(QtCore.QSize(397, 135))
font = QtGui.QFont()
self.rename_files.setFont(font)
self.rename_files.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.rename_files.setObjectName("rename_files")
self.gridLayout = QtGui.QGridLayout(self.rename_files)
self.gridLayout.setSpacing(2)
self.gridLayout.setObjectName("gridLayout")
self.translate_artist_names = QtGui.QCheckBox(self.rename_files)
self.translate_artist_names.setGeometry(QtCore.QRect(13, 34, 380, 21))
self.translate_artist_names.setObjectName("translate_artist_names")
self.gridLayout.addWidget(self.translate_artist_names, 0, 0, 1, 2)
self.convert_punctuation = QtGui.QCheckBox(self.rename_files)
self.convert_punctuation.setGeometry(QtCore.QRect(13, 51, 332, 21))
self.convert_punctuation.setObjectName("convert_punctuation")
self.gridLayout.addWidget(self.convert_punctuation, 1, 0, 1, 2)
self.release_ars = QtGui.QCheckBox(self.rename_files)
self.release_ars.setGeometry(QtCore.QRect(13, 68, 182, 21))
self.release_ars.setObjectName("release_ars")
self.gridLayout.addWidget(self.release_ars, 2, 0, 1, 2)
self.track_ars = QtGui.QCheckBox(self.rename_files)
self.track_ars.setGeometry(QtCore.QRect(13, 85, 170, 21))
self.track_ars.setObjectName("track_ars")
self.gridLayout.addWidget(self.track_ars, 3, 0, 1, 2)
self.folksonomy_tags = QtGui.QCheckBox(self.rename_files)
self.folksonomy_tags.setGeometry(QtCore.QRect(13, 102, 215, 21))
self.folksonomy_tags.setObjectName("folksonomy_tags")
self.gridLayout.addWidget(self.folksonomy_tags, 4, 0, 1, 2)
self.verticalLayout.addWidget(self.rename_files)
self.verticalLayout_2.addWidget(self.rename_files)
self.rename_files_2 = QtGui.QGroupBox(MetadataOptionsPage)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.rename_files_2.sizePolicy().hasHeightForWidth())
self.rename_files_2.setSizePolicy(sizePolicy)
self.rename_files_2.setMinimumSize(QtCore.QSize(397, 152))
self.rename_files_2.setFlat(False)
self.rename_files_2.setObjectName("rename_files_2")
self.gridlayout = QtGui.QGridLayout(self.rename_files_2)
self.gridlayout.setMargin(9)
self.label_5 = QtGui.QLabel(self.rename_files_2)
self.label_5.setGeometry(QtCore.QRect(13, 115, 80, 17))
self.label_5.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_5.setObjectName("label_5")
self.label_3 = QtGui.QLabel(self.rename_files_2)
self.label_3.setGeometry(QtCore.QRect(13, 65, 71, 17))
self.label_3.setLayoutDirection(QtCore.Qt.LeftToRight)
self.label_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_3.setObjectName("label_3")
self.standardize_releases = QtGui.QRadioButton(self.rename_files_2)
self.standardize_releases.setGeometry(QtCore.QRect(243, 90, 19, 18))
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.standardize_releases.sizePolicy().hasHeightForWidth())
self.standardize_releases.setSizePolicy(sizePolicy)
self.standardize_releases.setText((""))
self.standardize_releases.setObjectName("standardize_releases")
self.buttonGroup_2 = QtGui.QButtonGroup(MetadataOptionsPage)
self.buttonGroup_2.setObjectName("buttonGroup_2")
self.buttonGroup_2.addButton(self.standardize_releases)
self.label_2 = QtGui.QLabel(self.rename_files_2)
self.label_2.setGeometry(QtCore.QRect(212, 34, 88, 17))
font = QtGui.QFont()
font.setWeight(75)
font.setBold(True)
self.label_2.setFont(font)
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.standardize_artists = QtGui.QRadioButton(self.rename_files_2)
self.standardize_artists.setGeometry(QtCore.QRect(243, 115, 19, 18))
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.standardize_artists.sizePolicy().hasHeightForWidth())
self.standardize_artists.setSizePolicy(sizePolicy)
self.standardize_artists.setText((""))
self.standardize_artists.setObjectName("standardize_artists")
self.buttonGroup_3 = QtGui.QButtonGroup(MetadataOptionsPage)
self.buttonGroup_3.setObjectName("buttonGroup_3")
self.buttonGroup_3.addButton(self.standardize_artists)
self.label = QtGui.QLabel(self.rename_files_2)
self.label.setGeometry(QtCore.QRect(103, 34, 79, 17))
font = QtGui.QFont()
font.setWeight(75)
font.setBold(True)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.label_4 = QtGui.QLabel(self.rename_files_2)
self.label_4.setGeometry(QtCore.QRect(13, 90, 83, 17))
self.label_4.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_4.setObjectName("label_4")
self.artists_on_cover = QtGui.QRadioButton(self.rename_files_2)
self.artists_on_cover.setGeometry(QtCore.QRect(129, 115, 19, 18))
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.artists_on_cover.sizePolicy().hasHeightForWidth())
self.artists_on_cover.setSizePolicy(sizePolicy)
self.artists_on_cover.setText((""))
self.artists_on_cover.setChecked(True)
self.artists_on_cover.setObjectName("artists_on_cover")
self.buttonGroup_3.addButton(self.artists_on_cover)
self.releases_on_cover = QtGui.QRadioButton(self.rename_files_2)
self.releases_on_cover.setGeometry(QtCore.QRect(129, 90, 19, 18))
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.releases_on_cover.sizePolicy().hasHeightForWidth())
self.releases_on_cover.setSizePolicy(sizePolicy)
self.releases_on_cover.setText((""))
self.releases_on_cover.setChecked(True)
self.releases_on_cover.setObjectName("releases_on_cover")
self.buttonGroup_2.addButton(self.releases_on_cover)
self.standardize_tracks = QtGui.QRadioButton(self.rename_files_2)
self.standardize_tracks.setEnabled(True)
self.standardize_tracks.setGeometry(QtCore.QRect(243, 65, 19, 18))
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.standardize_tracks.sizePolicy().hasHeightForWidth())
self.standardize_tracks.setSizePolicy(sizePolicy)
self.standardize_tracks.setMinimumSize(QtCore.QSize(0, 0))
self.standardize_tracks.setText((""))
self.standardize_tracks.setObjectName("standardize_tracks")
self.buttonGroup = QtGui.QButtonGroup(MetadataOptionsPage)
self.buttonGroup.setObjectName("buttonGroup")
self.buttonGroup.addButton(self.standardize_tracks)
self.tracks_on_cover = QtGui.QRadioButton(self.rename_files_2)
self.tracks_on_cover.setGeometry(QtCore.QRect(129, 65, 19, 18))
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.tracks_on_cover.sizePolicy().hasHeightForWidth())
self.tracks_on_cover.setSizePolicy(sizePolicy)
self.tracks_on_cover.setLayoutDirection(QtCore.Qt.LeftToRight)
self.tracks_on_cover.setText((""))
self.tracks_on_cover.setIconSize(QtCore.QSize(16, 16))
self.tracks_on_cover.setChecked(True)
self.tracks_on_cover.setObjectName("tracks_on_cover")
self.buttonGroup.addButton(self.tracks_on_cover)
self.verticalLayout_2.addWidget(self.rename_files_2)
self.rename_files_3 = QtGui.QGroupBox(MetadataOptionsPage)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.rename_files_3.sizePolicy().hasHeightForWidth())
self.rename_files_3.setSizePolicy(sizePolicy)
self.rename_files_3.setMinimumSize(QtCore.QSize(397, 0))
self.rename_files_3.setObjectName("rename_files_3")
self.gridlayout = QtGui.QGridLayout(self.rename_files_3)
self.gridlayout.setSpacing(2)
self.gridlayout.setObjectName("gridlayout")
self.label_3 = QtGui.QLabel(self.rename_files_2)
self.label_3.setObjectName("label_3")
self.gridlayout.addWidget(self.label_3, 0, 0, 1, 2)
self.label_4 = QtGui.QLabel(self.rename_files_2)
self.label_4.setObjectName("label_4")
self.gridlayout.addWidget(self.label_4, 2, 0, 1, 2)
self.nat_name = QtGui.QLineEdit(self.rename_files_2)
self.label_6 = QtGui.QLabel(self.rename_files_3)
self.label_6.setObjectName("label_6")
self.gridlayout.addWidget(self.label_6, 0, 0, 1, 2)
self.label_7 = QtGui.QLabel(self.rename_files_3)
self.label_7.setObjectName("label_7")
self.gridlayout.addWidget(self.label_7, 2, 0, 1, 2)
self.nat_name = QtGui.QLineEdit(self.rename_files_3)
self.nat_name.setObjectName("nat_name")
self.gridlayout.addWidget(self.nat_name, 3, 0, 1, 1)
self.nat_name_default = QtGui.QPushButton(self.rename_files_2)
self.nat_name_default = QtGui.QPushButton(self.rename_files_3)
self.nat_name_default.setObjectName("nat_name_default")
self.gridlayout.addWidget(self.nat_name_default, 3, 1, 1, 1)
self.va_name_default = QtGui.QPushButton(self.rename_files_2)
self.va_name_default = QtGui.QPushButton(self.rename_files_3)
self.va_name_default.setObjectName("va_name_default")
self.gridlayout.addWidget(self.va_name_default, 1, 1, 1, 1)
self.va_name = QtGui.QLineEdit(self.rename_files_2)
self.va_name = QtGui.QLineEdit(self.rename_files_3)
self.va_name.setObjectName("va_name")
self.gridlayout.addWidget(self.va_name, 1, 0, 1, 1)
self.verticalLayout.addWidget(self.rename_files_2)
spacerItem1 = QtGui.QSpacerItem(261, 16, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem1)
self.label_3.setBuddy(self.va_name_default)
self.label_4.setBuddy(self.nat_name_default)
self.verticalLayout_2.addWidget(self.rename_files_3)
self.verticalLayout.addLayout(self.verticalLayout_2)
spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.MinimumExpanding)
self.verticalLayout.addItem(spacerItem)
self.label_6.setBuddy(self.va_name_default)
self.label_7.setBuddy(self.nat_name_default)
self.retranslateUi(MetadataOptionsPage)
QtCore.QMetaObject.connectSlotsByName(MetadataOptionsPage)
@@ -74,14 +204,21 @@ class Ui_MetadataOptionsPage(object):
MetadataOptionsPage.setTabOrder(self.nat_name, self.nat_name_default)
def retranslateUi(self, MetadataOptionsPage):
self.rename_files.setTitle(_("Metadata"))
self.rename_files.setTitle(_("MetadataOptionsPage"))
self.translate_artist_names.setText(_("Translate foreign artist names to English where possible"))
self.convert_punctuation.setText(_("Convert Unicode punctuation characters to ASCII"))
self.release_ars.setText(_("Use release relationships"))
self.track_ars.setText(_("Use track relationships"))
self.folksonomy_tags.setText(_("Use folksonomy tags as genre"))
self.rename_files_2.setTitle(_("Custom Fields"))
self.label_3.setText(_("Various artists:"))
self.label_4.setText(_("Non-album tracks:"))
self.rename_files_2.setTitle(_("Standardization"))
self.label_5.setText(_("Artist names"))
self.label_3.setText(_("Track titles"))
self.label_2.setText(_("Standardized"))
self.label.setText(_("As on cover"))
self.label_4.setText(_("Release titles"))
self.rename_files_3.setTitle(_("Custom Fields"))
self.label_6.setText(_("Various artists:"))
self.label_7.setText(_("Non-album tracks:"))
self.nat_name_default.setText(_("Default"))
self.va_name_default.setText(_("Default"))

View File

@@ -7,118 +7,470 @@
<x>0</x>
<y>0</y>
<width>423</width>
<height>445</height>
<height>485</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="rename_files">
<property name="title">
<string>Metadata</string>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="spacing">
<number>2</number>
</property>
<item row="0" column="0" colspan="2">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="rename_files">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>397</width>
<height>135</height>
</size>
</property>
<property name="font">
<font>
<kerning>false</kerning>
</font>
</property>
<property name="title">
<string>Metadata</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<widget class="QCheckBox" name="translate_artist_names">
<property name="geometry">
<rect>
<x>13</x>
<y>34</y>
<width>380</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Translate foreign artist names to English where possible</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QCheckBox" name="convert_punctuation">
<property name="geometry">
<rect>
<x>13</x>
<y>51</y>
<width>332</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Convert Unicode punctuation characters to ASCII</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="release_ars">
<property name="geometry">
<rect>
<x>13</x>
<y>68</y>
<width>182</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Use release relationships</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="track_ars">
<property name="geometry">
<rect>
<x>13</x>
<y>85</y>
<width>170</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Use track relationships</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QCheckBox" name="folksonomy_tags">
<property name="geometry">
<rect>
<x>13</x>
<y>102</y>
<width>215</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Use folksonomy tags as genre</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="rename_files_2">
<property name="title">
<string>Custom Fields</string>
</property>
<layout class="QGridLayout">
<property name="spacing">
<number>2</number>
</property>
<item row="0" column="0" colspan="2">
</widget>
</item>
<item>
<widget class="QGroupBox" name="rename_files_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>397</width>
<height>152</height>
</size>
</property>
<property name="title">
<string>Standardization</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>13</x>
<y>115</y>
<width>80</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Artist names</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Various artists:</string>
<property name="geometry">
<rect>
<x>13</x>
<y>65</y>
<width>71</width>
<height>17</height>
</rect>
</property>
<property name="buddy">
<cstring>va_name_default</cstring>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Track titles</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QRadioButton" name="standardize_releases">
<property name="geometry">
<rect>
<x>243</x>
<y>90</y>
<width>19</width>
<height>18</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<attribute name="buttonGroup">
<string>buttonGroup_2</string>
</attribute>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>212</x>
<y>34</y>
<width>88</width>
<height>17</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Standardized</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QRadioButton" name="standardize_artists">
<property name="geometry">
<rect>
<x>243</x>
<y>115</y>
<width>19</width>
<height>18</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<attribute name="buttonGroup">
<string>buttonGroup_3</string>
</attribute>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>103</x>
<y>34</y>
<width>79</width>
<height>17</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>As on cover</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Non-album tracks:</string>
<property name="geometry">
<rect>
<x>13</x>
<y>90</y>
<width>83</width>
<height>17</height>
</rect>
</property>
<property name="buddy">
<cstring>nat_name_default</cstring>
<property name="text">
<string>Release titles</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLineEdit" name="nat_name"/>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="nat_name_default">
<property name="text">
<string>Default</string>
<widget class="QRadioButton" name="artists_on_cover">
<property name="geometry">
<rect>
<x>129</x>
<y>115</y>
<width>19</width>
<height>18</height>
</rect>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="va_name_default">
<property name="text">
<string>Default</string>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string>buttonGroup_3</string>
</attribute>
</widget>
</item>
<item row="1" column="0">
<widget class="QLineEdit" name="va_name"/>
</item>
</layout>
</widget>
<widget class="QRadioButton" name="releases_on_cover">
<property name="geometry">
<rect>
<x>129</x>
<y>90</y>
<width>19</width>
<height>18</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string>buttonGroup_2</string>
</attribute>
</widget>
<widget class="QRadioButton" name="standardize_tracks">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>243</x>
<y>65</y>
<width>19</width>
<height>18</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
<attribute name="buttonGroup">
<string>buttonGroup</string>
</attribute>
</widget>
<widget class="QRadioButton" name="tracks_on_cover">
<property name="geometry">
<rect>
<x>129</x>
<y>65</y>
<width>19</width>
<height>18</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string>buttonGroup</string>
</attribute>
</widget>
</widget>
</item>
<item>
<widget class="QGroupBox" name="rename_files_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>397</width>
<height>0</height>
</size>
</property>
<property name="title">
<string>Custom Fields</string>
</property>
<layout class="QGridLayout">
<property name="spacing">
<number>2</number>
</property>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Various artists:</string>
</property>
<property name="buddy">
<cstring>va_name_default</cstring>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Non-album tracks:</string>
</property>
<property name="buddy">
<cstring>nat_name_default</cstring>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLineEdit" name="nat_name"/>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="nat_name_default">
<property name="text">
<string>Default</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="va_name_default">
<property name="text">
<string>Default</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLineEdit" name="va_name"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<spacer>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>261</width>
<height>16</height>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
@@ -134,4 +486,9 @@
</tabstops>
<resources/>
<connections/>
<buttongroups>
<buttongroup name="buttonGroup_2"/>
<buttongroup name="buttonGroup_3"/>
<buttongroup name="buttonGroup"/>
</buttongroups>
</ui>