mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix #914012 ([Enhancement] metadata plugboards for email)
This commit is contained in:
commit
1945eb8a80
@ -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]
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user