From f75aa358fbd07789e40d01af3b391c8ccb8afd45 Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Wed, 9 Jul 2014 12:22:57 +0200 Subject: [PATCH] PICARD-418: fallback to using release group cover It adds the option to use release group cover art from CAA. It is required to enable CAA and release group fallback is disabled by default --- picard/coverartproviders/__init__.py | 2 + picard/coverartproviders/caa_release_group.py | 47 +++++++++++++++++++ picard/ui/options/cover.py | 9 ++++ picard/ui/ui_options_cover.py | 19 +++++++- ui/options_cover.ui | 11 +++++ 5 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 picard/coverartproviders/caa_release_group.py 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