Add body text to newsletters

This commit is contained in:
JonnyWong16 2018-03-19 20:20:57 -07:00
parent 6f6fb485fe
commit 7e11af1fd0
8 changed files with 170 additions and 76 deletions

View file

@ -48,7 +48,7 @@ newsletter_log_table_options = {
$(td).html(cellData); $(td).html(cellData);
} }
}, },
"width": "10%", "width": "5%",
"className": "no-wrap" "className": "no-wrap"
}, },
{ {
@ -67,43 +67,53 @@ newsletter_log_table_options = {
"data": "subject_text", "data": "subject_text",
"createdCell": function (td, cellData, rowData, row, col) { "createdCell": function (td, cellData, rowData, row, col) {
if (cellData !== '') { if (cellData !== '') {
$(td).html('<a href="newsletter/' + rowData['uuid'] + '" target="_blank">' + cellData + '</a>'); $(td).html(cellData);
} }
}, },
"width": "38%" "width": "25%"
}, },
{ {
"targets": [5], "targets": [5],
"data": "body_text",
"createdCell": function (td, cellData, rowData, row, col) {
if (cellData !== '') {
$(td).html(cellData);
}
},
"width": "33%"
},
{
"targets": [6],
"data": "start_date", "data": "start_date",
"createdCell": function (td, cellData, rowData, row, col) { "createdCell": function (td, cellData, rowData, row, col) {
if (cellData !== '') { if (cellData !== '') {
$(td).html(cellData); $(td).html(cellData);
} }
}, },
"width": "10%" "width": "5%"
}, },
{ {
"targets": [6], "targets": [7],
"data": "end_date", "data": "end_date",
"createdCell": function (td, cellData, rowData, row, col) { "createdCell": function (td, cellData, rowData, row, col) {
if (cellData !== '') { if (cellData !== '') {
$(td).html(cellData); $(td).html(cellData);
} }
}, },
"width": "10%" "width": "5%"
},
{
"targets": [7],
"data": "uuid",
"createdCell": function (td, cellData, rowData, row, col) {
if (cellData !== '') {
$(td).html(cellData);
}
},
"width": "10%"
}, },
{ {
"targets": [8], "targets": [8],
"data": "uuid",
"createdCell": function (td, cellData, rowData, row, col) {
if (cellData !== '') {
$(td).html('<a href="newsletter/' + rowData['uuid'] + '" target="_blank">' + cellData + '</a>');
}
},
"width": "5%"
},
{
"targets": [9],
"data": "success", "data": "success",
"createdCell": function (td, cellData, rowData, row, col) { "createdCell": function (td, cellData, rowData, row, col) {
if (cellData === 1) { if (cellData === 1) {

View file

@ -152,6 +152,7 @@
<th align="left" id="newsletter_agent_name">Agent</th> <th align="left" id="newsletter_agent_name">Agent</th>
<th align="left" id="newsletter_notify_action">Action</th> <th align="left" id="newsletter_notify_action">Action</th>
<th align="left" id="newsletter_subject_text">Subject Text</th> <th align="left" id="newsletter_subject_text">Subject Text</th>
<th align="left" id="newsletter_body_text">Body Text</th>
<th align="left" id="newsletter_start_date">Start Date</th> <th align="left" id="newsletter_start_date">Start Date</th>
<th align="left" id="newsletter_end_date">End Date</th> <th align="left" id="newsletter_end_date">End Date</th>
<th align="left" id="newsletter_uuid">UUID</th> <th align="left" id="newsletter_uuid">UUID</th>

View file

@ -176,10 +176,10 @@
<p class="help-block">Use an existing Email notification agent or enter a new configuration below.</p> <p class="help-block">Use an existing Email notification agent or enter a new configuration below.</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="email_subject">Email Subject</label> <label for="subject">Subject</label>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<input type="text" class="form-control" id="email_subject" name="email_subject" value="${newsletter['email_config']['subject']}" size="30"> <input type="text" class="form-control" id="subject" name="subject" value="${newsletter['subject']}" size="30">
</div> </div>
</div> </div>
<p class="help-block"> <p class="help-block">
@ -188,6 +188,19 @@
Note: You may include <span class="inline-pre">{server_name}</span>, <span class="inline-pre">{start_date}</span>, and <span class="inline-pre">{end_date}</span> as parameters. The global date format under Settings > General will be used. Note: You may include <span class="inline-pre">{server_name}</span>, <span class="inline-pre">{start_date}</span>, and <span class="inline-pre">{end_date}</span> as parameters. The global date format under Settings > General will be used.
</p> </p>
</div> </div>
<div class="form-group">
<label for="body">Body</label>
<div class="row">
<div class="col-md-12">
<input type="text" class="form-control" id="body" name="body" value="${newsletter['body']}" size="30">
</div>
</div>
<p class="help-block">
Optional: Enter a body line for the email. Leave blank for default.
<br>
Note: You may include <span class="inline-pre">{server_name}</span>, <span class="inline-pre">{start_date}</span>, and <span class="inline-pre">{end_date}</span> as parameters. The global date format under Settings > General will be used.
</p>
</div>
</div> </div>
<div id="newsletter-email-config" class="col-md-12" style="padding-top: 10px; border-top: 1px solid #444; ${'display: none;' if newsletter['email_config']['notifier'] else ''}"> <div id="newsletter-email-config" class="col-md-12" style="padding-top: 10px; border-top: 1px solid #444; ${'display: none;' if newsletter['email_config']['notifier'] else ''}">
% for item in newsletter['email_config_options']: % for item in newsletter['email_config_options']:

View file

@ -638,14 +638,15 @@ def dbcheck():
'CREATE TABLE IF NOT EXISTS newsletters (id INTEGER PRIMARY KEY AUTOINCREMENT, ' 'CREATE TABLE IF NOT EXISTS newsletters (id INTEGER PRIMARY KEY AUTOINCREMENT, '
'agent_id INTEGER, agent_name TEXT, agent_label TEXT, ' 'agent_id INTEGER, agent_name TEXT, agent_label TEXT, '
'friendly_name TEXT, newsletter_config TEXT, email_config TEXT, ' 'friendly_name TEXT, newsletter_config TEXT, email_config TEXT, '
'cron TEXT NOT NULL DEFAULT "0 0 * * 0", active INTEGER DEFAULT 0)' 'subject TEXT, body TEXT, cron TEXT NOT NULL DEFAULT "0 0 * * 0", active INTEGER DEFAULT 0)'
) )
# newsletter_log table :: This is a table which logs newsletters sent # newsletter_log table :: This is a table which logs newsletters sent
c_db.execute( c_db.execute(
'CREATE TABLE IF NOT EXISTS newsletter_log (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, ' 'CREATE TABLE IF NOT EXISTS newsletter_log (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, '
'newsletter_id INTEGER, agent_id INTEGER, agent_name TEXT, notify_action TEXT, ' 'newsletter_id INTEGER, agent_id INTEGER, agent_name TEXT, notify_action TEXT, '
'subject_text TEXT, start_date TEXT, end_date TEXT, uuid TEXT UNIQUE, success INTEGER DEFAULT 0)' 'subject_text TEXT, body_text TEXT, start_date TEXT, end_date TEXT, '
'uuid TEXT UNIQUE, success INTEGER DEFAULT 0)'
) )
# poster_urls table :: This table keeps record of the notification poster urls # poster_urls table :: This table keeps record of the notification poster urls

View file

@ -1573,6 +1573,7 @@ class DataFactory(object):
'newsletter_log.agent_name', 'newsletter_log.agent_name',
'newsletter_log.notify_action', 'newsletter_log.notify_action',
'newsletter_log.subject_text', 'newsletter_log.subject_text',
'newsletter_log.body_text',
'newsletter_log.start_date', 'newsletter_log.start_date',
'newsletter_log.end_date', 'newsletter_log.end_date',
'newsletter_log.uuid', 'newsletter_log.uuid',
@ -1606,6 +1607,7 @@ class DataFactory(object):
'agent_name': item['agent_name'], 'agent_name': item['agent_name'],
'notify_action': item['notify_action'], 'notify_action': item['notify_action'],
'subject_text': item['subject_text'], 'subject_text': item['subject_text'],
'body_text': item['body_text'],
'start_date': item['start_date'], 'start_date': item['start_date'],
'end_date': item['end_date'], 'end_date': item['end_date'],
'uuid': item['uuid'], 'uuid': item['uuid'],

View file

@ -65,19 +65,24 @@ def notify(newsletter_id=None, notify_action=None, **kwargs):
if not newsletter_config: if not newsletter_config:
return return
if notify_action in ('test', 'api'):
subject = kwargs.pop('subject', newsletter_config['subject'])
body = kwargs.pop('body', newsletter_config['subject'])
else:
subject = newsletter_config['subject']
body = newsletter_config['body']
newsletter_agent = newsletters.get_agent_class(agent_id=newsletter_config['agent_id'], newsletter_agent = newsletters.get_agent_class(agent_id=newsletter_config['agent_id'],
config=newsletter_config['config'], config=newsletter_config['config'],
email_config=newsletter_config['email_config']) email_config=newsletter_config['email_config'],
subject=subject,
if notify_action in ('test', 'api'): body=body)
subject_string = kwargs.pop('subject', None)
if subject_string:
newsletter_agent.subject = newsletter_agent.format_subject(subject_string)
# Set the newsletter state in the db # Set the newsletter state in the db
newsletter_log_id = set_notify_state(newsletter=newsletter_config, newsletter_log_id = set_notify_state(newsletter=newsletter_config,
notify_action=notify_action, notify_action=notify_action,
subject=newsletter_agent.subject, subject=newsletter_agent.subject_formatted,
body=newsletter_agent.body_formatted,
start_date=newsletter_agent.start_date.format('YYYY-MM-DD'), start_date=newsletter_agent.start_date.format('YYYY-MM-DD'),
end_date=newsletter_agent.end_date.format('YYYY-MM-DD'), end_date=newsletter_agent.end_date.format('YYYY-MM-DD'),
newsletter_uuid=newsletter_agent.uuid) newsletter_uuid=newsletter_agent.uuid)
@ -90,7 +95,7 @@ def notify(newsletter_id=None, notify_action=None, **kwargs):
return True return True
def set_notify_state(newsletter, notify_action, subject, start_date, end_date, newsletter_uuid): def set_notify_state(newsletter, notify_action, subject, body, start_date, end_date, newsletter_uuid):
if newsletter and notify_action: if newsletter and notify_action:
db = database.MonitorDatabase() db = database.MonitorDatabase()
@ -103,6 +108,7 @@ def set_notify_state(newsletter, notify_action, subject, start_date, end_date, n
'agent_name': newsletter['agent_name'], 'agent_name': newsletter['agent_name'],
'notify_action': notify_action, 'notify_action': notify_action,
'subject_text': subject, 'subject_text': subject,
'body_text': body,
'start_date': start_date, 'start_date': start_date,
'end_date': end_date} 'end_date': end_date}
@ -149,3 +155,4 @@ def get_newsletter(newsletter_uuid):
return "Newsletter no longer exists" return "Newsletter no longer exists"
else: else:
return "Newsletter does not exist" return "Newsletter does not exist"

View file

@ -29,7 +29,7 @@ import logger
import newsletter_handler import newsletter_handler
import notification_handler import notification_handler
import pmsconnect import pmsconnect
from notification_handler import get_poster_info from notification_handler import get_poster_info, CustomFormatter
from notifiers import send_notification, EMAIL from notifiers import send_notification, EMAIL
@ -55,6 +55,7 @@ def available_notification_actions():
'name': 'on_cron', 'name': 'on_cron',
'description': 'Trigger a notification on a certain schedule.', 'description': 'Trigger a notification on a certain schedule.',
'subject': 'Tautulli Newsletter', 'subject': 'Tautulli Newsletter',
'body': 'Tautulli Newsletter',
'icon': 'fa-calendar', 'icon': 'fa-calendar',
'media_types': ('newsletter',) 'media_types': ('newsletter',)
} }
@ -63,14 +64,17 @@ def available_notification_actions():
return actions return actions
def get_agent_class(agent_id=None, config=None, email_config=None, start_date=None, end_date=None): def get_agent_class(agent_id=None, config=None, email_config=None, start_date=None, end_date=None,
subject=None, body=None):
if str(agent_id).isdigit(): if str(agent_id).isdigit():
agent_id = int(agent_id) agent_id = int(agent_id)
kwargs = {'config': config, kwargs = {'config': config,
'email_config': email_config, 'email_config': email_config,
'start_date': start_date, 'start_date': start_date,
'end_date': end_date} 'end_date': end_date,
'subject': subject,
'body': body}
if agent_id == 0: if agent_id == 0:
return RecentlyAdded(**kwargs) return RecentlyAdded(**kwargs)
@ -131,13 +135,18 @@ def get_newsletter_config(newsletter_id=None):
try: try:
config = json.loads(result.pop('newsletter_config', '{}')) config = json.loads(result.pop('newsletter_config', '{}'))
email_config = json.loads(result.pop('email_config', '{}')) email_config = json.loads(result.pop('email_config', '{}'))
newsletter_agent = get_agent_class(agent_id=result['agent_id'], config=config, email_config=email_config) subject = result.pop('subject')
body = result.pop('body')
newsletter_agent = get_agent_class(agent_id=result['agent_id'], config=config, email_config=email_config,
subject=subject, body=body)
newsletter_config = newsletter_agent.return_config_options() newsletter_config = newsletter_agent.return_config_options()
newsletter_email_config = newsletter_agent.return_email_config_options() newsletter_email_config = newsletter_agent.return_email_config_options()
except Exception as e: except Exception as e:
logger.error(u"Tautulli Newsletters :: Failed to get newsletter config options: %s." % e) logger.error(u"Tautulli Newsletters :: Failed to get newsletter config options: %s." % e)
return return
result['subject'] = newsletter_agent.subject
result['body'] = newsletter_agent.body
result['config'] = config result['config'] = config
result['email_config'] = email_config result['email_config'] = email_config
result['config_options'] = newsletter_config result['config_options'] = newsletter_config
@ -169,7 +178,9 @@ def add_newsletter_config(agent_id=None, **kwargs):
'agent_label': agent['label'], 'agent_label': agent['label'],
'friendly_name': '', 'friendly_name': '',
'newsletter_config': json.dumps(agent_class.config), 'newsletter_config': json.dumps(agent_class.config),
'email_config': json.dumps(agent_class.email_config) 'email_config': json.dumps(agent_class.email_config),
'subject': agent_class.subject,
'body': agent_class.body
} }
db = database.MonitorDatabase() db = database.MonitorDatabase()
@ -207,7 +218,11 @@ def set_newsletter_config(newsletter_id=None, agent_id=None, **kwargs):
email_config = {k[len(email_config_prefix):]: kwargs.pop(k) email_config = {k[len(email_config_prefix):]: kwargs.pop(k)
for k in kwargs.keys() if k.startswith(email_config_prefix)} for k in kwargs.keys() if k.startswith(email_config_prefix)}
agent_class = get_agent_class(agent_id=agent['id'], config=newsletter_config, email_config=email_config) subject = kwargs.pop('subject')
body = kwargs.pop('body')
agent_class = get_agent_class(agent_id=agent['id'], config=newsletter_config, email_config=email_config,
subject=subject, body=body)
keys = {'id': newsletter_id} keys = {'id': newsletter_id}
values = {'agent_id': agent['id'], values = {'agent_id': agent['id'],
@ -216,6 +231,8 @@ def set_newsletter_config(newsletter_id=None, agent_id=None, **kwargs):
'friendly_name': kwargs.get('friendly_name', ''), 'friendly_name': kwargs.get('friendly_name', ''),
'newsletter_config': json.dumps(agent_class.config), 'newsletter_config': json.dumps(agent_class.config),
'email_config': json.dumps(agent_class.email_config), 'email_config': json.dumps(agent_class.email_config),
'subject': agent_class.subject,
'body': agent_class.body,
'cron': kwargs.get('cron'), 'cron': kwargs.get('cron'),
'active': kwargs.get('active') 'active': kwargs.get('active')
} }
@ -232,16 +249,15 @@ def set_newsletter_config(newsletter_id=None, agent_id=None, **kwargs):
return False return False
def send_newsletter(newsletter_id=None, subject=None, notify_action='', newsletter_log_id=None, **kwargs): def send_newsletter(newsletter_id=None, subject=None, body=None, newsletter_log_id=None, **kwargs):
newsletter_config = get_newsletter_config(newsletter_id=newsletter_id) newsletter_config = get_newsletter_config(newsletter_id=newsletter_id)
if newsletter_config: if newsletter_config:
agent = get_agent_class(agent_id=newsletter_config['agent_id'], agent = get_agent_class(agent_id=newsletter_config['agent_id'],
config=newsletter_config['config'], config=newsletter_config['config'],
email_config=newsletter_config['email_config']) email_config=newsletter_config['email_config'],
return agent.send(subject=subject, subject=subject,
action=notify_action.split('on_')[-1], body=body)
newsletter_log_id=newsletter_log_id, return agent.send()
**kwargs)
else: else:
logger.debug(u"Tautulli Newsletters :: Notification requested but no newsletter_id received.") logger.debug(u"Tautulli Newsletters :: Notification requested but no newsletter_id received.")
@ -279,15 +295,16 @@ class Newsletter(object):
_DEFAULT_EMAIL_CONFIG = EMAIL().return_default_config() _DEFAULT_EMAIL_CONFIG = EMAIL().return_default_config()
_DEFAULT_EMAIL_CONFIG['from_name'] = 'Tautulli Newsletter' _DEFAULT_EMAIL_CONFIG['from_name'] = 'Tautulli Newsletter'
_DEFAULT_EMAIL_CONFIG['notifier'] = 0 _DEFAULT_EMAIL_CONFIG['notifier'] = 0
_DEFAULT_EMAIL_CONFIG['subject'] = 'Tautulli Newsletter' _DEFAULT_SUBJECT = 'Tautulli Newsletter'
_DEFAULT_BODY = 'Tautulli Newsletter'
_TEMPLATE_MASTER = '' _TEMPLATE_MASTER = ''
_TEMPLATE = '' _TEMPLATE = ''
def __init__(self, config=None, email_config=None, start_date=None, end_date=None): def __init__(self, config=None, email_config=None, start_date=None, end_date=None, subject=None, body=None):
self.config = self.set_config(config=config, default=self._DEFAULT_CONFIG) self.config = self.set_config(config=config, default=self._DEFAULT_CONFIG)
self.email_config = self.set_config(config=email_config, default=self._DEFAULT_EMAIL_CONFIG) self.email_config = self.set_config(config=email_config, default=self._DEFAULT_EMAIL_CONFIG)
date_format = helpers.momentjs_to_arrow(plexpy.CONFIG.DATE_FORMAT) self.uuid = generate_newsletter_uuid()
self.start_date = None self.start_date = None
self.end_date = None self.end_date = None
@ -313,22 +330,19 @@ class Newsletter(object):
self.end_time = self.end_date.timestamp self.end_time = self.end_date.timestamp
self.start_time = self.start_date.timestamp self.start_time = self.start_date.timestamp
self.parameters = { self.parameters = self.build_params()
'start_date': self.start_date.format(date_format), self.subject = subject or self._DEFAULT_SUBJECT
'end_date': self.end_date.format(date_format), self.body = body or self._DEFAULT_BODY
'server_name': plexpy.CONFIG.PMS_NAME self.subject_formatted, self.body_formatted = self.build_text()
}
self.subject = self.format_subject(self.email_config['subject'])
self.uuid = generate_newsletter_uuid()
self.is_preview = False
self.data = {} self.data = {}
self.newsletter = None self.newsletter = None
self.is_preview = False
def set_config(self, config=None, default=None): def set_config(self, config=None, default=None):
self._add_config()
return self._validate_config(config=config, default=default) return self._validate_config(config=config, default=default)
def _validate_config(self, config=None, default=None): def _validate_config(self, config=None, default=None):
@ -344,6 +358,9 @@ class Newsletter(object):
return new_config return new_config
def _add_config(self):
pass
def retrieve_data(self): def retrieve_data(self):
pass pass
@ -372,7 +389,7 @@ class Newsletter(object):
return serve_template( return serve_template(
templatename=template, templatename=template,
title=self.subject, title=self.subject_formatted,
parameters=self.parameters, parameters=self.parameters,
data=self.data, data=self.data,
preview=self.is_preview preview=self.is_preview
@ -412,32 +429,62 @@ class Newsletter(object):
if self.email_config['notifier']: if self.email_config['notifier']:
return send_notification( return send_notification(
notifier_id=self.email_config['notifier'], notifier_id=self.email_config['notifier'],
subject=self.subject, subject=self.subject_formatted,
body=self.newsletter body=self.newsletter
) )
else: else:
email = EMAIL(config=self.email_config) email = EMAIL(config=self.email_config)
return email.notify( return email.notify(
subject=self.subject, subject=self.subject_formatted,
body=self.newsletter body=self.newsletter
) )
def format_subject(self, subject=None): def build_params(self):
subject = subject or self._DEFAULT_EMAIL_CONFIG['subject'] parameters = self._build_params()
return parameters
def _build_params(self):
date_format = helpers.momentjs_to_arrow(plexpy.CONFIG.DATE_FORMAT)
parameters = {
'server_name': plexpy.CONFIG.PMS_NAME,
'start_date': self.start_date.format(date_format),
'end_date': self.end_date.format(date_format),
'newsletter_days': self.config['last_days'],
'newsletter_url': 'http://localhost:8181/dev'.rstrip('/') + '/newsletter/' + self.uuid,
'newsletter_uuid': self.uuid
}
return parameters
def build_text(self):
custom_formatter = CustomFormatter()
try: try:
subject = unicode(subject).format(**self.parameters) subject = custom_formatter.format(unicode(self.subject), **self.parameters)
except LookupError as e: except LookupError as e:
logger.error( logger.error(
u"Tautulli Newsletter :: Unable to parse parameter %s in newsletter subject. Using fallback." % e) u"Tautulli Newsletter :: Unable to parse parameter %s in newsletter subject. Using fallback." % e)
subject = unicode(self._DEFAULT_EMAIL_CONFIG['subject']).format(**self.parameters) subject = unicode(self._DEFAULT_SUBJECT).format(**self.parameters)
except Exception as e: except Exception as e:
logger.error( logger.error(
u"Tautulli Newsletter :: Unable to parse custom newsletter subject: %s. Using fallback." % e) u"Tautulli Newsletter :: Unable to parse custom newsletter subject: %s. Using fallback." % e)
subject = unicode(self._DEFAULT_EMAIL_CONFIG['subject']).format(**self.parameters) subject = unicode(self._DEFAULT_SUBJECT).format(**self.parameters)
return subject try:
body = custom_formatter.format(unicode(self.body), **self.parameters)
except LookupError as e:
logger.error(
u"Tautulli Newsletter :: Unable to parse parameter %s in newsletter body. Using fallback." % e)
body = unicode(self._DEFAULT_BODY).format(**self.parameters)
except Exception as e:
logger.error(
u"Tautulli Newsletter :: Unable to parse custom newsletter body: %s. Using fallback." % e)
body = unicode(self._DEFAULT_BODY).format(**self.parameters)
return subject, body
def return_config_options(self): def return_config_options(self):
config_options = [] config_options = []
@ -455,23 +502,22 @@ class RecentlyAdded(Newsletter):
_DEFAULT_CONFIG = {'last_days': 7, _DEFAULT_CONFIG = {'last_days': 7,
'incl_libraries': None 'incl_libraries': None
} }
_DEFAULT_SUBJECT = 'Recently Added to {server_name}! ({end_date})'
_DEFAULT_BODY = 'View the newsletter here: {newsletter_url}'
_TEMPLATE_MASTER = 'recently_added_master.html' _TEMPLATE_MASTER = 'recently_added_master.html'
_TEMPLATE = 'recently_added.html' _TEMPLATE = 'recently_added.html'
def __init__(self, config=None, email_config=None, start_date=None, end_date=None): def __init__(self, config=None, email_config=None, start_date=None, end_date=None, subject=None, body=None):
super(RecentlyAdded, self).__init__(config=config, email_config=email_config, super(RecentlyAdded, self).__init__(config=config, email_config=email_config,
start_date=start_date, end_date=end_date) start_date=start_date, end_date=end_date,
subject=subject, body=body)
def _add_config(self):
if self.config['incl_libraries'] is None: if self.config['incl_libraries'] is None:
self.config['incl_libraries'] = [] self.config['incl_libraries'] = []
elif not isinstance(self.config['incl_libraries'], list): elif not isinstance(self.config['incl_libraries'], list):
self.config['incl_libraries'] = [self.config['incl_libraries']] self.config['incl_libraries'] = [self.config['incl_libraries']]
self._DEFAULT_EMAIL_CONFIG['subject'] = 'Recently Added to Plex ({server_name})! ({end_date})'
self.parameters['pms_identifier'] = plexpy.CONFIG.PMS_IDENTIFIER
self.parameters['pms_web_url'] = plexpy.CONFIG.PMS_WEB_URL
def _get_recently_added(self, media_type=None): def _get_recently_added(self, media_type=None):
pms_connect = pmsconnect.PmsConnect() pms_connect = pmsconnect.PmsConnect()
@ -656,6 +702,20 @@ class RecentlyAdded(Newsletter):
sections[library_type] = group sections[library_type] = group
return sections return sections
def build_params(self):
parameters = self._build_params()
newsletter_libraries = []
for s in self._get_sections():
if str(s['section_id']) in self.config['incl_libraries']:
newsletter_libraries.append(s['section_name'])
parameters['newsletter_libraries'] = ', '.join(sorted(newsletter_libraries))
parameters['pms_identifier'] = plexpy.CONFIG.PMS_IDENTIFIER
parameters['pms_web_url'] = plexpy.CONFIG.PMS_WEB_URL
return parameters
def return_config_options(self): def return_config_options(self):
config_option = [{'label': 'Number of Days', config_option = [{'label': 'Number of Days',
'value': self.config['last_days'], 'value': self.config['last_days'],

View file

@ -2495,6 +2495,7 @@ class WebInterface(object):
("agent_name", True, True), ("agent_name", True, True),
("notify_action", True, True), ("notify_action", True, True),
("subject_text", True, True), ("subject_text", True, True),
("body_text", True, True),
("start_date", True, True), ("start_date", True, True),
("end_date", True, True), ("end_date", True, True),
("uuid", True, True)] ("uuid", True, True)]
@ -5482,13 +5483,11 @@ class WebInterface(object):
"cron": "0 0 * * 1", "cron": "0 0 * * 1",
"active": 1 "active": 1
"config": {"last_days": 7, "config": {"last_days": 7,
"incl_movies": 1, "incl_libraries": [1, 2]
"incl_shows": 1,
"incl_artists": 1,
}, },
"email_config": {...},
"config_options": [{...}, ...], "config_options": [{...}, ...],
"email_config_options": [{...}, ...], "email_config_options": [{...}, ...]
"email_notifier": 0
} }
``` ```
""" """
@ -5561,7 +5560,7 @@ class WebInterface(object):
@cherrypy.expose @cherrypy.expose
@requireAuth(member_of("admin")) @requireAuth(member_of("admin"))
@addtoapi("notify_newsletter") @addtoapi("notify_newsletter")
def send_newsletter(self, newsletter_id=None, subject='', notify_action='', **kwargs): def send_newsletter(self, newsletter_id=None, subject='', body='', notify_action='', **kwargs):
""" Send a newsletter using Tautulli. """ Send a newsletter using Tautulli.
``` ```
@ -5587,6 +5586,7 @@ class WebInterface(object):
if newsletter_handler.notify(newsletter_id=newsletter_id, if newsletter_handler.notify(newsletter_id=newsletter_id,
notify_action=notify_action, notify_action=notify_action,
subject=subject, subject=subject,
body=body,
**kwargs): **kwargs):
return "Newsletter sent." return "Newsletter sent."
else: else: