diff --git a/data/interfaces/default/newsletter_config.html b/data/interfaces/default/newsletter_config.html index c198e46a..7f3ab901 100644 --- a/data/interfaces/default/newsletter_config.html +++ b/data/interfaces/default/newsletter_config.html @@ -522,7 +522,7 @@ function previewNewsletter() { showMsg('  Check pop-up blocker if no response.', false, true, 2000); - window.open('preview_newsletter?newsletter_id=' + $('#newsletter_id').val()); + window.open('newsletter?newsletter_id=' + $('#newsletter_id').val() + '&preview=true'); } function sendTestNewsletter() { diff --git a/data/interfaces/newsletters/recently_added.html b/data/interfaces/newsletters/recently_added.html index e8b4b17b..ed80cf01 100644 --- a/data/interfaces/newsletters/recently_added.html +++ b/data/interfaces/newsletters/recently_added.html @@ -1,4 +1,8 @@ -<% from plexpy.notification_handler import PILLOW %> +% if data: +<% + from plexpy.notification_handler import PILLOW + recently_added = data['recently_added'] +%> @@ -615,7 +619,7 @@
% endif
- +
@@ -623,7 +627,7 @@
% if movie['tagline']: @@ -703,7 +707,7 @@
% endif
@@ -813,7 +817,7 @@
% endif
@@ -882,4 +886,5 @@ - \ No newline at end of file + +% endif \ No newline at end of file diff --git a/data/interfaces/newsletters/recently_added_master.html b/data/interfaces/newsletters/recently_added_master.html index d6dc3864..63b063e1 100644 --- a/data/interfaces/newsletters/recently_added_master.html +++ b/data/interfaces/newsletters/recently_added_master.html @@ -1,4 +1,8 @@ -<% from plexpy.notification_handler import PILLOW %> +% if data: +<% + from plexpy.notification_handler import PILLOW + recently_added = data['recently_added'] +%> @@ -615,7 +619,7 @@
% endif
% if movie['tagline']: @@ -703,7 +707,7 @@
% endif
@@ -813,7 +817,7 @@
% endif
@@ -882,4 +886,5 @@ - \ No newline at end of file + +% endif \ No newline at end of file diff --git a/plexpy/newsletters.py b/plexpy/newsletters.py index b5589ec1..ad8c62f5 100644 --- a/plexpy/newsletters.py +++ b/plexpy/newsletters.py @@ -236,7 +236,8 @@ def send_newsletter(newsletter_id=None, subject=None, notify_action='', newslett email_config=newsletter_config['email_config']) return agent.send(subject=subject, action=notify_action.split('on_')[-1], - newsletter_log_id=newsletter_log_id, **kwargs) + newsletter_log_id=newsletter_log_id, + **kwargs) else: logger.debug(u"Tautulli Newsletters :: Notification requested but no newsletter_id received.") @@ -270,7 +271,8 @@ class Newsletter(object): self.parameters = {'server_name': plexpy.CONFIG.PMS_NAME} self.is_preview = False - self.master_template = False + + self.data = {} def set_config(self, config=None, default=None): return self._validate_config(config=config, default=default) @@ -288,19 +290,62 @@ class Newsletter(object): return new_config - def _render_template(self, **kwargs): - if self.master_template: + def retrieve_data(self): + pass + + def _has_data(self): + return False + + def raw_data(self, preview=False): + if preview: + self.is_preview = True + + self.retrieve_data() + return {'title': self.NAME, + 'parameters': self.parameters, + 'data': self.data} + + def generate_newsletter(self, preview=False, master=False): + if preview: + self.is_preview = True + + if master: template = self._TEMPLATE_MASTER else: template = self._TEMPLATE + self.retrieve_data() + return serve_template( templatename=template, title=self.NAME, parameters=self.parameters, - **kwargs + data=self.data, + preview=self.is_preview ) + def send(self, subject='', **kwargs): + subject = self.format_subject(subject or self.email_config['subject']) + newsletter = self.generate_newsletter() + + if not self._has_data(): + logger.warn(u"Tautulli Newsletters :: %s newsletter has no data. Newsletter not sent." % self.NAME) + return False + + if self.email_config['notifier']: + return send_notification( + notifier_id=self.email_config['notifier'], + subject=subject, + body=newsletter + ) + + else: + email = EMAIL(config=self.email_config) + return email.notify( + subject=subject, + body=newsletter + ) + def format_subject(self, subject): subject = subject or self._DEFAULT_EMAIL_CONFIG['subject'] @@ -317,39 +362,6 @@ class Newsletter(object): return subject - def retrieve_data(self): - pass - - def generate_newsletter(self): - pass - - def preview(self, master=False): - self.is_preview = True - if master: - self.master_template = True - self.retrieve_data() - return self.generate_newsletter() - - def send(self, subject='', **kwargs): - self.retrieve_data() - - subject = self.format_subject(subject or self.email_config['subject']) - newsletter = self.generate_newsletter() - - if self.email_config['notifier']: - return send_notification( - notifier_id=self.email_config['notifier'], - subject=subject, - body=newsletter - ) - - else: - email = EMAIL(config=self.email_config) - return email.notify( - subject=subject, - body=newsletter - ) - def return_config_options(self): config_options = [] return config_options @@ -388,13 +400,8 @@ class RecentlyAdded(Newsletter): self.parameters['start_date'] = self.start_date self.parameters['end_date'] = self.end_date - - self.plexpy_config = { - 'pms_identifier': plexpy.CONFIG.PMS_IDENTIFIER, - 'pms_web_url': plexpy.CONFIG.PMS_WEB_URL - } - - self.recently_added = {} + 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): pms_connect = pmsconnect.PmsConnect() @@ -516,15 +523,16 @@ class RecentlyAdded(Newsletter): media_types = {s['section_type'] for s in self._get_sections() if str(s['section_id']) in self.config['incl_libraries']} + recently_added = {} for media_type in media_types: - if media_type not in self.recently_added: - self.recently_added[media_type] = self._get_recently_added(media_type) + if media_type not in recently_added: + recently_added[media_type] = self._get_recently_added(media_type) if not self.is_preview: # Upload posters and art to Imgur - movies = self.recently_added.get('movie', []) - shows = self.recently_added.get('show', []) - artists = self.recently_added.get('artist', []) + movies = recently_added.get('movie', []) + shows = recently_added.get('show', []) + artists = recently_added.get('artist', []) albums = [a for artist in artists for a in artist['album']] for item in movies + shows + albums: @@ -545,14 +553,19 @@ class RecentlyAdded(Newsletter): blur=True) item['art_url'] = art_info.get('blur_art_url', '') - return self.recently_added + self.data['recently_added'] = recently_added - def generate_newsletter(self): - return self._render_template( - recently_added=self.recently_added, - plexpy_config=self.plexpy_config, - preview=self.is_preview - ) + return self.data + + def _has_data(self): + recently_added = self.data.get('recently_added') + if recently_added and \ + recently_added.get('movie') or \ + recently_added.get('show') or \ + recently_added.get('artist'): + return True + + return False def _get_sections(self): return libraries.Libraries().get_sections() diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 9eb097f6..2b21d3e4 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -5288,34 +5288,6 @@ class WebInterface(object): def get_plexpy_url(self, **kwargs): return helpers.get_plexpy_url() - @cherrypy.expose - @requireAuth() - def newsletter(self, **kwargs): - news_letter = newsletters.Newsletter() - - config = { - "pms_identifier": plexpy.CONFIG.PMS_IDENTIFIER, - "pms_web_url": plexpy.CONFIG.PMS_WEB_URL - } - - return serve_template(templatename="newsletter_template.html", - title="Newsletter", - recently_added=news_letter.recently_added, - start_date=news_letter.start_date, - end_date=news_letter.end_date, - config=config) - - @cherrypy.expose - @cherrypy.tools.json_out() - @requireAuth() - def newsletter_raw(self, **kwargs): - news_letter = newsletters.Newsletter() - - if news_letter.recently_added: - return news_letter.recently_added - else: - return None - @cherrypy.expose @cherrypy.tools.json_out() @requireAuth(member_of("admin")) @@ -5518,13 +5490,18 @@ class WebInterface(object): @cherrypy.expose @requireAuth(member_of("admin")) - def preview_newsletter(self, newsletter_id=None, master=False, **kwargs): + def newsletter(self, newsletter_id=None, preview=False, master=False, raw=False, **kwargs): if newsletter_id: newsletter = newsletters.get_newsletter_config(newsletter_id=newsletter_id) newsletter_agent = newsletters.get_agent_class(agent_id=newsletter['agent_id'], config=newsletter['config']) if newsletter_agent: - return newsletter_agent.preview(master=master) + preview = (preview == 'true') + + if raw: + return json.dumps(newsletter_agent.raw_data(preview=preview)) + + return newsletter_agent.generate_newsletter(preview=preview, master=master) return "Invalid newsletter id %s" % newsletter_id