diff --git a/data/interfaces/default/notification_triggers_modal.html b/data/interfaces/default/notification_triggers_modal.html index 82971ac2..1993d592 100644 --- a/data/interfaces/default/notification_triggers_modal.html +++ b/data/interfaces/default/notification_triggers_modal.html @@ -78,6 +78,20 @@ from plexpy import helpers

Trigger notification when the Plex Media Server cannot be reached internally.

+
+ +

Trigger notification when the Plex Media Server can be reached externally after being down.

+
+
+ +

Trigger notification when the Plex Media Server can be reached internally after being down.

+
diff --git a/data/interfaces/default/settings.html b/data/interfaces/default/settings.html index b70f78b7..86819976 100644 --- a/data/interfaces/default/settings.html +++ b/data/interfaces/default/settings.html @@ -716,6 +716,40 @@ available_notification_agents = sorted(notifiers.available_notification_agents() +
  • + + +
  • +
  • + + +
  • diff --git a/plexpy/activity_pinger.py b/plexpy/activity_pinger.py index 6cf12443..ee0479d3 100644 --- a/plexpy/activity_pinger.py +++ b/plexpy/activity_pinger.py @@ -36,6 +36,11 @@ def check_active_sessions(ws_request=False): global int_ping_count if session_list: + if int_ping_count >= 3: + logger.info(u"PlexPy Monitor :: The Plex Media Server is back up.") + # Fire off notifications + threading.Thread(target=notification_handler.notify_timeline, + kwargs=dict(notify_action='intup')).start() int_ping_count = 0 media_container = session_list['sessions'] @@ -248,7 +253,7 @@ def check_server_response(): server_response = pms_connect.get_server_response() global ext_ping_count - + # Check for remote access if server_response: @@ -267,6 +272,11 @@ def check_server_response(): % str(ext_ping_count)) # Reset external ping counter else: + if ext_ping_count >= 3: + logger.info(u"PlexPy Monitor :: Plex remote access is back up.") + # Fire off notifications + threading.Thread(target=notification_handler.notify_timeline, + kwargs=dict(notify_action='extup')).start() ext_ping_count = 0 if ext_ping_count == 3: diff --git a/plexpy/config.py b/plexpy/config.py index 664a69ec..5ae5a68f 100644 --- a/plexpy/config.py +++ b/plexpy/config.py @@ -48,6 +48,8 @@ _CONFIG_DEFINITIONS = { 'BOXCAR_ON_CREATED': (int, 'Boxcar', 0), 'BOXCAR_ON_EXTDOWN': (int, 'Boxcar', 0), 'BOXCAR_ON_INTDOWN': (int, 'Boxcar', 0), + 'BOXCAR_ON_EXTUP': (int, 'Boxcar', 0), + 'BOXCAR_ON_INTUP': (int, 'Boxcar', 0), 'BUFFER_THRESHOLD': (int, 'Monitoring', 3), 'BUFFER_WAIT': (int, 'Monitoring', 900), 'CACHE_DIR': (str, 'General', ''), @@ -75,6 +77,8 @@ _CONFIG_DEFINITIONS = { 'EMAIL_ON_CREATED': (int, 'Email', 0), 'EMAIL_ON_EXTDOWN': (int, 'Email', 0), 'EMAIL_ON_INTDOWN': (int, 'Email', 0), + 'EMAIL_ON_EXTUP': (int, 'Email', 0), + 'EMAIL_ON_INTUP': (int, 'Email', 0), 'ENABLE_HTTPS': (int, 'General', 0), 'FIRST_RUN_COMPLETE': (int, 'General', 0), 'FREEZE_DB': (int, 'General', 0), @@ -94,6 +98,8 @@ _CONFIG_DEFINITIONS = { 'GROWL_ON_CREATED': (int, 'Growl', 0), 'GROWL_ON_EXTDOWN': (int, 'Growl', 0), 'GROWL_ON_INTDOWN': (int, 'Growl', 0), + 'GROWL_ON_EXTUP': (int, 'Growl', 0), + 'GROWL_ON_INTUP': (int, 'Growl', 0), 'HOME_LIBRARY_CARDS': (str, 'General', 'library_statistics_first'), 'HOME_STATS_LENGTH': (int, 'General', 30), 'HOME_STATS_TYPE': (int, 'General', 0), @@ -122,6 +128,8 @@ _CONFIG_DEFINITIONS = { 'IFTTT_ON_CREATED': (int, 'IFTTT', 0), 'IFTTT_ON_EXTDOWN': (int, 'IFTTT', 0), 'IFTTT_ON_INTDOWN': (int, 'IFTTT', 0), + 'IFTTT_ON_EXTUP': (int, 'IFTTT', 0), + 'IFTTT_ON_INTUP': (int, 'IFTTT', 0), 'JOURNAL_MODE': (str, 'Advanced', 'wal'), 'LAUNCH_BROWSER': (int, 'General', 1), 'LOG_DIR': (str, 'General', ''), @@ -151,6 +159,8 @@ _CONFIG_DEFINITIONS = { 'NMA_ON_CREATED': (int, 'NMA', 0), 'NMA_ON_EXTDOWN': (int, 'NMA', 0), 'NMA_ON_INTDOWN': (int, 'NMA', 0), + 'NMA_ON_EXTUP': (int, 'NMA', 0), + 'NMA_ON_INTUP': (int, 'NMA', 0), 'NOTIFY_CONSECUTIVE': (int, 'Monitoring', 1), 'NOTIFY_RECENTLY_ADDED': (int, 'Monitoring', 0), 'NOTIFY_RECENTLY_ADDED_GRANDPARENT': (int, 'Monitoring', 0), @@ -174,6 +184,10 @@ _CONFIG_DEFINITIONS = { 'NOTIFY_ON_EXTDOWN_BODY_TEXT': (unicode, 'Monitoring', 'The Plex Media Server remote access is down.'), 'NOTIFY_ON_INTDOWN_SUBJECT_TEXT': (unicode, 'Monitoring', 'PlexPy ({server_name})'), 'NOTIFY_ON_INTDOWN_BODY_TEXT': (unicode, 'Monitoring', 'The Plex Media Server is down.'), + 'NOTIFY_ON_EXTUP_SUBJECT_TEXT': (unicode, 'Monitoring', 'PlexPy ({server_name})'), + 'NOTIFY_ON_EXTUP_BODY_TEXT': (unicode, 'Monitoring', 'The Plex Media Server remote access is back up.'), + 'NOTIFY_ON_INTUP_SUBJECT_TEXT': (unicode, 'Monitoring', 'PlexPy ({server_name})'), + 'NOTIFY_ON_INTUP_BODY_TEXT': (unicode, 'Monitoring', 'The Plex Media Server is back up.'), 'OSX_NOTIFY_APP': (str, 'OSX_Notify', '/Applications/PlexPy'), 'OSX_NOTIFY_ENABLED': (int, 'OSX_Notify', 0), 'OSX_NOTIFY_ON_PLAY': (int, 'OSX_Notify', 0), @@ -185,6 +199,8 @@ _CONFIG_DEFINITIONS = { 'OSX_NOTIFY_ON_CREATED': (int, 'OSX_Notify', 0), 'OSX_NOTIFY_ON_EXTDOWN': (int, 'OSX_Notify', 0), 'OSX_NOTIFY_ON_INTDOWN': (int, 'OSX_Notify', 0), + 'OSX_NOTIFY_ON_EXTUP': (int, 'OSX_Notify', 0), + 'OSX_NOTIFY_ON_INTUP': (int, 'OSX_Notify', 0), 'PLEX_CLIENT_HOST': (str, 'Plex', ''), 'PLEX_ENABLED': (int, 'Plex', 0), 'PLEX_PASSWORD': (str, 'Plex', ''), @@ -198,6 +214,8 @@ _CONFIG_DEFINITIONS = { 'PLEX_ON_CREATED': (int, 'Plex', 0), 'PLEX_ON_EXTDOWN': (int, 'Plex', 0), 'PLEX_ON_INTDOWN': (int, 'Plex', 0), + 'PLEX_ON_EXTUP': (int, 'Plex', 0), + 'PLEX_ON_INTUP': (int, 'Plex', 0), 'PROWL_ENABLED': (int, 'Prowl', 0), 'PROWL_KEYS': (str, 'Prowl', ''), 'PROWL_PRIORITY': (int, 'Prowl', 0), @@ -210,6 +228,8 @@ _CONFIG_DEFINITIONS = { 'PROWL_ON_CREATED': (int, 'Prowl', 0), 'PROWL_ON_EXTDOWN': (int, 'Prowl', 0), 'PROWL_ON_INTDOWN': (int, 'Prowl', 0), + 'PROWL_ON_EXTUP': (int, 'Prowl', 0), + 'PROWL_ON_INTUP': (int, 'Prowl', 0), 'PUSHALOT_APIKEY': (str, 'Pushalot', ''), 'PUSHALOT_ENABLED': (int, 'Pushalot', 0), 'PUSHALOT_ON_PLAY': (int, 'Pushalot', 0), @@ -221,6 +241,8 @@ _CONFIG_DEFINITIONS = { 'PUSHALOT_ON_CREATED': (int, 'Pushalot', 0), 'PUSHALOT_ON_EXTDOWN': (int, 'Pushalot', 0), 'PUSHALOT_ON_INTDOWN': (int, 'Pushalot', 0), + 'PUSHALOT_ON_EXTUP': (int, 'Pushalot', 0), + 'PUSHALOT_ON_INTUP': (int, 'Pushalot', 0), 'PUSHBULLET_APIKEY': (str, 'PushBullet', ''), 'PUSHBULLET_DEVICEID': (str, 'PushBullet', ''), 'PUSHBULLET_CHANNEL_TAG': (str, 'PushBullet', ''), @@ -234,6 +256,8 @@ _CONFIG_DEFINITIONS = { 'PUSHBULLET_ON_CREATED': (int, 'PushBullet', 0), 'PUSHBULLET_ON_EXTDOWN': (int, 'PushBullet', 0), 'PUSHBULLET_ON_INTDOWN': (int, 'PushBullet', 0), + 'PUSHBULLET_ON_EXTUP': (int, 'PushBullet', 0), + 'PUSHBULLET_ON_INTUP': (int, 'PushBullet', 0), 'PUSHOVER_APITOKEN': (str, 'Pushover', ''), 'PUSHOVER_ENABLED': (int, 'Pushover', 0), 'PUSHOVER_KEYS': (str, 'Pushover', ''), @@ -248,6 +272,8 @@ _CONFIG_DEFINITIONS = { 'PUSHOVER_ON_CREATED': (int, 'Pushover', 0), 'PUSHOVER_ON_EXTDOWN': (int, 'Pushover', 0), 'PUSHOVER_ON_INTDOWN': (int, 'Pushover', 0), + 'PUSHOVER_ON_EXTUP': (int, 'Pushover', 0), + 'PUSHOVER_ON_INTUP': (int, 'Pushover', 0), 'REFRESH_USERS_INTERVAL': (int, 'Monitoring', 12), 'REFRESH_USERS_ON_STARTUP': (int, 'Monitoring', 1), 'TELEGRAM_BOT_TOKEN': (str, 'Telegram', ''), @@ -262,6 +288,8 @@ _CONFIG_DEFINITIONS = { 'TELEGRAM_ON_CREATED': (int, 'Telegram', 0), 'TELEGRAM_ON_EXTDOWN': (int, 'Telegram', 0), 'TELEGRAM_ON_INTDOWN': (int, 'Telegram', 0), + 'TELEGRAM_ON_EXTUP': (int, 'Telegram', 0), + 'TELEGRAM_ON_INTUP': (int, 'Telegram', 0), 'TV_LOGGING_ENABLE': (int, 'Monitoring', 1), 'TV_NOTIFY_ENABLE': (int, 'Monitoring', 0), 'TV_NOTIFY_ON_START': (int, 'Monitoring', 1), @@ -280,6 +308,8 @@ _CONFIG_DEFINITIONS = { 'TWITTER_ON_CREATED': (int, 'Twitter', 0), 'TWITTER_ON_EXTDOWN': (int, 'Twitter', 0), 'TWITTER_ON_INTDOWN': (int, 'Twitter', 0), + 'TWITTER_ON_EXTUP': (int, 'Twitter', 0), + 'TWITTER_ON_INTUP': (int, 'Twitter', 0), 'UPDATE_DB_INTERVAL': (int, 'General', 24), 'VERIFY_SSL_CERT': (bool_int, 'Advanced', 1), 'VIDEO_LOGGING_ENABLE': (int, 'Monitoring', 1), @@ -295,7 +325,9 @@ _CONFIG_DEFINITIONS = { 'XBMC_ON_WATCHED': (int, 'XBMC', 0), 'XBMC_ON_CREATED': (int, 'XBMC', 0), 'XBMC_ON_EXTDOWN': (int, 'XBMC', 0), - 'XBMC_ON_INTDOWN': (int, 'XBMC', 0) + 'XBMC_ON_INTDOWN': (int, 'XBMC', 0), + 'XBMC_ON_EXTUP': (int, 'XBMC', 0), + 'XBMC_ON_INTUP': (int, 'XBMC', 0) } # pylint:disable=R0902 # it might be nice to refactor for fewer instance variables diff --git a/plexpy/notification_handler.py b/plexpy/notification_handler.py index b5554252..3bf22332 100644 --- a/plexpy/notification_handler.py +++ b/plexpy/notification_handler.py @@ -199,6 +199,18 @@ def notify_timeline(timeline_data=None, notify_action=None): notifiers.send_notification(config_id=agent['id'], subject=notify_strings[0], body=notify_strings[1]) + if agent['on_extup'] and notify_action == 'extup': + # Build and send notification + notify_strings = build_server_notify_text(state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) + if agent['on_intup'] and notify_action == 'intup': + # Build and send notification + notify_strings = build_server_notify_text(state=notify_action) + notifiers.send_notification(config_id=agent['id'], + subject=notify_strings[0], + body=notify_strings[1]) else: logger.debug(u"PlexPy Notifier :: Notify timeline called but incomplete data received.") @@ -698,6 +710,10 @@ def build_server_notify_text(state=None): on_extdown_body = plexpy.CONFIG.NOTIFY_ON_EXTDOWN_BODY_TEXT on_intdown_subject = plexpy.CONFIG.NOTIFY_ON_INTDOWN_SUBJECT_TEXT on_intdown_body = plexpy.CONFIG.NOTIFY_ON_INTDOWN_BODY_TEXT + on_extup_subject = plexpy.CONFIG.NOTIFY_ON_EXTUP_SUBJECT_TEXT + on_extup_body = plexpy.CONFIG.NOTIFY_ON_EXTUP_BODY_TEXT + on_intup_subject = plexpy.CONFIG.NOTIFY_ON_INTUP_SUBJECT_TEXT + on_intup_body = plexpy.CONFIG.NOTIFY_ON_INTUP_BODY_TEXT available_params = {'server_name': server_name, 'server_uptime': server_uptime} @@ -746,6 +762,50 @@ def build_server_notify_text(state=None): except: logger.error(u"PlexPy Notifier :: Unable to parse custom notification body. Using fallback.") + return [subject_text, body_text] + else: + return [subject_text, body_text] + if state == 'extup': + # Default body text + body_text = 'The Plex Media Server remote access is back up.' + + if on_extup_subject and on_extup_body: + try: + subject_text = unicode(on_extup_subject).format(**available_params) + except LookupError, e: + logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e) + except: + logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.") + + try: + body_text = unicode(on_extup_body).format(**available_params) + except LookupError, e: + logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e) + except: + logger.error(u"PlexPy Notifier :: Unable to parse custom notification body. Using fallback.") + + return [subject_text, body_text] + else: + return [subject_text, body_text] + elif state == 'intup': + # Default body text + body_text = 'The Plex Media Server is back up.' + + if on_intup_subject and on_intup_body: + try: + subject_text = unicode(on_intup_subject).format(**available_params) + except LookupError, e: + logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e) + except: + logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.") + + try: + body_text = unicode(on_intup_body).format(**available_params) + except LookupError, e: + logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e) + except: + logger.error(u"PlexPy Notifier :: Unable to parse custom notification body. Using fallback.") + return [subject_text, body_text] else: return [subject_text, body_text] diff --git a/plexpy/notifiers.py b/plexpy/notifiers.py index 9c616af3..aa126df4 100644 --- a/plexpy/notifiers.py +++ b/plexpy/notifiers.py @@ -68,7 +68,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.GROWL_ON_WATCHED, 'on_created': plexpy.CONFIG.GROWL_ON_CREATED, 'on_extdown': plexpy.CONFIG.GROWL_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.GROWL_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.GROWL_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.GROWL_ON_EXTUP, + 'on_intup': plexpy.CONFIG.GROWL_ON_INTUP }, {'name': 'Prowl', 'id': AGENT_IDS['Prowl'], @@ -83,7 +85,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.PROWL_ON_WATCHED, 'on_created': plexpy.CONFIG.PROWL_ON_CREATED, 'on_extdown': plexpy.CONFIG.PROWL_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.PROWL_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.PROWL_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.PROWL_ON_EXTUP, + 'on_intup': plexpy.CONFIG.PROWL_ON_INTUP }, {'name': 'XBMC', 'id': AGENT_IDS['XBMC'], @@ -98,7 +102,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.XBMC_ON_WATCHED, 'on_created': plexpy.CONFIG.XBMC_ON_CREATED, 'on_extdown': plexpy.CONFIG.XBMC_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.XBMC_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.XBMC_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.XBMC_ON_EXTUP, + 'on_intup': plexpy.CONFIG.XBMC_ON_INTUP }, {'name': 'Plex', 'id': AGENT_IDS['Plex'], @@ -113,7 +119,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.PLEX_ON_WATCHED, 'on_created': plexpy.CONFIG.PLEX_ON_CREATED, 'on_extdown': plexpy.CONFIG.PLEX_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.PLEX_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.PLEX_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.PLEX_ON_EXTUP, + 'on_intup': plexpy.CONFIG.PLEX_ON_INTUP }, {'name': 'NotifyMyAndroid', 'id': AGENT_IDS['NMA'], @@ -128,7 +136,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.NMA_ON_WATCHED, 'on_created': plexpy.CONFIG.NMA_ON_CREATED, 'on_extdown': plexpy.CONFIG.NMA_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.NMA_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.NMA_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.NMA_ON_EXTUP, + 'on_intup': plexpy.CONFIG.NMA_ON_INTUP }, {'name': 'Pushalot', 'id': AGENT_IDS['Pushalot'], @@ -143,7 +153,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.PUSHALOT_ON_WATCHED, 'on_created': plexpy.CONFIG.PUSHALOT_ON_CREATED, 'on_extdown': plexpy.CONFIG.PUSHALOT_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.PUSHALOT_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.PUSHALOT_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.PUSHALOT_ON_EXTUP, + 'on_intup': plexpy.CONFIG.PUSHALOT_ON_INTUP }, {'name': 'Pushbullet', 'id': AGENT_IDS['Pushbullet'], @@ -158,7 +170,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.PUSHBULLET_ON_WATCHED, 'on_created': plexpy.CONFIG.PUSHBULLET_ON_CREATED, 'on_extdown': plexpy.CONFIG.PUSHBULLET_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.PUSHBULLET_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.PUSHBULLET_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.PUSHBULLET_ON_EXTUP, + 'on_intup': plexpy.CONFIG.PUSHBULLET_ON_INTUP }, {'name': 'Pushover', 'id': AGENT_IDS['Pushover'], @@ -173,7 +187,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.PUSHOVER_ON_WATCHED, 'on_created': plexpy.CONFIG.PUSHOVER_ON_CREATED, 'on_extdown': plexpy.CONFIG.PUSHOVER_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.PUSHOVER_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.PUSHOVER_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.PUSHOVER_ON_EXTUP, + 'on_intup': plexpy.CONFIG.PUSHOVER_ON_INTUP }, {'name': 'Boxcar2', 'id': AGENT_IDS['Boxcar2'], @@ -188,7 +204,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.BOXCAR_ON_WATCHED, 'on_created': plexpy.CONFIG.BOXCAR_ON_CREATED, 'on_extdown': plexpy.CONFIG.BOXCAR_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.BOXCAR_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.BOXCAR_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.BOXCAR_ON_EXTUP, + 'on_intup': plexpy.CONFIG.BOXCAR_ON_INTUP }, {'name': 'E-mail', 'id': AGENT_IDS['Email'], @@ -203,7 +221,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.EMAIL_ON_WATCHED, 'on_created': plexpy.CONFIG.EMAIL_ON_CREATED, 'on_extdown': plexpy.CONFIG.EMAIL_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.EMAIL_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.EMAIL_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.EMAIL_ON_EXTUP, + 'on_intup': plexpy.CONFIG.EMAIL_ON_INTUP }, {'name': 'Twitter', 'id': AGENT_IDS['Twitter'], @@ -218,7 +238,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.TWITTER_ON_WATCHED, 'on_created': plexpy.CONFIG.TWITTER_ON_CREATED, 'on_extdown': plexpy.CONFIG.TWITTER_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.TWITTER_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.TWITTER_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.TWITTER_ON_EXTUP, + 'on_intup': plexpy.CONFIG.TWITTER_ON_INTUP }, {'name': 'IFTTT', 'id': AGENT_IDS['IFTTT'], @@ -233,7 +255,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.IFTTT_ON_WATCHED, 'on_created': plexpy.CONFIG.IFTTT_ON_CREATED, 'on_extdown': plexpy.CONFIG.IFTTT_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.IFTTT_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.IFTTT_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.IFTTT_ON_EXTUP, + 'on_intup': plexpy.CONFIG.IFTTT_ON_INTUP }, {'name': 'Telegram', 'id': AGENT_IDS['Telegram'], @@ -248,7 +272,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.TELEGRAM_ON_WATCHED, 'on_created': plexpy.CONFIG.TELEGRAM_ON_CREATED, 'on_extdown': plexpy.CONFIG.TELEGRAM_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.TELEGRAM_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.TELEGRAM_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.TELEGRAM_ON_EXTUP, + 'on_intup': plexpy.CONFIG.TELEGRAM_ON_INTUP } ] @@ -268,7 +294,9 @@ def available_notification_agents(): 'on_watched': plexpy.CONFIG.OSX_NOTIFY_ON_WATCHED, 'on_created': plexpy.CONFIG.OSX_NOTIFY_ON_CREATED, 'on_extdown': plexpy.CONFIG.OSX_NOTIFY_ON_EXTDOWN, - 'on_intdown': plexpy.CONFIG.OSX_NOTIFY_ON_INTDOWN + 'on_intdown': plexpy.CONFIG.OSX_NOTIFY_ON_INTDOWN, + 'on_extup': plexpy.CONFIG.OSX_NOTIFY_ON_EXTUP, + 'on_intup': plexpy.CONFIG.OSX_NOTIFY_ON_INTUP }) return agents diff --git a/plexpy/webserve.py b/plexpy/webserve.py index fb260fe6..ff52d69e 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -467,6 +467,10 @@ class WebInterface(object): "notify_on_extdown_body_text": plexpy.CONFIG.NOTIFY_ON_EXTDOWN_BODY_TEXT, "notify_on_intdown_subject_text": plexpy.CONFIG.NOTIFY_ON_INTDOWN_SUBJECT_TEXT, "notify_on_intdown_body_text": plexpy.CONFIG.NOTIFY_ON_INTDOWN_BODY_TEXT, + "notify_on_extup_subject_text": plexpy.CONFIG.NOTIFY_ON_EXTUP_SUBJECT_TEXT, + "notify_on_extup_body_text": plexpy.CONFIG.NOTIFY_ON_EXTUP_BODY_TEXT, + "notify_on_intup_subject_text": plexpy.CONFIG.NOTIFY_ON_INTUP_SUBJECT_TEXT, + "notify_on_intup_body_text": plexpy.CONFIG.NOTIFY_ON_INTUP_BODY_TEXT, "home_stats_length": plexpy.CONFIG.HOME_STATS_LENGTH, "home_stats_type": checked(plexpy.CONFIG.HOME_STATS_TYPE), "home_stats_count": plexpy.CONFIG.HOME_STATS_COUNT,