diff --git a/plexpy/common.py b/plexpy/common.py index 1075137e..1968656a 100644 --- a/plexpy/common.py +++ b/plexpy/common.py @@ -525,7 +525,9 @@ NEWSLETTER_PARAMETERS = [ {'name': 'Newsletter Time Frame', 'type': 'int', 'value': 'newsletter_time_frame', 'description': 'The time frame included in the newsletter.'}, {'name': 'Newsletter Time Frame Units', 'type': 'str', 'value': 'newsletter_time_frame_units', 'description': 'The time frame units included in the newsletter.'}, {'name': 'Newsletter URL', 'type': 'str', 'value': 'newsletter_url', 'description': 'The self-hosted URL to the newsletter.'}, + {'name': 'Newsletter Latest URL', 'type': 'str', 'value': 'newsletter_latest_url', 'description': 'The self-hosted URL to the latest scheduled newsletter for the agent.'}, {'name': 'Newsletter UUID', 'type': 'str', 'value': 'newsletter_uuid', 'description': 'The unique identifier for the newsletter.'}, + {'name': 'Newsletter ID', 'type': 'int', 'value': 'newsletter_id', 'description': 'The ID number for the newsletter agent.'}, ] }, { diff --git a/plexpy/newsletter_handler.py b/plexpy/newsletter_handler.py index 556f3dab..6f80fd26 100644 --- a/plexpy/newsletter_handler.py +++ b/plexpy/newsletter_handler.py @@ -86,7 +86,8 @@ def notify(newsletter_id=None, notify_action=None, **kwargs): body = newsletter_config['body'] message = newsletter_config['message'] - newsletter_agent = newsletters.get_agent_class(agent_id=newsletter_config['agent_id'], + newsletter_agent = newsletters.get_agent_class(newsletter_id=newsletter_id, + agent_id=newsletter_config['agent_id'], config=newsletter_config['config'], email_config=newsletter_config['email_config'], subject=subject, @@ -149,13 +150,22 @@ def set_notify_success(newsletter_log_id): db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values) -def get_newsletter(newsletter_uuid): +def get_newsletter(newsletter_uuid=None, newsletter_id=None): db = database.MonitorDatabase() - result = db.select_single('SELECT newsletter_id, start_date, end_date FROM newsletter_log ' - 'WHERE uuid = ?', [newsletter_uuid]) + + if newsletter_uuid: + result = db.select_single('SELECT newsletter_id, start_date, end_date, uuid, filename FROM newsletter_log ' + 'WHERE uuid = ?', [newsletter_uuid]) + elif newsletter_id: + result = db.select_single('SELECT newsletter_id, start_date, end_date, uuid, filename FROM newsletter_log ' + 'WHERE newsletter_id = ? AND notify_action != "test" ' + 'ORDER BY timestamp DESC LIMIT 1', [newsletter_id]) + else: + result = None if result: newsletter_id = result['newsletter_id'] + newsletter_uuid = result['uuid'] start_date = result['start_date'] end_date = result['end_date'] diff --git a/plexpy/newsletters.py b/plexpy/newsletters.py index 0ab51436..de3aaa17 100644 --- a/plexpy/newsletters.py +++ b/plexpy/newsletters.py @@ -63,12 +63,13 @@ def available_notification_actions(): return actions -def get_agent_class(agent_id=None, config=None, email_config=None, start_date=None, end_date=None, +def get_agent_class(newsletter_id=None, agent_id=None, config=None, email_config=None, start_date=None, end_date=None, subject=None, body=None, message=None): if str(agent_id).isdigit(): agent_id = int(agent_id) - kwargs = {'config': config, + kwargs = {'newsletter_id': newsletter_id, + 'config': config, 'email_config': email_config, 'start_date': start_date, 'end_date': end_date, @@ -138,7 +139,8 @@ def get_newsletter_config(newsletter_id=None): subject = result.pop('subject') body = result.pop('body') message = result.pop('message') - newsletter_agent = get_agent_class(agent_id=result['agent_id'], config=config, email_config=email_config, + newsletter_agent = get_agent_class(newsletter_id=newsletter_id, agent_id=result['agent_id'], + config=config, email_config=email_config, subject=subject, body=body, message=message) except Exception as e: logger.error(u"Tautulli Newsletters :: Failed to get newsletter config options: %s." % e) @@ -223,7 +225,8 @@ def set_newsletter_config(newsletter_id=None, agent_id=None, **kwargs): body = kwargs.pop('body') message = kwargs.pop('message') - agent_class = get_agent_class(agent_id=agent['id'], config=newsletter_config, email_config=email_config, + agent_class = get_agent_class(newsletter_id=newsletter_id, agent_id=agent['id'], + config=newsletter_config, email_config=email_config, subject=subject, body=body, message=message) keys = {'id': newsletter_id} @@ -312,12 +315,13 @@ class Newsletter(object): _TEMPLATE_MASTER = '' _TEMPLATE = '' - def __init__(self, config=None, email_config=None, start_date=None, end_date=None, + def __init__(self, newsletter_id=None, config=None, email_config=None, start_date=None, end_date=None, subject=None, body=None, message=None): self.config = self.set_config(config=config, default=self._DEFAULT_CONFIG) self.email_config = self.set_config(config=email_config, default=self._DEFAULT_EMAIL_CONFIG) self.uuid = generate_newsletter_uuid() + self.newsletter_id = newsletter_id self.start_date = None self.end_date = None @@ -479,9 +483,9 @@ class Newsletter(object): date_format = helpers.momentjs_to_arrow(plexpy.CONFIG.DATE_FORMAT) if plexpy.CONFIG.NEWSLETTER_SELF_HOSTED and plexpy.CONFIG.HTTP_BASE_URL: - base_url = plexpy.CONFIG.HTTP_BASE_URL + plexpy.HTTP_ROOT + base_url = plexpy.CONFIG.HTTP_BASE_URL + plexpy.HTTP_ROOT + 'newsletter/' else: - base_url = helpers.get_plexpy_url() + '/' + base_url = helpers.get_plexpy_url() + '/newsletter/' parameters = { 'server_name': plexpy.CONFIG.PMS_NAME, @@ -490,8 +494,10 @@ class Newsletter(object): 'week_number': self.start_date.isocalendar()[1], 'newsletter_time_frame': self.config['time_frame'], 'newsletter_time_frame_units': self.config['time_frame_units'], - 'newsletter_url': base_url + 'newsletter/' + self.uuid, - 'newsletter_uuid': self.uuid + 'newsletter_url': base_url + self.uuid, + 'newsletter_latest_url': base_url + 'id/' + str(self.newsletter_id), + 'newsletter_uuid': self.uuid, + 'newsletter_id': self.newsletter_id } return parameters diff --git a/plexpy/webserve.py b/plexpy/webserve.py index b28da750..36833d16 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -5665,8 +5665,15 @@ class WebInterface(object): cherrypy.response.headers['Cache-Control'] = 'max-age=2592000' # 30 days return self.image(args[1], refresh=True) - newsletter_uuid = args[0] - newsletter = newsletter_handler.get_newsletter(newsletter_uuid=newsletter_uuid) + if len(args) >= 2 and args[0] == 'id': + newsletter_id = args[1] + newsletter_uuid = None + else: + newsletter_id = None + newsletter_uuid = args[0] + + newsletter = newsletter_handler.get_newsletter(newsletter_uuid=newsletter_uuid, + newsletter_id=newsletter_id) return newsletter @cherrypy.expose @@ -5685,7 +5692,8 @@ class WebInterface(object): newsletter = newsletters.get_newsletter_config(newsletter_id=newsletter_id) if newsletter: - newsletter_agent = newsletters.get_agent_class(agent_id=newsletter['agent_id'], + newsletter_agent = newsletters.get_agent_class(newsletter_id=newsletter_id, + agent_id=newsletter['agent_id'], config=newsletter['config'], start_date=start_date, end_date=end_date,