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> <script>
$(document).ready(function () { $(document).ready(function () {
var frame = $('<iframe></iframe>', { 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', frameborder: '0',
style: 'display: none; height: 100vh; width: 100vw;' 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): def set_notify_state(newsletter, notify_action, subject, start_date, end_date):
if newsletter and notify_action: if newsletter and notify_action:
monitor_db = database.MonitorDatabase() db = database.MonitorDatabase()
keys = {'timestamp': int(time.time()), keys = {'timestamp': int(time.time()),
'uuid': get_newsletter_uuid()} 'uuid': generate_newsletter_uuid()}
values = {'newsletter_id': newsletter['id'], values = {'newsletter_id': newsletter['id'],
'agent_id': newsletter['agent_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, 'start_date': start_date,
'end_date': end_date} 'end_date': end_date}
monitor_db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values) db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values)
return monitor_db.last_insert_id() return db.last_insert_id()
else: else:
logger.error(u"Tautulli NewsletterHandler :: Unable to set notify state.") 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} keys = {'id': newsletter_log_id}
values = {'success': 1} values = {'success': 1}
monitor_db = database.MonitorDatabase() db = database.MonitorDatabase()
monitor_db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values) db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values)
def get_newsletter_uuid(): def generate_newsletter_uuid():
uuid = '' uuid = ''
uuid_exists = 1 uuid_exists = 0
db = database.MonitorDatabase() db = database.MonitorDatabase()
while not uuid or uuid_exists: while not uuid or uuid_exists:
if uuid: uuid = plexpy.generate_uuid()[:8]
result = db.select_single( result = db.select_single(
'SELECT EXISTS(SELECT uuid FROM newsletter_log WHERE uuid = ?) as uuid_exists', [uuid]) 'SELECT EXISTS(SELECT uuid FROM newsletter_log WHERE uuid = ?) as uuid_exists', [uuid])
uuid_exists = result['uuid_exists'] uuid_exists = result['uuid_exists']
uuid = plexpy.generate_uuid()[:8]
return uuid 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 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(): if str(agent_id).isdigit():
agent_id = int(agent_id) agent_id = int(agent_id)
kwargs = {'config': config,
'email_config': email_config,
'start_date': start_date,
'end_date': end_date}
if agent_id == 0: if agent_id == 0:
return RecentlyAdded(config=config, email_config=email_config) return RecentlyAdded(**kwargs)
else: else:
return Newsletter(config=config, email_config=email_config) return Newsletter(**kwargs)
else: else:
return None return None
@ -413,7 +418,8 @@ class RecentlyAdded(Newsletter):
_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):
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: if self.config['incl_libraries'] is None:
self.config['incl_libraries'] = [] self.config['incl_libraries'] = []
@ -435,7 +441,7 @@ class RecentlyAdded(Newsletter):
while not done: while not done:
recent_items = pms_connect.get_recently_added_details(start=str(start), count='10', type=media_type) 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'] 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: if len(filtered_items) < 10:
done = True done = True
else: else:
@ -475,7 +481,7 @@ class RecentlyAdded(Newsletter):
show_metadata = pms_connect.get_metadata_details(show_rating_key, media_info=False) 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) children = pms_connect.get_item_children(show_rating_key, get_grandchildren=True)
filtered_children = [i for i in children['children_list'] 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'])) filtered_children.sort(key=lambda x: int(x['parent_media_index']))
seasons = [] seasons = []
@ -522,7 +528,7 @@ class RecentlyAdded(Newsletter):
artist_metadata = pms_connect.get_metadata_details(artist_rating_key, media_info=False) artist_metadata = pms_connect.get_metadata_details(artist_rating_key, media_info=False)
children = pms_connect.get_item_children(artist_rating_key) children = pms_connect.get_item_children(artist_rating_key)
filtered_children = [i for i in children['children_list'] 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']) filtered_children.sort(key=lambda x: x['added_at'])
albums = [] albums = []

View file

@ -5513,20 +5513,36 @@ class WebInterface(object):
@cherrypy.expose @cherrypy.expose
@requireAuth(member_of("admin")) @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", return serve_template(templatename="newsletter_preview.html",
title="Newsletter", title="Newsletter",
newsletter_id=newsletter_id) newsletter_id=newsletter_id,
newsletter_uuid=newsletter_uuid)
@cherrypy.expose @cherrypy.expose
@requireAuth(member_of("admin")) @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: if newsletter_id:
newsletter = newsletters.get_newsletter_config(newsletter_id=newsletter_id) newsletter = newsletters.get_newsletter_config(newsletter_id=newsletter_id)
if newsletter: if newsletter:
newsletter_agent = newsletters.get_agent_class(agent_id=newsletter['agent_id'], 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') preview = (preview == 'true')
master = (master == 'true') master = (master == 'true')
raw = (raw == 'true') raw = (raw == 'true')
@ -5537,6 +5553,8 @@ class WebInterface(object):
return newsletter_agent.generate_newsletter(preview=preview, master=master) 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"