mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-07 21:51:14 -07:00
Refactor some newsletter code
This commit is contained in:
parent
28efaf73c7
commit
09ea81ccd2
5 changed files with 104 additions and 104 deletions
|
@ -522,7 +522,7 @@
|
||||||
|
|
||||||
function previewNewsletter() {
|
function previewNewsletter() {
|
||||||
showMsg('<i class="fa fa-check"></i> Check pop-up blocker if no response.', false, true, 2000);
|
showMsg('<i class="fa fa-check"></i> 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() {
|
function sendTestNewsletter() {
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
<% from plexpy.notification_handler import PILLOW %>
|
% if data:
|
||||||
|
<%
|
||||||
|
from plexpy.notification_handler import PILLOW
|
||||||
|
recently_added = data['recently_added']
|
||||||
|
%>
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
@ -615,7 +619,7 @@
|
||||||
<div class="card-background" style="background-color: #3F4245;background-position: center;background-size: cover;width: 100%;height: 100%;">
|
<div class="card-background" style="background-color: #3F4245;background-position: center;background-size: cover;width: 100%;height: 100%;">
|
||||||
% endif
|
% endif
|
||||||
<div class="card-poster-container" style="width: 150px;margin: 3px;border: 1px solid rgba(255,255,255,.1);float: left;position: relative;z-index: 1;height: 225px;">
|
<div class="card-poster-container" style="width: 150px;margin: 3px;border: 1px solid rgba(255,255,255,.1);float: left;position: relative;z-index: 1;height: 225px;">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${movie['rating_key']}" title="${movie['title']}" target="_blank" style="color: #3498db;text-decoration: underline;">
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${movie['rating_key']}" title="${movie['title']}" target="_blank" style="color: #3498db;text-decoration: underline;">
|
||||||
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + movie['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else movie['poster_url']});background-color: #3F4245;background-position: center;background-size: cover;height: 100%;width: 100%;">
|
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + movie['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else movie['poster_url']});background-color: #3F4245;background-position: center;background-size: cover;height: 100%;width: 100%;">
|
||||||
<div class="card-poster-overlay" style="background: url(https://cdn.discordapp.com/attachments/334355557706235906/401064397780287489/newsletter-view-on-plex-flat.png) bottom right no-repeat;width: 100%;height: 100%;"></div>
|
<div class="card-poster-overlay" style="background: url(https://cdn.discordapp.com/attachments/334355557706235906/401064397780287489/newsletter-view-on-plex-flat.png) bottom right no-repeat;width: 100%;height: 100%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -623,7 +627,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-container" style="margin: 4px;width: 332px;float: left;position: relative;z-index: 1;height: 225px;">
|
<div class="card-info-container" style="margin: 4px;width: 332px;float: left;position: relative;z-index: 1;height: 225px;">
|
||||||
<div class="card-info-title nowrap" style="white-space: nowrap;border-bottom: 1px solid rgba(255, 255, 255, .1);line-height: 20px;font-size: 15px;padding: 5px;text-overflow: ellipsis;overflow: hidden;">
|
<div class="card-info-title nowrap" style="white-space: nowrap;border-bottom: 1px solid rgba(255, 255, 255, .1);line-height: 20px;font-size: 15px;padding: 5px;text-overflow: ellipsis;overflow: hidden;">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${movie['rating_key']}" title="${movie['title']}" target="_blank" style="color: #ffffff;text-decoration: none;">${movie['title']}</a>
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${movie['rating_key']}" title="${movie['title']}" target="_blank" style="color: #ffffff;text-decoration: none;">${movie['title']}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-body" style="padding: 5px;text-overflow: ellipsis;overflow: hidden;min-height: 157px;">
|
<div class="card-info-body" style="padding: 5px;text-overflow: ellipsis;overflow: hidden;min-height: 157px;">
|
||||||
% if movie['tagline']:
|
% if movie['tagline']:
|
||||||
|
@ -703,7 +707,7 @@
|
||||||
<div class="card-background" style="background-color: #3F4245;background-position: center;background-size: cover;width: 100%;height: 100%;">
|
<div class="card-background" style="background-color: #3F4245;background-position: center;background-size: cover;width: 100%;height: 100%;">
|
||||||
% endif
|
% endif
|
||||||
<div class="card-poster-container" style="width: 150px;margin: 3px;border: 1px solid rgba(255,255,255,.1);float: left;position: relative;z-index: 1;height: 225px;">
|
<div class="card-poster-container" style="width: 150px;margin: 3px;border: 1px solid rgba(255,255,255,.1);float: left;position: relative;z-index: 1;height: 225px;">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${link_rating_key}" title="${link_title}" target="_blank" style="color: #3498db;text-decoration: underline;">
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${link_rating_key}" title="${link_title}" target="_blank" style="color: #3498db;text-decoration: underline;">
|
||||||
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + show['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else show['poster_url']});background-color: #3F4245;background-position: center;background-size: cover;height: 100%;width: 100%;">
|
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + show['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else show['poster_url']});background-color: #3F4245;background-position: center;background-size: cover;height: 100%;width: 100%;">
|
||||||
<div class="card-poster-overlay" style="background: url(https://cdn.discordapp.com/attachments/334355557706235906/401064397780287489/newsletter-view-on-plex-flat.png) bottom right no-repeat;width: 100%;height: 100%;"></div>
|
<div class="card-poster-overlay" style="background: url(https://cdn.discordapp.com/attachments/334355557706235906/401064397780287489/newsletter-view-on-plex-flat.png) bottom right no-repeat;width: 100%;height: 100%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -711,7 +715,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-container" style="margin: 4px;width: 332px;float: left;position: relative;z-index: 1;height: 225px;">
|
<div class="card-info-container" style="margin: 4px;width: 332px;float: left;position: relative;z-index: 1;height: 225px;">
|
||||||
<div class="card-info-title nowrap" style="white-space: nowrap;border-bottom: 1px solid rgba(255, 255, 255, .1);line-height: 20px;font-size: 15px;padding: 5px;text-overflow: ellipsis;overflow: hidden;">
|
<div class="card-info-title nowrap" style="white-space: nowrap;border-bottom: 1px solid rgba(255, 255, 255, .1);line-height: 20px;font-size: 15px;padding: 5px;text-overflow: ellipsis;overflow: hidden;">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${link_rating_key}" title="${link_title}" target="_blank" style="color: #ffffff;text-decoration: none;">${show['title']}</a>
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${link_rating_key}" title="${link_title}" target="_blank" style="color: #ffffff;text-decoration: none;">${show['title']}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-body" style="padding: 5px;text-overflow: ellipsis;overflow: hidden;min-height: 157px;">
|
<div class="card-info-body" style="padding: 5px;text-overflow: ellipsis;overflow: hidden;min-height: 157px;">
|
||||||
<div class="nowrap mb5" style="margin-bottom: 5px;white-space: nowrap;color: #ffffff;font-size: 12px;text-overflow: ellipsis;overflow: hidden;">
|
<div class="nowrap mb5" style="margin-bottom: 5px;white-space: nowrap;color: #ffffff;font-size: 12px;text-overflow: ellipsis;overflow: hidden;">
|
||||||
|
@ -813,7 +817,7 @@
|
||||||
<div class="card-background" style="background-color: #3F4245;background-position: center;background-size: cover;width: 100%;height: 100%;">
|
<div class="card-background" style="background-color: #3F4245;background-position: center;background-size: cover;width: 100%;height: 100%;">
|
||||||
% endif
|
% endif
|
||||||
<div class="card-poster-container" style="width: 150px;margin: 3px;border: 1px solid rgba(255,255,255,.1);float: left;position: relative;z-index: 1;height: 150px;">
|
<div class="card-poster-container" style="width: 150px;margin: 3px;border: 1px solid rgba(255,255,255,.1);float: left;position: relative;z-index: 1;height: 150px;">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${album['rating_key']}" title="${album['title']}" target="_blank" style="color: #3498db;text-decoration: underline;">
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${album['rating_key']}" title="${album['title']}" target="_blank" style="color: #3498db;text-decoration: underline;">
|
||||||
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + album['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else album['poster_url']});background-color: #3F4245;background-position: center;background-size: cover;height: 100%;width: 100%;">
|
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + album['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else album['poster_url']});background-color: #3F4245;background-position: center;background-size: cover;height: 100%;width: 100%;">
|
||||||
<div class="card-poster-overlay" style="background: url(https://cdn.discordapp.com/attachments/334355557706235906/401064397780287489/newsletter-view-on-plex-flat.png) bottom right no-repeat;width: 100%;height: 100%;"></div>
|
<div class="card-poster-overlay" style="background: url(https://cdn.discordapp.com/attachments/334355557706235906/401064397780287489/newsletter-view-on-plex-flat.png) bottom right no-repeat;width: 100%;height: 100%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -821,7 +825,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-container" style="margin: 4px;width: 332px;float: left;position: relative;z-index: 1;height: 150px;">
|
<div class="card-info-container" style="margin: 4px;width: 332px;float: left;position: relative;z-index: 1;height: 150px;">
|
||||||
<div class="card-info-title nowrap" style="white-space: nowrap;border-bottom: 1px solid rgba(255, 255, 255, .1);line-height: 20px;font-size: 15px;padding: 5px;text-overflow: ellipsis;overflow: hidden;">
|
<div class="card-info-title nowrap" style="white-space: nowrap;border-bottom: 1px solid rgba(255, 255, 255, .1);line-height: 20px;font-size: 15px;padding: 5px;text-overflow: ellipsis;overflow: hidden;">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${album['rating_key']}" title="${album['title']}" target="_blank" style="color: #ffffff;text-decoration: none;">${album['title']}</a>
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${album['rating_key']}" title="${album['title']}" target="_blank" style="color: #ffffff;text-decoration: none;">${album['title']}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-body" style="padding: 5px;text-overflow: ellipsis;overflow: hidden;min-height: 82px;">
|
<div class="card-info-body" style="padding: 5px;text-overflow: ellipsis;overflow: hidden;min-height: 82px;">
|
||||||
<div class="nowrap mb5" style="margin-bottom: 5px;white-space: nowrap;color: #ffffff;font-size: 12px;text-overflow: ellipsis;overflow: hidden;">
|
<div class="nowrap mb5" style="margin-bottom: 5px;white-space: nowrap;color: #ffffff;font-size: 12px;text-overflow: ellipsis;overflow: hidden;">
|
||||||
|
@ -882,4 +886,5 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
% endif
|
|
@ -1,4 +1,8 @@
|
||||||
<% from plexpy.notification_handler import PILLOW %>
|
% if data:
|
||||||
|
<%
|
||||||
|
from plexpy.notification_handler import PILLOW
|
||||||
|
recently_added = data['recently_added']
|
||||||
|
%>
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
@ -615,7 +619,7 @@
|
||||||
<div class="card-background">
|
<div class="card-background">
|
||||||
% endif
|
% endif
|
||||||
<div class="card-poster-container">
|
<div class="card-poster-container">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${movie['rating_key']}" title="${movie['title']}" target="_blank">
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${movie['rating_key']}" title="${movie['title']}" target="_blank">
|
||||||
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + movie['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else movie['poster_url']})">
|
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + movie['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else movie['poster_url']})">
|
||||||
<div class="card-poster-overlay"></div>
|
<div class="card-poster-overlay"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -623,7 +627,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-container">
|
<div class="card-info-container">
|
||||||
<div class="card-info-title nowrap">
|
<div class="card-info-title nowrap">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${movie['rating_key']}" title="${movie['title']}" target="_blank">${movie['title']}</a>
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${movie['rating_key']}" title="${movie['title']}" target="_blank">${movie['title']}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-body">
|
<div class="card-info-body">
|
||||||
% if movie['tagline']:
|
% if movie['tagline']:
|
||||||
|
@ -703,7 +707,7 @@
|
||||||
<div class="card-background">
|
<div class="card-background">
|
||||||
% endif
|
% endif
|
||||||
<div class="card-poster-container">
|
<div class="card-poster-container">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${link_rating_key}" title="${link_title}" target="_blank">
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${link_rating_key}" title="${link_title}" target="_blank">
|
||||||
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + show['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else show['poster_url']});">
|
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + show['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else show['poster_url']});">
|
||||||
<div class="card-poster-overlay"></div>
|
<div class="card-poster-overlay"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -711,7 +715,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-container">
|
<div class="card-info-container">
|
||||||
<div class="card-info-title nowrap">
|
<div class="card-info-title nowrap">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${link_rating_key}" title="${link_title}" target="_blank">${show['title']}</a>
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${link_rating_key}" title="${link_title}" target="_blank">${show['title']}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-body">
|
<div class="card-info-body">
|
||||||
<div class="nowrap mb5">
|
<div class="nowrap mb5">
|
||||||
|
@ -813,7 +817,7 @@
|
||||||
<div class="card-background">
|
<div class="card-background">
|
||||||
% endif
|
% endif
|
||||||
<div class="card-poster-container">
|
<div class="card-poster-container">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${album['rating_key']}" title="${album['title']}" target="_blank">
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${album['rating_key']}" title="${album['title']}" target="_blank">
|
||||||
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + album['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else album['poster_url']});">
|
<div class="card-poster" style="background-image: url(${'pms_image_proxy?img=' + album['thumb'] + '&width=300&height=450&fallback=poster&refresh=true' if preview else album['poster_url']});">
|
||||||
<div class="card-poster-overlay"></div>
|
<div class="card-poster-overlay"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -821,7 +825,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-container">
|
<div class="card-info-container">
|
||||||
<div class="card-info-title nowrap">
|
<div class="card-info-title nowrap">
|
||||||
<a href="${plexpy_config['pms_web_url']}#!/server/${plexpy_config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${album['rating_key']}" title="${album['title']}" target="_blank">${album['title']}</a>
|
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${album['rating_key']}" title="${album['title']}" target="_blank">${album['title']}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-info-body">
|
<div class="card-info-body">
|
||||||
<div class="nowrap mb5">
|
<div class="nowrap mb5">
|
||||||
|
@ -882,4 +886,5 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
% endif
|
|
@ -236,7 +236,8 @@ def send_newsletter(newsletter_id=None, subject=None, notify_action='', newslett
|
||||||
email_config=newsletter_config['email_config'])
|
email_config=newsletter_config['email_config'])
|
||||||
return agent.send(subject=subject,
|
return agent.send(subject=subject,
|
||||||
action=notify_action.split('on_')[-1],
|
action=notify_action.split('on_')[-1],
|
||||||
newsletter_log_id=newsletter_log_id, **kwargs)
|
newsletter_log_id=newsletter_log_id,
|
||||||
|
**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.")
|
||||||
|
|
||||||
|
@ -270,7 +271,8 @@ class Newsletter(object):
|
||||||
|
|
||||||
self.parameters = {'server_name': plexpy.CONFIG.PMS_NAME}
|
self.parameters = {'server_name': plexpy.CONFIG.PMS_NAME}
|
||||||
self.is_preview = False
|
self.is_preview = False
|
||||||
self.master_template = False
|
|
||||||
|
self.data = {}
|
||||||
|
|
||||||
def set_config(self, config=None, default=None):
|
def set_config(self, config=None, default=None):
|
||||||
return self._validate_config(config=config, default=default)
|
return self._validate_config(config=config, default=default)
|
||||||
|
@ -288,19 +290,62 @@ class Newsletter(object):
|
||||||
|
|
||||||
return new_config
|
return new_config
|
||||||
|
|
||||||
def _render_template(self, **kwargs):
|
def retrieve_data(self):
|
||||||
if self.master_template:
|
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
|
template = self._TEMPLATE_MASTER
|
||||||
else:
|
else:
|
||||||
template = self._TEMPLATE
|
template = self._TEMPLATE
|
||||||
|
|
||||||
|
self.retrieve_data()
|
||||||
|
|
||||||
return serve_template(
|
return serve_template(
|
||||||
templatename=template,
|
templatename=template,
|
||||||
title=self.NAME,
|
title=self.NAME,
|
||||||
parameters=self.parameters,
|
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):
|
def format_subject(self, subject):
|
||||||
subject = subject or self._DEFAULT_EMAIL_CONFIG['subject']
|
subject = subject or self._DEFAULT_EMAIL_CONFIG['subject']
|
||||||
|
|
||||||
|
@ -317,39 +362,6 @@ class Newsletter(object):
|
||||||
|
|
||||||
return subject
|
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):
|
def return_config_options(self):
|
||||||
config_options = []
|
config_options = []
|
||||||
return config_options
|
return config_options
|
||||||
|
@ -388,13 +400,8 @@ class RecentlyAdded(Newsletter):
|
||||||
|
|
||||||
self.parameters['start_date'] = self.start_date
|
self.parameters['start_date'] = self.start_date
|
||||||
self.parameters['end_date'] = self.end_date
|
self.parameters['end_date'] = self.end_date
|
||||||
|
self.parameters['pms_identifier'] = plexpy.CONFIG.PMS_IDENTIFIER
|
||||||
self.plexpy_config = {
|
self.parameters['pms_web_url'] = plexpy.CONFIG.PMS_WEB_URL
|
||||||
'pms_identifier': plexpy.CONFIG.PMS_IDENTIFIER,
|
|
||||||
'pms_web_url': plexpy.CONFIG.PMS_WEB_URL
|
|
||||||
}
|
|
||||||
|
|
||||||
self.recently_added = {}
|
|
||||||
|
|
||||||
def _get_recently_added(self, media_type=None):
|
def _get_recently_added(self, media_type=None):
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = pmsconnect.PmsConnect()
|
||||||
|
@ -516,15 +523,16 @@ class RecentlyAdded(Newsletter):
|
||||||
media_types = {s['section_type'] for s in self._get_sections()
|
media_types = {s['section_type'] for s in self._get_sections()
|
||||||
if str(s['section_id']) in self.config['incl_libraries']}
|
if str(s['section_id']) in self.config['incl_libraries']}
|
||||||
|
|
||||||
|
recently_added = {}
|
||||||
for media_type in media_types:
|
for media_type in media_types:
|
||||||
if media_type not in self.recently_added:
|
if media_type not in recently_added:
|
||||||
self.recently_added[media_type] = self._get_recently_added(media_type)
|
recently_added[media_type] = self._get_recently_added(media_type)
|
||||||
|
|
||||||
if not self.is_preview:
|
if not self.is_preview:
|
||||||
# Upload posters and art to Imgur
|
# Upload posters and art to Imgur
|
||||||
movies = self.recently_added.get('movie', [])
|
movies = recently_added.get('movie', [])
|
||||||
shows = self.recently_added.get('show', [])
|
shows = recently_added.get('show', [])
|
||||||
artists = self.recently_added.get('artist', [])
|
artists = recently_added.get('artist', [])
|
||||||
albums = [a for artist in artists for a in artist['album']]
|
albums = [a for artist in artists for a in artist['album']]
|
||||||
|
|
||||||
for item in movies + shows + albums:
|
for item in movies + shows + albums:
|
||||||
|
@ -545,14 +553,19 @@ class RecentlyAdded(Newsletter):
|
||||||
blur=True)
|
blur=True)
|
||||||
item['art_url'] = art_info.get('blur_art_url', '')
|
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.data
|
||||||
return self._render_template(
|
|
||||||
recently_added=self.recently_added,
|
def _has_data(self):
|
||||||
plexpy_config=self.plexpy_config,
|
recently_added = self.data.get('recently_added')
|
||||||
preview=self.is_preview
|
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):
|
def _get_sections(self):
|
||||||
return libraries.Libraries().get_sections()
|
return libraries.Libraries().get_sections()
|
||||||
|
|
|
@ -5288,34 +5288,6 @@ class WebInterface(object):
|
||||||
def get_plexpy_url(self, **kwargs):
|
def get_plexpy_url(self, **kwargs):
|
||||||
return helpers.get_plexpy_url()
|
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.expose
|
||||||
@cherrypy.tools.json_out()
|
@cherrypy.tools.json_out()
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
|
@ -5518,13 +5490,18 @@ class WebInterface(object):
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@requireAuth(member_of("admin"))
|
@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:
|
if newsletter_id:
|
||||||
newsletter = newsletters.get_newsletter_config(newsletter_id=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'])
|
newsletter_agent = newsletters.get_agent_class(agent_id=newsletter['agent_id'], config=newsletter['config'])
|
||||||
|
|
||||||
if newsletter_agent:
|
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
|
return "Invalid newsletter id %s" % newsletter_id
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue