From e3b71a729e1c56d293632fe43d2d4166a769fdf5 Mon Sep 17 00:00:00 2001 From: JonnyWong16 Date: Mon, 19 Mar 2018 23:18:27 -0700 Subject: [PATCH 1/8] Revert negative operator values to "OR" (UI change only) --- data/interfaces/default/css/tautulli.css | 3 --- data/interfaces/default/notifier_config.html | 15 --------------- 2 files changed, 18 deletions(-) diff --git a/data/interfaces/default/css/tautulli.css b/data/interfaces/default/css/tautulli.css index 78fa8014..b392bffa 100644 --- a/data/interfaces/default/css/tautulli.css +++ b/data/interfaces/default/css/tautulli.css @@ -134,9 +134,6 @@ div.form-control .selectize-input { text-transform: uppercase; font-size: 10px; } -.react-selectize.root-node .react-selectize-control .react-selectize-search-field-and-selected-values.negative-operator .value-wrapper:not(:first-child):before { - content: "and" !important; -} .react-selectize.root-node .react-selectize-control .react-selectize-search-field-and-selected-values .resizable-input { padding-top: 3px !important; padding-bottom: 3px !important; diff --git a/data/interfaces/default/notifier_config.html b/data/interfaces/default/notifier_config.html index c77b6822..2be64637 100644 --- a/data/interfaces/default/notifier_config.html +++ b/data/interfaces/default/notifier_config.html @@ -340,21 +340,6 @@ } }); - function setNegativeOperator(select) { - if (select.val() === 'does not contain' || select.val() === 'is not') { - select.closest('.form-group').find('.react-selectize-search-field-and-selected-values').addClass('negative-operator'); - } else { - select.closest('.form-group').find('.react-selectize-search-field-and-selected-values').removeClass('negative-operator'); - } - } - - $('#condition-widget select[name=operator]').each(function () { - setNegativeOperator($(this)); - }); - $('#condition-widget').on('change', 'select[name=operator]', function () { - setNegativeOperator($(this)); - }); - function reloadModal() { $.ajax({ url: 'get_notifier_config_modal', From a5807f21b41189538fa624b59a157faa9675734b Mon Sep 17 00:00:00 2001 From: JonnyWong16 Date: Mon, 19 Mar 2018 23:24:09 -0700 Subject: [PATCH 2/8] Flush temporary sessions automatically if failed to check sessions on startup --- plexpy/activity_pinger.py | 4 ++-- plexpy/web_socket.py | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/plexpy/activity_pinger.py b/plexpy/activity_pinger.py index 966158c2..a0db6f99 100644 --- a/plexpy/activity_pinger.py +++ b/plexpy/activity_pinger.py @@ -293,8 +293,8 @@ def connect_server(log=True, startup=False): try: web_socket.start_thread() - except: - logger.error(u"Websocket :: Unable to open connection.") + except Exception as e: + logger.error(u"Websocket :: Unable to open connection: %s." % e) def check_server_access(): diff --git a/plexpy/web_socket.py b/plexpy/web_socket.py index aee3a61f..41736d08 100644 --- a/plexpy/web_socket.py +++ b/plexpy/web_socket.py @@ -25,6 +25,7 @@ import plexpy import activity_handler import activity_pinger import activity_processor +import database import logger name = 'websocket' @@ -33,8 +34,14 @@ ws_shutdown = False def start_thread(): - # Check for any existing sessions on start up - activity_pinger.check_active_sessions(ws_request=True) + try: + # Check for any existing sessions on start up + activity_pinger.check_active_sessions(ws_request=True) + except Exception as e: + logger.error(u"Tautulli WebSocket :: Failed to check for active sessions: %s." % e) + logger.warn(u"Tautulli WebSocket :: Attempt to fix by flushing temporary sessions...") + database.delete_sessions() + # Start the websocket listener on it's own thread thread = threading.Thread(target=run) thread.daemon = True From 24ac34d5e23eb85a0d3f5bf36cdea345f04fb779 Mon Sep 17 00:00:00 2001 From: JonnyWong16 Date: Thu, 22 Mar 2018 19:39:46 -0700 Subject: [PATCH 3/8] Make sure user has Plex Pass if checking for synced stream --- plexpy/pmsconnect.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py index c12f43e3..b1de933b 100644 --- a/plexpy/pmsconnect.py +++ b/plexpy/pmsconnect.py @@ -1475,7 +1475,8 @@ class PmsConnect(object): if media_type not in ('photo', 'clip') \ and not session.getElementsByTagName('Session') \ and not session.getElementsByTagName('TranscodeSession') \ - and helpers.get_xml_attr(session, 'ratingKey').isdigit(): + and helpers.get_xml_attr(session, 'ratingKey').isdigit() \ + and plexpy.CONFIG.PMS_PLEXPASS: plex_tv = plextv.PlexTV() parent_rating_key = helpers.get_xml_attr(session, 'parentRatingKey') grandparent_rating_key = helpers.get_xml_attr(session, 'grandparentRatingKey') From 35914b9a485564d67552580c52a19b67d75701fd Mon Sep 17 00:00:00 2001 From: JonnyWong16 Date: Thu, 22 Mar 2018 20:32:37 -0700 Subject: [PATCH 4/8] Remove unicode from websocket logger error --- plexpy/web_socket.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plexpy/web_socket.py b/plexpy/web_socket.py index 41736d08..aef5756e 100644 --- a/plexpy/web_socket.py +++ b/plexpy/web_socket.py @@ -162,7 +162,7 @@ def run(): logger.info(u"Tautulli WebSocket :: Ready") plexpy.WS_CONNECTED = True except (websocket.WebSocketException, IOError, Exception) as e: - logger.error(u"Tautulli WebSocket :: %s." % e) + logger.error("Tautulli WebSocket :: %s." % e) else: shutdown() @@ -172,7 +172,7 @@ def run(): if ws_shutdown: break - logger.error(u"Tautulli WebSocket :: %s." % e) + logger.error("Tautulli WebSocket :: %s." % e) shutdown() break From 502b807e457b39ecf0e8650b41b9db23b1e061ce Mon Sep 17 00:00:00 2001 From: JonnyWong16 Date: Thu, 22 Mar 2018 21:03:11 -0700 Subject: [PATCH 5/8] Fix websocket not scheduling reconnect --- plexpy/web_socket.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/plexpy/web_socket.py b/plexpy/web_socket.py index aef5756e..e33dea73 100644 --- a/plexpy/web_socket.py +++ b/plexpy/web_socket.py @@ -74,7 +74,7 @@ def on_disconnect(): def reconnect(): - shutdown() + close() logger.info(u"Tautulli WebSocket :: Reconnecting websocket...") start_thread() @@ -82,7 +82,10 @@ def reconnect(): def shutdown(): global ws_shutdown ws_shutdown = True + close() + +def close(): logger.info(u"Tautulli WebSocket :: Disconnecting websocket...") plexpy.WEBSOCKET.close() plexpy.WS_CONNECTED = False @@ -129,7 +132,7 @@ def run(): logger.info(u"Tautulli WebSocket :: Ready") plexpy.WS_CONNECTED = True except (websocket.WebSocketException, IOError, Exception) as e: - logger.error(u"Tautulli WebSocket :: %s." % e) + logger.error("Tautulli WebSocket :: %s." % e) if plexpy.WS_CONNECTED: on_connect() @@ -165,7 +168,7 @@ def run(): logger.error("Tautulli WebSocket :: %s." % e) else: - shutdown() + close() break except (websocket.WebSocketException, Exception) as e: @@ -173,7 +176,7 @@ def run(): break logger.error("Tautulli WebSocket :: %s." % e) - shutdown() + close() break if not plexpy.WS_CONNECTED and not ws_shutdown: From 244008d539bc2aeb2a09b18d9fb4d7331e27798f Mon Sep 17 00:00:00 2001 From: JonnyWong16 Date: Thu, 22 Mar 2018 22:06:01 -0700 Subject: [PATCH 6/8] v2.0.25 --- CHANGELOG.md | 7 +++++++ plexpy/version.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d4f734df..9872855c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## v2.0.25 (2018-03-22) + +* Monitoring: + * Fix: Fix websocket not reconnecting causing activity monitoring and notifications to not work. + * Fix: Error checking for synced streams without Plex Pass. + + ## v2.0.24 (2018-03-18) * Monitoring: diff --git a/plexpy/version.py b/plexpy/version.py index cd47c2a9..97c5050d 100644 --- a/plexpy/version.py +++ b/plexpy/version.py @@ -1,2 +1,2 @@ PLEXPY_BRANCH = "master" -PLEXPY_RELEASE_VERSION = "v2.0.24" +PLEXPY_RELEASE_VERSION = "v2.0.25" From 8fac54aa717590278f0cd4a6442628aac1e25e0d Mon Sep 17 00:00:00 2001 From: JonnyWong16 Date: Thu, 22 Mar 2018 22:11:11 -0700 Subject: [PATCH 7/8] Typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9872855c..418c496c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## v2.0.25 (2018-03-22) * Monitoring: - * Fix: Fix websocket not reconnecting causing activity monitoring and notifications to not work. + * Fix: Websocket not reconnecting causing activity monitoring and notifications to not work. * Fix: Error checking for synced streams without Plex Pass. From 042b48c1fdd5f731d2a115a2af3f8b4e23756b86 Mon Sep 17 00:00:00 2001 From: JonnyWong16 Date: Sat, 24 Mar 2018 23:32:53 -0700 Subject: [PATCH 8/8] Fix repeating renaming notifiers on startup --- plexpy/__init__.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/plexpy/__init__.py b/plexpy/__init__.py index bd2cbd54..4025e283 100644 --- a/plexpy/__init__.py +++ b/plexpy/__init__.py @@ -1597,13 +1597,16 @@ def dbcheck(): ) # Rename notifiers in the database - logger.debug(u"Altering database. Renaming notifiers.") - c_db.execute( - 'UPDATE notifiers SET agent_label = "Kodi" WHERE agent_label = "XBMC"' - ) - c_db.execute( - 'UPDATE notifiers SET agent_label = "macOS Notification Center" WHERE agent_label = "OSX Notify"' - ) + result = c_db.execute('SELECT agent_label FROM notifiers ' + 'WHERE agent_label = "XBMC" OR agent_label = "OSX Notify"').fetchone() + if result: + logger.debug(u"Altering database. Renaming notifiers.") + c_db.execute( + 'UPDATE notifiers SET agent_label = "Kodi" WHERE agent_label = "XBMC"' + ) + c_db.execute( + 'UPDATE notifiers SET agent_label = "macOS Notification Center" WHERE agent_label = "OSX Notify"' + ) # Add "Local" user to database as default unauthenticated user. result = c_db.execute('SELECT id FROM users WHERE username = "Local"')