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
This commit is contained in:
Laurent Monin
2014-07-09 12:22:57 +02:00
parent 84ffe3502f
commit f75aa358fb
5 changed files with 86 additions and 2 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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"] =\

View File

@@ -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:"))

View File

@@ -84,6 +84,16 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="caprovider_caa_release_group">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Fallback on Cover Art Archive release group image</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="caprovider_whitelist">
<property name="text">
@@ -236,6 +246,7 @@
<tabstop>save_images_overwrite</tabstop>
<tabstop>caprovider_amazon</tabstop>
<tabstop>caprovider_caa</tabstop>
<tabstop>caprovider_caa_release_group</tabstop>
<tabstop>caprovider_whitelist</tabstop>
<tabstop>cb_image_size</tabstop>
<tabstop>caa_types_selector_1</tabstop>