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])
|
sent_mails.append(to_s[0])
|
||||||
return sent_mails
|
return sent_mails
|
||||||
|
|
||||||
|
plugboard_email_value = 'email'
|
||||||
|
plugboard_email_formats = ['epub', 'mobi']
|
||||||
|
|
||||||
class EmailMixin(object): # {{{
|
class EmailMixin(object): # {{{
|
||||||
|
|
||||||
def send_by_mail(self, to, fmts, delete_from_library, subject='', send_ids=None,
|
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
|
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:
|
if not ids or len(ids) == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
files, _auto_ids = self.library_view.model().get_preferred_formats_from_ids(ids,
|
files, _auto_ids = self.library_view.model().get_preferred_formats_from_ids(ids,
|
||||||
fmts, set_metadata=True,
|
fmts, set_metadata=True,
|
||||||
specific_format=specific_format,
|
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:
|
if do_auto_convert:
|
||||||
nids = list(set(ids).difference(_auto_ids))
|
nids = list(set(ids).difference(_auto_ids))
|
||||||
ids = [i for i in ids if i in nids]
|
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.utils.search_query_parser import SearchQueryParser
|
||||||
from calibre.library.caches import (_match, CONTAINS_MATCH, EQUALS_MATCH,
|
from calibre.library.caches import (_match, CONTAINS_MATCH, EQUALS_MATCH,
|
||||||
REGEXP_MATCH, MetadataBackup, force_to_bool)
|
REGEXP_MATCH, MetadataBackup, force_to_bool)
|
||||||
|
from calibre.library.save_to_disk import find_plugboard
|
||||||
from calibre import strftime, isbytestring
|
from calibre import strftime, isbytestring
|
||||||
from calibre.constants import filesystem_encoding, DEBUG
|
from calibre.constants import filesystem_encoding, DEBUG
|
||||||
from calibre.gui2.library import DEFAULT_SORT
|
from calibre.gui2.library import DEFAULT_SORT
|
||||||
@ -429,7 +430,8 @@ class BooksModel(QAbstractTableModel): # {{{
|
|||||||
|
|
||||||
def get_preferred_formats_from_ids(self, ids, formats,
|
def get_preferred_formats_from_ids(self, ids, formats,
|
||||||
set_metadata=False, specific_format=None,
|
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
|
from calibre.ebooks.metadata.meta import set_metadata as _set_metadata
|
||||||
ans = []
|
ans = []
|
||||||
need_auto = []
|
need_auto = []
|
||||||
@ -453,9 +455,21 @@ class BooksModel(QAbstractTableModel): # {{{
|
|||||||
pt.seek(0)
|
pt.seek(0)
|
||||||
if set_metadata:
|
if set_metadata:
|
||||||
try:
|
try:
|
||||||
_set_metadata(pt, self.db.get_metadata(
|
mi = self.db.get_metadata(id, get_cover=True,
|
||||||
id, get_cover=True, index_is_id=True,
|
index_is_id=True,
|
||||||
cover_as_data=True), format)
|
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:
|
except:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
pt.close()
|
pt.close()
|
||||||
|
@ -21,6 +21,7 @@ from calibre.library.save_to_disk import plugboard_any_format_value, \
|
|||||||
find_plugboard
|
find_plugboard
|
||||||
from calibre.library.server.content import plugboard_content_server_value, \
|
from calibre.library.server.content import plugboard_content_server_value, \
|
||||||
plugboard_content_server_formats
|
plugboard_content_server_formats
|
||||||
|
from calibre.gui2.email import plugboard_email_value, plugboard_email_formats
|
||||||
from calibre.utils.formatter import validation_formatter
|
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.devices.insert(1, plugboard_content_server_value)
|
||||||
self.device_to_formats_map[plugboard_content_server_value] = \
|
self.device_to_formats_map[plugboard_content_server_value] = \
|
||||||
plugboard_content_server_formats
|
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.devices.insert(1, plugboard_any_device_value)
|
||||||
self.new_device.addItems(self.devices)
|
self.new_device.addItems(self.devices)
|
||||||
|
|
||||||
@ -321,8 +325,8 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
self.clear_fields(new_boxes=True)
|
self.clear_fields(new_boxes=True)
|
||||||
self.edit_format.clear()
|
self.edit_format.clear()
|
||||||
self.edit_format.addItem('')
|
self.edit_format.addItem('')
|
||||||
for format in self.current_plugboards:
|
for format_ in self.current_plugboards:
|
||||||
self.edit_format.addItem(format)
|
self.edit_format.addItem(format_)
|
||||||
self.edit_format.setCurrentIndex(0)
|
self.edit_format.setCurrentIndex(0)
|
||||||
self.edit_device.clear()
|
self.edit_device.clear()
|
||||||
self.ok_button.setEnabled(False)
|
self.ok_button.setEnabled(False)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user