From 56f9be3723f495767f79749694c866218723c5b4 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Tue, 10 Jan 2012 11:48:39 +0100 Subject: [PATCH] Beginnings of implementation for 914012. --- src/calibre/gui2/email.py | 8 +++++++- src/calibre/gui2/library/models.py | 22 ++++++++++++++++++---- src/calibre/gui2/preferences/plugboard.py | 8 ++++++-- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/calibre/gui2/email.py b/src/calibre/gui2/email.py index 0879823574..ed7be122b6 100644 --- a/src/calibre/gui2/email.py +++ b/src/calibre/gui2/email.py @@ -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'] + 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] diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index 64d9eda301..d2d478fd4c 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -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: + _set_metadata(pt, newmi, format) + else: + _set_metadata(pt, mi, format) except: traceback.print_exc() pt.close() diff --git a/src/calibre/gui2/preferences/plugboard.py b/src/calibre/gui2/preferences/plugboard.py index 587db0fd79..78a641ea61 100644 --- a/src/calibre/gui2/preferences/plugboard.py +++ b/src/calibre/gui2/preferences/plugboard.py @@ -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)