From e6aef015081752cc068120d7a55de5a5324eee73 Mon Sep 17 00:00:00 2001 From: Jonathan Wong Date: Sat, 21 Nov 2015 10:27:51 -0800 Subject: [PATCH] Separate out TV notification toggle in settings --- data/interfaces/default/settings.html | 9 +- data/interfaces/default/welcome.html | 7 +- plexpy/api.py | 2 +- plexpy/notification_handler.py | 223 +++++++++++++------------- plexpy/webserve.py | 6 +- 5 files changed, 127 insertions(+), 120 deletions(-) diff --git a/data/interfaces/default/settings.html b/data/interfaces/default/settings.html index ad29c0c6..f8e39615 100644 --- a/data/interfaces/default/settings.html +++ b/data/interfaces/default/settings.html @@ -479,7 +479,12 @@ available_notification_agents = sorted(notifiers.available_notification_agents()
+
+
+
@@ -527,7 +532,7 @@ available_notification_agents = sorted(notifiers.available_notification_agents()
-

Set the delay for recently added notifications to allow metadata to be processes. Minimum 60 seconds.

+

Set the delay for recently added notifications to allow metadata to be processed. Minimum 60 seconds.

diff --git a/data/interfaces/default/welcome.html b/data/interfaces/default/welcome.html index 3f50ad63..e4388b65 100644 --- a/data/interfaces/default/welcome.html +++ b/data/interfaces/default/welcome.html @@ -1,4 +1,4 @@ -<% +<% import plexpy from plexpy import common %> @@ -130,7 +130,10 @@ from plexpy import common

PlexPy supports a wide variety of notification options. To set up a notification agent conifgure this in Settings -> Notification Agents after you have completed this setup wizard.


- Enable notifications on Movie and TV playback + Enable notifications on Movie playback +
+
+ Enable notifications on TV Show playback
Enable notifications on Music playback diff --git a/plexpy/api.py b/plexpy/api.py index 38714b35..dc9d30ac 100644 --- a/plexpy/api.py +++ b/plexpy/api.py @@ -394,8 +394,8 @@ class Api(object): "grouping_global_history": bool(plexpy.CONFIG.GROUPING_GLOBAL_HISTORY), "grouping_user_history": bool(plexpy.CONFIG.GROUPING_USER_HISTORY), "grouping_charts": bool(plexpy.CONFIG.GROUPING_CHARTS), - "tv_notify_enable": bool(plexpy.CONFIG.TV_NOTIFY_ENABLE), "movie_notify_enable": bool(plexpy.CONFIG.MOVIE_NOTIFY_ENABLE), + "tv_notify_enable": bool(plexpy.CONFIG.TV_NOTIFY_ENABLE), "music_notify_enable": bool(plexpy.CONFIG.MUSIC_NOTIFY_ENABLE), "tv_notify_on_start": bool(plexpy.CONFIG.TV_NOTIFY_ON_START), "movie_notify_on_start": bool(plexpy.CONFIG.MOVIE_NOTIFY_ON_START), diff --git a/plexpy/notification_handler.py b/plexpy/notification_handler.py index 9d943697..24485fc5 100644 --- a/plexpy/notification_handler.py +++ b/plexpy/notification_handler.py @@ -30,13 +30,66 @@ def notify(stream_data=None, notify_action=None): if not user_details['do_notify']: return - if stream_data['media_type'] == 'movie' or stream_data['media_type'] == 'episode': - if plexpy.CONFIG.MOVIE_NOTIFY_ENABLE or plexpy.CONFIG.TV_NOTIFY_ENABLE: + if (stream_data['media_type'] == 'movie' and plexpy.CONFIG.MOVIE_NOTIFY_ENABLE) \ + or (stream_data['media_type'] == 'episode' and plexpy.CONFIG.TV_NOTIFY_ENABLE): - progress_percent = helpers.get_percent(stream_data['view_offset'], stream_data['duration']) + progress_percent = helpers.get_percent(stream_data['view_offset'], stream_data['duration']) - for agent in notifiers.available_notification_agents(): - if agent['on_play'] and notify_action == 'play': + for agent in notifiers.available_notification_agents(): + if agent['on_play'] and notify_action == 'play': + # Build and send notification + notify_strings = build_notify_text(session=stream_data, state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + # Set the notification state in the db + set_notify_state(session=stream_data, state=notify_action, agent_info=agent) + + elif agent['on_stop'] and notify_action == 'stop' \ + and (plexpy.CONFIG.NOTIFY_CONSECUTIVE or progress_percent < plexpy.CONFIG.NOTIFY_WATCHED_PERCENT): + # Build and send notification + notify_strings = build_notify_text(session=stream_data, state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + + set_notify_state(session=stream_data, state=notify_action, agent_info=agent) + + elif agent['on_pause'] and notify_action == 'pause' \ + and (plexpy.CONFIG.NOTIFY_CONSECUTIVE or progress_percent < 99): + # Build and send notification + notify_strings = build_notify_text(session=stream_data, state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + + set_notify_state(session=stream_data, state=notify_action, agent_info=agent) + + elif agent['on_resume'] and notify_action == 'resume' \ + and (plexpy.CONFIG.NOTIFY_CONSECUTIVE or progress_percent < 99): + # Build and send notification + notify_strings = build_notify_text(session=stream_data, state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + + set_notify_state(session=stream_data, state=notify_action, agent_info=agent) + + elif agent['on_buffer'] and notify_action == 'buffer': + # Build and send notification + notify_strings = build_notify_text(session=stream_data, state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + + set_notify_state(session=stream_data, state=notify_action, agent_info=agent) + + elif agent['on_watched'] and notify_action == 'watched': + # Get the current states for notifications from our db + notify_states = get_notify_state(session=stream_data) + + # If there is nothing in the notify_log for our agent id but it is enabled we should notify + if not any(d['agent_id'] == agent['id'] for d in notify_states): # Build and send notification notify_strings = build_notify_text(session=stream_data, state=notify_action) notifiers.send_notification(config_id=agent['id'], @@ -45,119 +98,65 @@ def notify(stream_data=None, notify_action=None): # Set the notification state in the db set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - elif agent['on_stop'] and notify_action == 'stop' \ - and (plexpy.CONFIG.NOTIFY_CONSECUTIVE or progress_percent < plexpy.CONFIG.NOTIFY_WATCHED_PERCENT): - # Build and send notification - notify_strings = build_notify_text(session=stream_data, state=notify_action) - notifiers.send_notification(config_id=agent['id'], - subject=notify_strings[0], - body=notify_strings[1]) + else: + # Check in our notify log if the notification has already been sent + for notify_state in notify_states: + if not notify_state['on_watched'] and (notify_state['agent_id'] == agent['id']): + # Build and send notification + notify_strings = build_notify_text(session=stream_data, state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + # Set the notification state in the db + set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - set_notify_state(session=stream_data, state=notify_action, agent_info=agent) + elif (stream_data['media_type'] == 'track' and plexpy.CONFIG.MUSIC_NOTIFY_ENABLE): - elif agent['on_pause'] and notify_action == 'pause' \ - and (plexpy.CONFIG.NOTIFY_CONSECUTIVE or progress_percent < 99): - # Build and send notification - notify_strings = build_notify_text(session=stream_data, state=notify_action) - notifiers.send_notification(config_id=agent['id'], - subject=notify_strings[0], - body=notify_strings[1]) + for agent in notifiers.available_notification_agents(): + if agent['on_play'] and notify_action == 'play': + # Build and send notification + notify_strings = build_notify_text(session=stream_data, state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + # Set the notification state in the db + set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - set_notify_state(session=stream_data, state=notify_action, agent_info=agent) + elif agent['on_stop'] and notify_action == 'stop': + # Build and send notification + notify_strings = build_notify_text(session=stream_data, state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + # Set the notification state in the db + set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - elif agent['on_resume'] and notify_action == 'resume' \ - and (plexpy.CONFIG.NOTIFY_CONSECUTIVE or progress_percent < 99): - # Build and send notification - notify_strings = build_notify_text(session=stream_data, state=notify_action) - notifiers.send_notification(config_id=agent['id'], - subject=notify_strings[0], - body=notify_strings[1]) + elif agent['on_pause'] and notify_action == 'pause': + # Build and send notification + notify_strings = build_notify_text(session=stream_data, state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + # Set the notification state in the db + set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - set_notify_state(session=stream_data, state=notify_action, agent_info=agent) + elif agent['on_resume'] and notify_action == 'resume': + # Build and send notification + notify_strings = build_notify_text(session=stream_data, state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + # Set the notification state in the db + set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - elif agent['on_buffer'] and notify_action == 'buffer': - # Build and send notification - notify_strings = build_notify_text(session=stream_data, state=notify_action) - notifiers.send_notification(config_id=agent['id'], - subject=notify_strings[0], - body=notify_strings[1]) - - set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - - elif agent['on_watched'] and notify_action == 'watched': - # Get the current states for notifications from our db - notify_states = get_notify_state(session=stream_data) - - # If there is nothing in the notify_log for our agent id but it is enabled we should notify - if not any(d['agent_id'] == agent['id'] for d in notify_states): - # Build and send notification - notify_strings = build_notify_text(session=stream_data, state=notify_action) - notifiers.send_notification(config_id=agent['id'], - subject=notify_strings[0], - body=notify_strings[1]) - # Set the notification state in the db - set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - - else: - # Check in our notify log if the notification has already been sent - for notify_state in notify_states: - if not notify_state['on_watched'] and (notify_state['agent_id'] == agent['id']): - # Build and send notification - notify_strings = build_notify_text(session=stream_data, state=notify_action) - notifiers.send_notification(config_id=agent['id'], - subject=notify_strings[0], - body=notify_strings[1]) - # Set the notification state in the db - set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - - elif stream_data['media_type'] == 'track': - if plexpy.CONFIG.MUSIC_NOTIFY_ENABLE: - - for agent in notifiers.available_notification_agents(): - if agent['on_play'] and notify_action == 'play': - # Build and send notification - notify_strings = build_notify_text(session=stream_data, state=notify_action) - notifiers.send_notification(config_id=agent['id'], - subject=notify_strings[0], - body=notify_strings[1]) - # Set the notification state in the db - set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - - elif agent['on_stop'] and notify_action == 'stop': - # Build and send notification - notify_strings = build_notify_text(session=stream_data, state=notify_action) - notifiers.send_notification(config_id=agent['id'], - subject=notify_strings[0], - body=notify_strings[1]) - # Set the notification state in the db - set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - - elif agent['on_pause'] and notify_action == 'pause': - # Build and send notification - notify_strings = build_notify_text(session=stream_data, state=notify_action) - notifiers.send_notification(config_id=agent['id'], - subject=notify_strings[0], - body=notify_strings[1]) - # Set the notification state in the db - set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - - elif agent['on_resume'] and notify_action == 'resume': - # Build and send notification - notify_strings = build_notify_text(session=stream_data, state=notify_action) - notifiers.send_notification(config_id=agent['id'], - subject=notify_strings[0], - body=notify_strings[1]) - # Set the notification state in the db - set_notify_state(session=stream_data, state=notify_action, agent_info=agent) - - elif agent['on_buffer'] and notify_action == 'buffer': - # Build and send notification - notify_strings = build_notify_text(session=stream_data, state=notify_action) - notifiers.send_notification(config_id=agent['id'], - subject=notify_strings[0], - body=notify_strings[1]) - # Set the notification state in the db - set_notify_state(session=stream_data, state=notify_action, agent_info=agent) + elif agent['on_buffer'] and notify_action == 'buffer': + # Build and send notification + notify_strings = build_notify_text(session=stream_data, state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + # Set the notification state in the db + set_notify_state(session=stream_data, state=notify_action, agent_info=agent) elif stream_data['media_type'] == 'clip': pass diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 24233bc1..ba09435d 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -90,8 +90,8 @@ class WebInterface(object): "pms_token": plexpy.CONFIG.PMS_TOKEN, "pms_ssl": checked(plexpy.CONFIG.PMS_SSL), "pms_uuid": plexpy.CONFIG.PMS_UUID, - "tv_notify_enable": checked(plexpy.CONFIG.TV_NOTIFY_ENABLE), "movie_notify_enable": checked(plexpy.CONFIG.MOVIE_NOTIFY_ENABLE), + "tv_notify_enable": checked(plexpy.CONFIG.TV_NOTIFY_ENABLE), "music_notify_enable": checked(plexpy.CONFIG.MUSIC_NOTIFY_ENABLE), "tv_notify_on_start": checked(plexpy.CONFIG.TV_NOTIFY_ON_START), "movie_notify_on_start": checked(plexpy.CONFIG.MOVIE_NOTIFY_ON_START), @@ -423,8 +423,8 @@ class WebInterface(object): "grouping_global_history": checked(plexpy.CONFIG.GROUPING_GLOBAL_HISTORY), "grouping_user_history": checked(plexpy.CONFIG.GROUPING_USER_HISTORY), "grouping_charts": checked(plexpy.CONFIG.GROUPING_CHARTS), - "tv_notify_enable": checked(plexpy.CONFIG.TV_NOTIFY_ENABLE), "movie_notify_enable": checked(plexpy.CONFIG.MOVIE_NOTIFY_ENABLE), + "tv_notify_enable": checked(plexpy.CONFIG.TV_NOTIFY_ENABLE), "music_notify_enable": checked(plexpy.CONFIG.MUSIC_NOTIFY_ENABLE), "tv_notify_on_start": checked(plexpy.CONFIG.TV_NOTIFY_ON_START), "movie_notify_on_start": checked(plexpy.CONFIG.MOVIE_NOTIFY_ON_START), @@ -486,7 +486,7 @@ class WebInterface(object): checked_configs = [ "launch_browser", "enable_https", "api_enabled", "freeze_db", "check_github", "grouping_global_history", "grouping_user_history", "grouping_charts", "pms_use_bif", "pms_ssl", - "tv_notify_enable", "movie_notify_enable", "music_notify_enable", "monitoring_use_websocket", + "movie_notify_enable", "tv_notify_enable", "music_notify_enable", "monitoring_use_websocket", "tv_notify_on_start", "movie_notify_on_start", "music_notify_on_start", "tv_notify_on_stop", "movie_notify_on_stop", "music_notify_on_stop", "tv_notify_on_pause", "movie_notify_on_pause", "music_notify_on_pause", "refresh_users_on_startup",