diff --git a/data/interfaces/default/newsletter_config.html b/data/interfaces/default/newsletter_config.html
index 21577380..c198e46a 100644
--- a/data/interfaces/default/newsletter_config.html
+++ b/data/interfaces/default/newsletter_config.html
@@ -2,6 +2,7 @@
<%!
import json
from plexpy import helpers, notifiers
+ from plexpy.notification_handler import PILLOW
email_notifiers = [n for n in notifiers.get_notifiers() if n['agent_name'] == 'email']
sorted(email_notifiers, key=lambda k: (k['agent_label'], k['friendly_name'], k['id']))
diff --git a/plexpy/__init__.py b/plexpy/__init__.py
index 37bd13a5..f4f5232f 100644
--- a/plexpy/__init__.py
+++ b/plexpy/__init__.py
@@ -478,6 +478,7 @@ def start():
analytics_event(category='system', action='start')
# Schedule newsletters
+ newsletter_handler.NEWSLETTER_SCHED.start()
newsletter_handler.schedule_newsletters()
_STARTED = True
diff --git a/plexpy/newsletter_handler.py b/plexpy/newsletter_handler.py
index cffd59a3..9a5842ea 100644
--- a/plexpy/newsletter_handler.py
+++ b/plexpy/newsletter_handler.py
@@ -28,41 +28,25 @@ NEWSLETTER_SCHED = BackgroundScheduler()
def schedule_newsletters(newsletter_id=None):
- with plexpy.SCHED_LOCK:
+ newsletters_list = newsletters.get_newsletters(newsletter_id=newsletter_id)
- # Check if scheduler should be started
- start_jobs = not len(NEWSLETTER_SCHED.get_jobs())
+ for newsletter in newsletters_list:
+ newsletter_job_name = '{} ({})'.format(newsletter['agent_label'],
+ newsletter['friendly_name'] or newsletter['id'])
- newsletters_list = newsletters.get_newsletters(newsletter_id=newsletter_id)
-
- for newsletter in newsletters_list:
- newsletter_job_name = '{} ({})'.format(newsletter['agent_label'],
- newsletter['friendly_name'] or newsletter['id'])
-
- if newsletter['active']:
- keys = ['minute', 'hour', 'day', 'month', 'day_of_week']
- values = newsletter['cron'].split()
- cron = {k: v for k, v in zip(keys, values)}
-
- schedule_newsletter_job('newsletter-{}'.format(newsletter['id']), name=newsletter_job_name,
- func=notify, args=[newsletter['id'], 'on_cron'], cron=newsletter['cron'])
- else:
- schedule_newsletter_job('newsletter-{}'.format(newsletter['id']), name=newsletter_job_name,
- remove_job=True)
-
- # Start scheduler
- if start_jobs and len(NEWSLETTER_SCHED.get_jobs()):
- try:
- NEWSLETTER_SCHED.start()
- except Exception as e:
- logger.error(e)
+ if newsletter['active']:
+ schedule_newsletter_job('newsletter-{}'.format(newsletter['id']), name=newsletter_job_name,
+ func=notify, args=[newsletter['id'], 'on_cron'], cron=newsletter['cron'])
+ else:
+ schedule_newsletter_job('newsletter-{}'.format(newsletter['id']), name=newsletter_job_name,
+ remove_job=True)
def schedule_newsletter_job(newsletter_job_id, name='', func=None, remove_job=False, args=None, cron=None):
if NEWSLETTER_SCHED.get_job(newsletter_job_id):
if remove_job:
NEWSLETTER_SCHED.remove_job(newsletter_job_id)
- logger.info(u"Tautulli NewsletterHandler :: Removed newsletter schedule: %s" % newsletter_job_id)
+ logger.info(u"Tautulli NewsletterHandler :: Removed scheduled newsletter: %s" % name)
else:
NEWSLETTER_SCHED.reschedule_job(
newsletter_job_id, args=args, trigger=CronTrigger().from_crontab(cron))
diff --git a/plexpy/newsletters.py b/plexpy/newsletters.py
index 6a0b14dc..b5589ec1 100644
--- a/plexpy/newsletters.py
+++ b/plexpy/newsletters.py
@@ -587,4 +587,19 @@ class RecentlyAdded(Newsletter):
}
]
+ if not PILLOW:
+ pillow_message = {
+ 'label': 'Background Art',
+ 'description': 'The Pillow library is missing. '
+ 'Background art on the newsletter media cards will not be included.
'
+ 'Install the Pillow library to add background art. '
+ 'Instructions can be found in the '
+ 'FAQ.',
+ 'name': 'recently_added_pillow',
+ 'input_type': 'help'
+ }
+ config_option.insert(0, pillow_message)
+
return config_option