diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py
index 9b352a539..6911324cd 100644
--- a/picard/ui/mainwindow.py
+++ b/picard/ui/mainwindow.py
@@ -591,7 +591,20 @@ class MainWindow(QtGui.QMainWindow):
self.tagger.remove(self.panel.selected_objects())
def analyze(self):
- self.tagger.analyze(self.panel.selected_objects())
+ if not self.config.setting['enable_fingerprinting']:
+ if self.show_analyze_settings_info():
+ self.show_options("fingerprinting")
+ if not self.config.setting['enable_fingerprinting']:
+ return
+ return self.tagger.analyze(self.panel.selected_objects())
+
+ def show_analyze_settings_info(self):
+ ret = QtGui.QMessageBox.question(self,
+ _(u"Configuration Required"),
+ _(u"Audio fingerprinting is not yet configured. Would you like to configure it now?"),
+ QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
+ QtGui.QMessageBox.Yes)
+ return ret == QtGui.QMessageBox.Yes
def edit_tags(self, objs=None):
if not objs:
@@ -617,10 +630,7 @@ class MainWindow(QtGui.QMainWindow):
if obj is None:
continue
if obj.can_analyze():
- if self.tagger.use_acoustid:
- can_analyze = True
- elif picard.musicdns.ofa:
- can_analyze = True
+ can_analyze = True
if obj.can_save():
can_save = True
if obj.can_remove():
diff --git a/picard/ui/options/fingerprinting.py b/picard/ui/options/fingerprinting.py
index d02a83bbd..9b8ad3ce8 100644
--- a/picard/ui/options/fingerprinting.py
+++ b/picard/ui/options/fingerprinting.py
@@ -17,7 +17,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-import os
+import os, sys
+import picard.musicdns
from PyQt4 import QtCore, QtGui
from picard.util import webbrowser2
from picard.config import BoolOption, TextOption
@@ -29,12 +30,13 @@ class FingerprintingOptionsPage(OptionsPage):
NAME = "fingerprinting"
TITLE = N_("Fingerprinting")
- PARENT = "advanced"
- SORT_ORDER = 35
+ PARENT = None
+ SORT_ORDER = 45
ACTIVE = True
options = [
- TextOption("setting", "fingerprinting_system", "musicdns"),
+ BoolOption("setting", "enable_fingerprinting", False),
+ TextOption("setting", "fingerprinting_system", "acoustid"),
TextOption("setting", "acoustid_fpcalc", ""),
TextOption("setting", "acoustid_apikey", ""),
]
@@ -43,6 +45,7 @@ class FingerprintingOptionsPage(OptionsPage):
super(FingerprintingOptionsPage, self).__init__(parent)
self.ui = Ui_FingerprintingOptionsPage()
self.ui.setupUi(self)
+ self.connect(self.ui.enable_fingerprinting, QtCore.SIGNAL("clicked()"), self.update_groupboxes)
self.connect(self.ui.use_musicdns, QtCore.SIGNAL("clicked()"), self.update_groupboxes)
self.connect(self.ui.use_acoustid, QtCore.SIGNAL("clicked()"), self.update_groupboxes)
self.ui.acoustid_fpcalc_browse.clicked.connect(self.acoustid_fpcalc_browse)
@@ -50,6 +53,9 @@ class FingerprintingOptionsPage(OptionsPage):
self.ui.acoustid_apikey_get.clicked.connect(self.acoustid_apikey_get)
def load(self):
+ self.ui.enable_fingerprinting.setChecked(self.config.setting["enable_fingerprinting"])
+ if picard.musicdns.ofa is None:
+ self.ui.use_musicdns.setEnabled(False)
if self.config.setting["fingerprinting_system"] == "acoustid":
self.ui.use_acoustid.setChecked(True)
else:
@@ -59,6 +65,7 @@ class FingerprintingOptionsPage(OptionsPage):
self.update_groupboxes()
def save(self):
+ self.config.setting["enable_fingerprinting"] = self.ui.enable_fingerprinting.isChecked()
if self.ui.use_acoustid.isChecked():
self.config.setting["fingerprinting_system"] = "acoustid"
else:
@@ -67,8 +74,12 @@ class FingerprintingOptionsPage(OptionsPage):
self.config.setting["acoustid_apikey"] = unicode(self.ui.acoustid_apikey.text())
def update_groupboxes(self):
- if self.ui.use_acoustid.isChecked():
+ if self.ui.enable_fingerprinting.isChecked() and self.ui.use_acoustid.isChecked():
self.ui.acoustid_settings.setEnabled(True)
+ if self.ui.acoustid_fpcalc.text().isEmpty():
+ fpcalc_path = self.find_executable("fpcalc")
+ if fpcalc_path:
+ self.ui.acoustid_fpcalc.setText(fpcalc_path)
else:
self.ui.acoustid_settings.setEnabled(False)
@@ -84,5 +95,16 @@ class FingerprintingOptionsPage(OptionsPage):
def acoustid_apikey_get(self):
webbrowser2.open("http://acoustid.org/api-key")
+ def find_executable(self, name):
+ if sys.platform == 'win32':
+ executables = [name + '.exe']
+ else:
+ executables = [name]
+ for path in os.environ.get('PATH', '').split(os.pathsep):
+ for executable in executables:
+ f = os.path.join(path, executable)
+ if os.path.isfile(f):
+ return f
+
register_options_page(FingerprintingOptionsPage)
diff --git a/picard/ui/ui_options_fingerprinting.py b/picard/ui/ui_options_fingerprinting.py
index e538b53e8..53549be8d 100644
--- a/picard/ui/ui_options_fingerprinting.py
+++ b/picard/ui/ui_options_fingerprinting.py
@@ -2,59 +2,65 @@
# Form implementation generated from reading ui file 'ui/options_fingerprinting.ui'
#
-# Created: Fri Oct 21 20:12:56 2011
-# by: PyQt4 UI code generator 4.7.4
+# Created: Sun Dec 4 00:12:39 2011
+# by: PyQt4 UI code generator 4.8.3
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
+try:
+ _fromUtf8 = QtCore.QString.fromUtf8
+except AttributeError:
+ _fromUtf8 = lambda s: s
+
class Ui_FingerprintingOptionsPage(object):
def setupUi(self, FingerprintingOptionsPage):
- FingerprintingOptionsPage.setObjectName("FingerprintingOptionsPage")
- FingerprintingOptionsPage.resize(371, 305)
+ FingerprintingOptionsPage.setObjectName(_fromUtf8("FingerprintingOptionsPage"))
+ FingerprintingOptionsPage.resize(371, 408)
self.verticalLayout = QtGui.QVBoxLayout(FingerprintingOptionsPage)
- self.verticalLayout.setObjectName("verticalLayout")
- self.groupBox = QtGui.QGroupBox(FingerprintingOptionsPage)
- self.groupBox.setObjectName("groupBox")
- self.gridLayout = QtGui.QGridLayout(self.groupBox)
- self.gridLayout.setObjectName("gridLayout")
- self.use_musicdns = QtGui.QRadioButton(self.groupBox)
- self.use_musicdns.setObjectName("use_musicdns")
- self.gridLayout.addWidget(self.use_musicdns, 0, 0, 1, 1)
- self.use_acoustid = QtGui.QRadioButton(self.groupBox)
- self.use_acoustid.setObjectName("use_acoustid")
- self.gridLayout.addWidget(self.use_acoustid, 1, 0, 1, 1)
- self.verticalLayout.addWidget(self.groupBox)
+ self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
+ self.enable_fingerprinting = QtGui.QGroupBox(FingerprintingOptionsPage)
+ self.enable_fingerprinting.setCheckable(True)
+ self.enable_fingerprinting.setObjectName(_fromUtf8("enable_fingerprinting"))
+ self.verticalLayout_3 = QtGui.QVBoxLayout(self.enable_fingerprinting)
+ self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3"))
+ self.use_acoustid = QtGui.QRadioButton(self.enable_fingerprinting)
+ self.use_acoustid.setObjectName(_fromUtf8("use_acoustid"))
+ self.verticalLayout_3.addWidget(self.use_acoustid)
+ self.use_musicdns = QtGui.QRadioButton(self.enable_fingerprinting)
+ self.use_musicdns.setObjectName(_fromUtf8("use_musicdns"))
+ self.verticalLayout_3.addWidget(self.use_musicdns)
+ self.verticalLayout.addWidget(self.enable_fingerprinting)
self.acoustid_settings = QtGui.QGroupBox(FingerprintingOptionsPage)
- self.acoustid_settings.setObjectName("acoustid_settings")
+ self.acoustid_settings.setObjectName(_fromUtf8("acoustid_settings"))
self.verticalLayout_2 = QtGui.QVBoxLayout(self.acoustid_settings)
- self.verticalLayout_2.setObjectName("verticalLayout_2")
+ self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
self.label = QtGui.QLabel(self.acoustid_settings)
- self.label.setObjectName("label")
+ self.label.setObjectName(_fromUtf8("label"))
self.verticalLayout_2.addWidget(self.label)
self.horizontalLayout_2 = QtGui.QHBoxLayout()
- self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+ self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
self.acoustid_fpcalc = QtGui.QLineEdit(self.acoustid_settings)
- self.acoustid_fpcalc.setObjectName("acoustid_fpcalc")
+ self.acoustid_fpcalc.setObjectName(_fromUtf8("acoustid_fpcalc"))
self.horizontalLayout_2.addWidget(self.acoustid_fpcalc)
self.acoustid_fpcalc_browse = QtGui.QPushButton(self.acoustid_settings)
- self.acoustid_fpcalc_browse.setObjectName("acoustid_fpcalc_browse")
+ self.acoustid_fpcalc_browse.setObjectName(_fromUtf8("acoustid_fpcalc_browse"))
self.horizontalLayout_2.addWidget(self.acoustid_fpcalc_browse)
self.acoustid_fpcalc_download = QtGui.QPushButton(self.acoustid_settings)
- self.acoustid_fpcalc_download.setObjectName("acoustid_fpcalc_download")
+ self.acoustid_fpcalc_download.setObjectName(_fromUtf8("acoustid_fpcalc_download"))
self.horizontalLayout_2.addWidget(self.acoustid_fpcalc_download)
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
self.label_2 = QtGui.QLabel(self.acoustid_settings)
- self.label_2.setObjectName("label_2")
+ self.label_2.setObjectName(_fromUtf8("label_2"))
self.verticalLayout_2.addWidget(self.label_2)
self.horizontalLayout = QtGui.QHBoxLayout()
- self.horizontalLayout.setObjectName("horizontalLayout")
+ self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
self.acoustid_apikey = QtGui.QLineEdit(self.acoustid_settings)
- self.acoustid_apikey.setObjectName("acoustid_apikey")
+ self.acoustid_apikey.setObjectName(_fromUtf8("acoustid_apikey"))
self.horizontalLayout.addWidget(self.acoustid_apikey)
self.acoustid_apikey_get = QtGui.QPushButton(self.acoustid_settings)
- self.acoustid_apikey_get.setObjectName("acoustid_apikey_get")
+ self.acoustid_apikey_get.setObjectName(_fromUtf8("acoustid_apikey_get"))
self.horizontalLayout.addWidget(self.acoustid_apikey_get)
self.verticalLayout_2.addLayout(self.horizontalLayout)
self.verticalLayout.addWidget(self.acoustid_settings)
@@ -65,10 +71,10 @@ class Ui_FingerprintingOptionsPage(object):
QtCore.QMetaObject.connectSlotsByName(FingerprintingOptionsPage)
def retranslateUi(self, FingerprintingOptionsPage):
- self.groupBox.setTitle(_("Fingerprinting Systems"))
- self.use_musicdns.setText(_("Use AmpliFIND (formerly MusicDNS)"))
+ self.enable_fingerprinting.setTitle(_("Audio Fingerprinting"))
self.use_acoustid.setText(_("Use AcoustID"))
- self.acoustid_settings.setTitle(_("AcoustID\'s Settings"))
+ self.use_musicdns.setText(_("Use AmpliFIND (formerly MusicDNS)"))
+ self.acoustid_settings.setTitle(_("AcoustID Settings"))
self.label.setText(_("Fingerprint calculator:"))
self.acoustid_fpcalc_browse.setText(_("Browse..."))
self.acoustid_fpcalc_download.setText(_("Download..."))
diff --git a/picard/ui/ui_options_interface.py b/picard/ui/ui_options_interface.py
index c0e99bbde..76c208ac2 100644
--- a/picard/ui/ui_options_interface.py
+++ b/picard/ui/ui_options_interface.py
@@ -2,8 +2,8 @@
# Form implementation generated from reading ui file 'ui/options_interface.ui'
#
-# Created: Wed Oct 5 17:51:02 2011
-# by: PyQt4 UI code generator 4.8.5
+# Created: Sun Dec 4 00:06:45 2011
+# by: PyQt4 UI code generator 4.8.3
#
# WARNING! All changes made in this file will be lost!
diff --git a/picard/ui/ui_options_metadata.py b/picard/ui/ui_options_metadata.py
index 1912d716b..c95697860 100644
--- a/picard/ui/ui_options_metadata.py
+++ b/picard/ui/ui_options_metadata.py
@@ -2,8 +2,8 @@
# Form implementation generated from reading ui file 'ui/options_metadata.ui'
#
-# Created: Mon Oct 17 14:24:15 2011
-# by: PyQt4 UI code generator 4.8.5
+# Created: Sun Dec 4 00:06:45 2011
+# by: PyQt4 UI code generator 4.8.3
#
# WARNING! All changes made in this file will be lost!
@@ -28,7 +28,6 @@ class Ui_MetadataOptionsPage(object):
self.rename_files.setSizePolicy(sizePolicy)
self.rename_files.setMinimumSize(QtCore.QSize(397, 135))
font = QtGui.QFont()
- font.setKerning(False)
self.rename_files.setFont(font)
self.rename_files.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.rename_files.setObjectName(_fromUtf8("rename_files"))
diff --git a/picard/ui/ui_options_plugins.py b/picard/ui/ui_options_plugins.py
index 2aa01e2ac..aed25fd74 100644
--- a/picard/ui/ui_options_plugins.py
+++ b/picard/ui/ui_options_plugins.py
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'ui/options_plugins.ui'
#
-# Created: Thu Sep 15 13:39:10 2011
+# Created: Sun Dec 4 00:06:45 2011
# by: PyQt4 UI code generator 4.8.3
#
# WARNING! All changes made in this file will be lost!
@@ -136,3 +136,4 @@ class Ui_PluginsOptionsPage(object):
self.folder_open.setText(_("Open plugin folder"))
self.plugin_download.setText(_("Download plugins"))
self.groupBox.setTitle(_("Details"))
+
diff --git a/ui/options_fingerprinting.ui b/ui/options_fingerprinting.ui
index d73202e2a..15a2665e0 100644
--- a/ui/options_fingerprinting.ui
+++ b/ui/options_fingerprinting.ui
@@ -7,37 +7,40 @@
0
0
371
- 305
+ 408
-
-
+
- Fingerprinting Systems
+ Audio Fingerprinting
-
-
-
-
-
- Use AmpliFIND (formerly MusicDNS)
-
-
-
- -
+
+ true
+
+
+
-
Use AcoustID
+ -
+
+
+ Use AmpliFIND (formerly MusicDNS)
+
+
+
-
- AcoustID's Settings
+ AcoustID Settings
-