diff --git a/picard/coverartproviders/__init__.py b/picard/coverartproviders/__init__.py
index 26aa9c8c0..eeeb038ea 100644
--- a/picard/coverartproviders/__init__.py
+++ b/picard/coverartproviders/__init__.py
@@ -98,7 +98,9 @@ class CoverArtProvider:
from picard.coverartproviders.caa import CoverArtProviderCaa
from picard.coverartproviders.amazon import CoverArtProviderAmazon
from picard.coverartproviders.whitelist import CoverArtProviderWhitelist
+from picard.coverartproviders.caa_release_group import CoverArtProviderCaaReleaseGroup
register_cover_art_provider(CoverArtProviderCaa)
register_cover_art_provider(CoverArtProviderAmazon)
register_cover_art_provider(CoverArtProviderWhitelist)
+register_cover_art_provider(CoverArtProviderCaaReleaseGroup)
diff --git a/picard/coverartproviders/caa_release_group.py b/picard/coverartproviders/caa_release_group.py
new file mode 100644
index 000000000..a3e6e3bc1
--- /dev/null
+++ b/picard/coverartproviders/caa_release_group.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+#
+# Picard, the next-generation MusicBrainz tagger
+# Copyright (C) 2014 Laurent Monin
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+import traceback
+
+from picard import config, log
+from picard.coverartproviders import CoverArtProvider
+from picard.coverartimage import CoverArtImage
+from picard.const import CAA_HOST, CAA_PORT
+
+
+class CoverArtProviderCaaReleaseGroup(CoverArtProvider):
+
+ """Use cover art from album release group"""
+
+ NAME = "CaaReleaseGroup"
+
+ def enabled(self):
+ if not config.setting['ca_provider_use_caa']:
+ log.debug("Cover art from Cover Art Archive disabled by user")
+ return False
+ if not config.setting['ca_provider_use_caa_release_group_fallback']:
+ log.debug("Release group cover art fallback disabled by user")
+ return False
+ return True
+
+ def queue_downloads(self):
+ rg_id = self.metadata['musicbrainz_releasegroupid']
+ url = 'http://%s:%s/release-group/%s/front.jpg' % (CAA_HOST, CAA_PORT, rg_id)
+ self.queue_put(CoverArtImage(url))
+ return CoverArtProvider.FINISHED
diff --git a/picard/ui/options/cover.py b/picard/ui/options/cover.py
index f51df4640..ad7d77315 100644
--- a/picard/ui/options/cover.py
+++ b/picard/ui/options/cover.py
@@ -74,6 +74,8 @@ class CoverOptionsPage(OptionsPage):
config.BoolOption("setting", "save_images_overwrite", False),
config.BoolOption("setting", "ca_provider_use_amazon", True),
config.BoolOption("setting", "ca_provider_use_caa", True),
+ config.BoolOption("setting",
+ "ca_provider_use_caa_release_group_fallback", False),
config.BoolOption("setting", "ca_provider_use_whitelist", True),
config.BoolOption("setting", "caa_approved_only", True),
config.BoolOption("setting", "caa_image_type_as_filename", False),
@@ -96,8 +98,11 @@ class CoverOptionsPage(OptionsPage):
self.update_filename()
self.ui.caprovider_amazon.setChecked(config.setting["ca_provider_use_amazon"])
self.ui.caprovider_caa.setChecked(config.setting["ca_provider_use_caa"])
+ self.ui.caprovider_caa_release_group.setChecked(
+ config.setting["ca_provider_use_caa_release_group_fallback"])
self.ui.caprovider_whitelist.setChecked(config.setting["ca_provider_use_whitelist"])
self.ui.gb_caa.setEnabled(config.setting["ca_provider_use_caa"])
+ self.ui.caprovider_caa_release_group.setEnabled(config.setting["ca_provider_use_caa"])
self.ui.cb_image_size.setCurrentIndex(config.setting["caa_image_size"])
widget = self.ui.caa_types_selector_1
@@ -107,6 +112,8 @@ class CoverOptionsPage(OptionsPage):
self.ui.cb_type_as_filename.setChecked(config.setting["caa_image_type_as_filename"])
self.connect(self.ui.caprovider_caa, QtCore.SIGNAL("toggled(bool)"),
self.ui.gb_caa.setEnabled)
+ self.connect(self.ui.caprovider_caa, QtCore.SIGNAL("toggled(bool)"),
+ self.ui.caprovider_caa_release_group.setEnabled)
def save(self):
config.setting["save_images_to_tags"] = self.ui.save_images_to_tags.isChecked()
@@ -117,6 +124,8 @@ class CoverOptionsPage(OptionsPage):
self.ui.caprovider_amazon.isChecked()
config.setting["ca_provider_use_caa"] =\
self.ui.caprovider_caa.isChecked()
+ config.setting["ca_provider_use_caa_release_group_fallback"] =\
+ self.ui.caprovider_caa_release_group.isChecked()
config.setting["ca_provider_use_whitelist"] =\
self.ui.caprovider_whitelist.isChecked()
config.setting["caa_image_size"] =\
diff --git a/picard/ui/ui_options_cover.py b/picard/ui/ui_options_cover.py
index b82005bd0..dbcdbe9ab 100644
--- a/picard/ui/ui_options_cover.py
+++ b/picard/ui/ui_options_cover.py
@@ -8,7 +8,16 @@ from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
- _fromUtf8 = lambda s: s
+ def _fromUtf8(s):
+ return s
+
+try:
+ _encoding = QtGui.QApplication.UnicodeUTF8
+ def _translate(context, text, disambig):
+ return QtGui.QApplication.translate(context, text, disambig, _encoding)
+except AttributeError:
+ def _translate(context, text, disambig):
+ return QtGui.QApplication.translate(context, text, disambig)
class Ui_CoverOptionsPage(object):
def setupUi(self, CoverOptionsPage):
@@ -51,6 +60,10 @@ class Ui_CoverOptionsPage(object):
self.caprovider_caa = QtGui.QCheckBox(self.groupBox)
self.caprovider_caa.setObjectName(_fromUtf8("caprovider_caa"))
self.verticalLayout_2.addWidget(self.caprovider_caa)
+ self.caprovider_caa_release_group = QtGui.QCheckBox(self.groupBox)
+ self.caprovider_caa_release_group.setEnabled(False)
+ self.caprovider_caa_release_group.setObjectName(_fromUtf8("caprovider_caa_release_group"))
+ self.verticalLayout_2.addWidget(self.caprovider_caa_release_group)
self.caprovider_whitelist = QtGui.QCheckBox(self.groupBox)
self.caprovider_whitelist.setObjectName(_fromUtf8("caprovider_whitelist"))
self.verticalLayout_2.addWidget(self.caprovider_whitelist)
@@ -121,7 +134,8 @@ class Ui_CoverOptionsPage(object):
CoverOptionsPage.setTabOrder(self.cover_image_filename, self.save_images_overwrite)
CoverOptionsPage.setTabOrder(self.save_images_overwrite, self.caprovider_amazon)
CoverOptionsPage.setTabOrder(self.caprovider_amazon, self.caprovider_caa)
- CoverOptionsPage.setTabOrder(self.caprovider_caa, self.caprovider_whitelist)
+ CoverOptionsPage.setTabOrder(self.caprovider_caa, self.caprovider_caa_release_group)
+ CoverOptionsPage.setTabOrder(self.caprovider_caa_release_group, self.caprovider_whitelist)
CoverOptionsPage.setTabOrder(self.caprovider_whitelist, self.cb_image_size)
CoverOptionsPage.setTabOrder(self.cb_image_size, self.caa_types_selector_1)
CoverOptionsPage.setTabOrder(self.caa_types_selector_1, self.cb_approved_only)
@@ -137,6 +151,7 @@ class Ui_CoverOptionsPage(object):
self.groupBox.setTitle(_("Coverart Providers"))
self.caprovider_amazon.setText(_("Amazon"))
self.caprovider_caa.setText(_("Cover Art Archive"))
+ self.caprovider_caa_release_group.setText(_("Fallback on Cover Art Archive release group image"))
self.caprovider_whitelist.setText(_("Sites on the whitelist"))
self.gb_caa.setTitle(_("Cover Art Archive"))
self.label.setText(_("Only use images of the following size:"))
diff --git a/ui/options_cover.ui b/ui/options_cover.ui
index 5a0567326..0f25830d1 100644
--- a/ui/options_cover.ui
+++ b/ui/options_cover.ui
@@ -84,6 +84,16 @@
+ -
+
+
+ false
+
+
+ Fallback on Cover Art Archive release group image
+
+
+
-
@@ -236,6 +246,7 @@
save_images_overwrite
caprovider_amazon
caprovider_caa
+ caprovider_caa_release_group
caprovider_whitelist
cb_image_size
caa_types_selector_1