mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 18:24:30 -04:00
News download: Allow controlling which periodicals are automatically sent to a specific email by tag in Preferences->Sharing by email
Code contributed by bubak
This commit is contained in:
parent
440055ad42
commit
a9879c63fd
@ -155,6 +155,8 @@ def email_news(mi, remove, get_fmts, done, job_manager):
|
||||
files = [f for f in files if f is not None]
|
||||
if not files:
|
||||
continue
|
||||
if opts.tags.get(account, False) and not ({t.strip() for t in opts.tags[account].split(',')} & set(mi.tags)):
|
||||
continue
|
||||
attachment = files[0]
|
||||
to_s = [account]
|
||||
subjects = [_('News:')+' '+mi.title]
|
||||
|
@ -20,16 +20,17 @@ from calibre.utils.smtp import config as smtp_prefs
|
||||
|
||||
class EmailAccounts(QAbstractTableModel): # {{{
|
||||
|
||||
def __init__(self, accounts, subjects, aliases={}):
|
||||
def __init__(self, accounts, subjects, aliases={}, tags={}):
|
||||
QAbstractTableModel.__init__(self)
|
||||
self.accounts = accounts
|
||||
self.subjects = subjects
|
||||
self.aliases = aliases
|
||||
self.tags = tags
|
||||
self.sorted_on = (0, True)
|
||||
self.account_order = self.accounts.keys()
|
||||
self.do_sort()
|
||||
self.headers = map(unicode, [_('Email'), _('Formats'), _('Subject'),
|
||||
_('Auto send'), _('Alias')])
|
||||
_('Auto send'), _('Alias'), _('Auto send only tags')])
|
||||
self.default_font = QFont()
|
||||
self.default_font.setBold(True)
|
||||
self.default_font = (self.default_font)
|
||||
@ -40,9 +41,13 @@ class EmailAccounts(QAbstractTableModel): # {{{
|
||||
'templates used for "Save to disk" such as {title} and '
|
||||
'{author_sort} can be used here.'),
|
||||
'<p>'+_('If checked, downloaded news will be automatically '
|
||||
'mailed <br>to this email address '
|
||||
'(provided it is in one of the listed formats).'),
|
||||
_('Friendly name to use for this email address')
|
||||
'mailed to this email address '
|
||||
'(provided it is in one of the listed formats and has not been filtered by tags).'),
|
||||
_('Friendly name to use for this email address'),
|
||||
_('If specified, only news with one of these tags will be sent to'
|
||||
' this email address. All news downloads have their title as a'
|
||||
' tag, so you can use this to easily control which news downloads'
|
||||
' are sent to this email address.')
|
||||
])))
|
||||
|
||||
def do_sort(self):
|
||||
@ -62,6 +67,9 @@ class EmailAccounts(QAbstractTableModel): # {{{
|
||||
elif col == 4:
|
||||
def key(account_key):
|
||||
return numeric_sort_key(self.aliases.get(account_key) or '')
|
||||
elif col == 5:
|
||||
def key(account_key):
|
||||
return numeric_sort_key(self.tags.get(account_key) or '')
|
||||
self.account_order.sort(key=key, reverse=not self.sorted_on[1])
|
||||
|
||||
def sort(self, column, order=Qt.AscendingOrder):
|
||||
@ -105,6 +113,8 @@ class EmailAccounts(QAbstractTableModel): # {{{
|
||||
return (self.subjects.get(account, ''))
|
||||
if col == 4:
|
||||
return (self.aliases.get(account, ''))
|
||||
if col == 5:
|
||||
return (self.tags.get(account, ''))
|
||||
if role == Qt.FontRole and self.accounts[account][2]:
|
||||
return self.default_font
|
||||
if role == Qt.CheckStateRole and col == 3:
|
||||
@ -131,6 +141,11 @@ class EmailAccounts(QAbstractTableModel): # {{{
|
||||
aval = unicode(value or '').strip()
|
||||
if aval:
|
||||
self.aliases[account] = aval
|
||||
elif col == 5:
|
||||
self.tags.pop(account, None)
|
||||
aval = unicode(value or '').strip()
|
||||
if aval:
|
||||
self.tags[account] = aval
|
||||
elif col == 1:
|
||||
self.accounts[account][0] = unicode(value or '').upper()
|
||||
elif col == 0:
|
||||
@ -206,7 +221,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
self.send_email_widget.changed_signal.connect(self.changed_signal.emit)
|
||||
opts = self.send_email_widget.smtp_opts
|
||||
self._email_accounts = EmailAccounts(opts.accounts, opts.subjects,
|
||||
opts.aliases)
|
||||
opts.aliases, opts.tags)
|
||||
self._email_accounts.dataChanged.connect(lambda x,y:
|
||||
self.changed_signal.emit())
|
||||
self.email_view.setModel(self._email_accounts)
|
||||
@ -241,6 +256,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
self.proxy['accounts'] = self._email_accounts.accounts
|
||||
self.proxy['subjects'] = self._email_accounts.subjects
|
||||
self.proxy['aliases'] = self._email_accounts.aliases
|
||||
self.proxy['tags'] = self._email_accounts.tags
|
||||
|
||||
return ConfigWidgetBase.commit(self)
|
||||
|
||||
|
@ -282,6 +282,7 @@ def config(defaults=None):
|
||||
c.add_opt('accounts', default={})
|
||||
c.add_opt('subjects', default={})
|
||||
c.add_opt('aliases', default={})
|
||||
c.add_opt('tags', default={})
|
||||
c.add_opt('relay_host')
|
||||
c.add_opt('relay_port', default=25)
|
||||
c.add_opt('relay_username')
|
||||
|
Loading…
x
Reference in New Issue
Block a user