Retrieve newsletter using uuid

This commit is contained in:
JonnyWong16 2018-03-18 00:45:27 -07:00
parent c9618322c2
commit 2245e38d40
4 changed files with 60 additions and 27 deletions

View file

@ -27,7 +27,11 @@
<script>
$(document).ready(function () {
var frame = $('<iframe></iframe>', {
src: 'real_newsletter?newsletter_id=${newsletter_id}&preview=true',
% if newsletter_uuid:
src: '${http_root}real_newsletter?newsletter_uuid=${newsletter_uuid}',
% else:
src: '${http_root}real_newsletter?newsletter_id=${newsletter_id}&preview=true',
% endif
frameborder: '0',
style: 'display: none; height: 100vh; width: 100vw;'
});

View file

@ -91,10 +91,10 @@ def notify(newsletter_id=None, notify_action=None, **kwargs):
def set_notify_state(newsletter, notify_action, subject, start_date, end_date):
if newsletter and notify_action:
monitor_db = database.MonitorDatabase()
db = database.MonitorDatabase()
keys = {'timestamp': int(time.time()),
'uuid': get_newsletter_uuid()}
'uuid': generate_newsletter_uuid()}
values = {'newsletter_id': newsletter['id'],
'agent_id': newsletter['agent_id'],
@ -104,8 +104,8 @@ def set_notify_state(newsletter, notify_action, subject, start_date, end_date):
'start_date': start_date,
'end_date': end_date}
monitor_db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values)
return monitor_db.last_insert_id()
db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values)
return db.last_insert_id()
else:
logger.error(u"Tautulli NewsletterHandler :: Unable to set notify state.")
@ -114,21 +114,26 @@ def set_notify_success(newsletter_log_id):
keys = {'id': newsletter_log_id}
values = {'success': 1}
monitor_db = database.MonitorDatabase()
monitor_db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values)
db = database.MonitorDatabase()
db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values)
def get_newsletter_uuid():
def generate_newsletter_uuid():
uuid = ''
uuid_exists = 1
uuid_exists = 0
db = database.MonitorDatabase()
while not uuid or uuid_exists:
if uuid:
uuid = plexpy.generate_uuid()[:8]
result = db.select_single(
'SELECT EXISTS(SELECT uuid FROM newsletter_log WHERE uuid = ?) as uuid_exists', [uuid])
uuid_exists = result['uuid_exists']
uuid = plexpy.generate_uuid()[:8]
return uuid
def get_newsletter(newsletter_uuid):
db = database.MonitorDatabase()
result = db.select_single('SELECT newsletter_id, start_date, end_date FROM newsletter_log '
'WHERE uuid = ?', [newsletter_uuid])
return result

View file

@ -63,14 +63,19 @@ def available_notification_actions():
return actions
def get_agent_class(agent_id=None, config=None, email_config=None):
def get_agent_class(agent_id=None, config=None, email_config=None, start_date=None, end_date=None):
if str(agent_id).isdigit():
agent_id = int(agent_id)
kwargs = {'config': config,
'email_config': email_config,
'start_date': start_date,
'end_date': end_date}
if agent_id == 0:
return RecentlyAdded(config=config, email_config=email_config)
return RecentlyAdded(**kwargs)
else:
return Newsletter(config=config, email_config=email_config)
return Newsletter(**kwargs)
else:
return None
@ -413,7 +418,8 @@ class RecentlyAdded(Newsletter):
_TEMPLATE = 'recently_added.html'
def __init__(self, config=None, email_config=None, start_date=None, end_date=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)
if self.config['incl_libraries'] is None:
self.config['incl_libraries'] = []
@ -435,7 +441,7 @@ class RecentlyAdded(Newsletter):
while not done:
recent_items = pms_connect.get_recently_added_details(start=str(start), count='10', type=media_type)
filtered_items = [i for i in recent_items['recently_added']
if helpers.cast_to_int(i['added_at']) > self.start_time]
if self.start_time < helpers.cast_to_int(i['added_at']) < self.end_time]
if len(filtered_items) < 10:
done = True
else:
@ -475,7 +481,7 @@ class RecentlyAdded(Newsletter):
show_metadata = pms_connect.get_metadata_details(show_rating_key, media_info=False)
children = pms_connect.get_item_children(show_rating_key, get_grandchildren=True)
filtered_children = [i for i in children['children_list']
if helpers.cast_to_int(i['added_at']) > self.start_time]
if self.start_time < helpers.cast_to_int(i['added_at']) < self.end_time]
filtered_children.sort(key=lambda x: int(x['parent_media_index']))
seasons = []
@ -522,7 +528,7 @@ class RecentlyAdded(Newsletter):
artist_metadata = pms_connect.get_metadata_details(artist_rating_key, media_info=False)
children = pms_connect.get_item_children(artist_rating_key)
filtered_children = [i for i in children['children_list']
if helpers.cast_to_int(i['added_at']) > self.start_time]
if self.start_time < helpers.cast_to_int(i['added_at']) < self.end_time]
filtered_children.sort(key=lambda x: x['added_at'])
albums = []

View file

@ -5513,20 +5513,36 @@ class WebInterface(object):
@cherrypy.expose
@requireAuth(member_of("admin"))
def newsletter(self, newsletter_id=None, **kwargs):
def newsletter(self, *args, **kwargs):
newsletter_uuid = args[0] if args else None
newsletter_id = kwargs.pop('newsletter_id', None)
return serve_template(templatename="newsletter_preview.html",
title="Newsletter",
newsletter_id=newsletter_id)
newsletter_id=newsletter_id,
newsletter_uuid=newsletter_uuid)
@cherrypy.expose
@requireAuth(member_of("admin"))
def real_newsletter(self, newsletter_id=None, preview=False, master=False, raw=False, **kwargs):
def real_newsletter(self, newsletter_id=None, newsletter_uuid=None, start_date=None, end_date=None,
preview=False, master=False, raw=False, **kwargs):
if newsletter_uuid:
newsletter = newsletter_handler.get_newsletter(newsletter_uuid=newsletter_uuid)
if newsletter:
newsletter_id = newsletter['newsletter_id']
start_date = newsletter['start_date']
end_date = newsletter['end_date']
else:
return "This newsletter does not exist"
if newsletter_id:
newsletter = newsletters.get_newsletter_config(newsletter_id=newsletter_id)
if newsletter:
newsletter_agent = newsletters.get_agent_class(agent_id=newsletter['agent_id'],
config=newsletter['config'])
config=newsletter['config'],
start_date=start_date,
end_date=end_date)
preview = (preview == 'true')
master = (master == 'true')
raw = (raw == 'true')
@ -5537,6 +5553,8 @@ class WebInterface(object):
return newsletter_agent.generate_newsletter(preview=preview, master=master)
return "Invalid Newsletter ID #%s" % newsletter_id
logger.error(u"Failed to retrieve newsletter: Invalid newsletter_id #%s" % newsletter_id)
return "Failed to retrieve newsletter"
return "Missing newsletter_id parameter"
logger.error(u"Failed to retrieve newsletter: Missing newsletter_id parameter.")
return "Failed to retrieve newsletter"