Fix #914012 ([Enhancement] metadata plugboards for email)

This commit is contained in:
Kovid Goyal 2012-01-12 09:25:56 +05:30
commit 1945eb8a80
3 changed files with 31 additions and 7 deletions

View File

@ -157,6 +157,9 @@ def email_news(mi, remove, get_fmts, done, job_manager):
sent_mails.append(to_s[0])
return sent_mails
plugboard_email_value = 'email'
plugboard_email_formats = ['epub', 'mobi']
class EmailMixin(object): # {{{
def send_by_mail(self, to, fmts, delete_from_library, subject='', send_ids=None,
@ -164,10 +167,13 @@ class EmailMixin(object): # {{{
ids = [self.library_view.model().id(r) for r in self.library_view.selectionModel().selectedRows()] if send_ids is None else send_ids
if not ids or len(ids) == 0:
return
files, _auto_ids = self.library_view.model().get_preferred_formats_from_ids(ids,
fmts, set_metadata=True,
specific_format=specific_format,
exclude_auto=do_auto_convert)
exclude_auto=do_auto_convert,
use_plugboard=plugboard_email_value,
plugboard_formats=plugboard_email_formats)
if do_auto_convert:
nids = list(set(ids).difference(_auto_ids))
ids = [i for i in ids if i in nids]

View File

@ -22,6 +22,7 @@ from calibre.utils.icu import sort_key
from calibre.utils.search_query_parser import SearchQueryParser
from calibre.library.caches import (_match, CONTAINS_MATCH, EQUALS_MATCH,
REGEXP_MATCH, MetadataBackup, force_to_bool)
from calibre.library.save_to_disk import find_plugboard
from calibre import strftime, isbytestring
from calibre.constants import filesystem_encoding, DEBUG
from calibre.gui2.library import DEFAULT_SORT
@ -429,7 +430,8 @@ class BooksModel(QAbstractTableModel): # {{{
def get_preferred_formats_from_ids(self, ids, formats,
set_metadata=False, specific_format=None,
exclude_auto=False, mode='r+b'):
exclude_auto=False, mode='r+b',
use_plugboard=None, plugboard_formats=None):
from calibre.ebooks.metadata.meta import set_metadata as _set_metadata
ans = []
need_auto = []
@ -453,9 +455,21 @@ class BooksModel(QAbstractTableModel): # {{{
pt.seek(0)
if set_metadata:
try:
_set_metadata(pt, self.db.get_metadata(
id, get_cover=True, index_is_id=True,
cover_as_data=True), format)
mi = self.db.get_metadata(id, get_cover=True,
index_is_id=True,
cover_as_data=True)
newmi = None
if use_plugboard and format.lower() in plugboard_formats:
plugboards = self.db.prefs.get('plugboards', {})
cpb = find_plugboard(use_plugboard, format.lower(),
plugboards)
if cpb:
newmi = mi.deepcopy_metadata()
newmi.template_to_attribute(mi, cpb)
if newmi is not None:
_set_metadata(pt, newmi, format)
else:
_set_metadata(pt, mi, format)
except:
traceback.print_exc()
pt.close()

View File

@ -21,6 +21,7 @@ from calibre.library.save_to_disk import plugboard_any_format_value, \
find_plugboard
from calibre.library.server.content import plugboard_content_server_value, \
plugboard_content_server_formats
from calibre.gui2.email import plugboard_email_value, plugboard_email_formats
from calibre.utils.formatter import validation_formatter
@ -68,6 +69,9 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.devices.insert(1, plugboard_content_server_value)
self.device_to_formats_map[plugboard_content_server_value] = \
plugboard_content_server_formats
self.devices.insert(1, plugboard_email_value)
self.device_to_formats_map[plugboard_email_value] = \
plugboard_email_formats
self.devices.insert(1, plugboard_any_device_value)
self.new_device.addItems(self.devices)
@ -321,8 +325,8 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.clear_fields(new_boxes=True)
self.edit_format.clear()
self.edit_format.addItem('')
for format in self.current_plugboards:
self.edit_format.addItem(format)
for format_ in self.current_plugboards:
self.edit_format.addItem(format_)
self.edit_format.setCurrentIndex(0)
self.edit_device.clear()
self.ok_button.setEnabled(False)